Skip to main content
GET
/
api
/
public
/
v1
/
studio
/
products
/
{slug}
Get a product
curl --request GET \
  --url https://www.nmcrate.com/api/public/v1/studio/products/{slug}
import requests

url = "https://www.nmcrate.com/api/public/v1/studio/products/{slug}"

response = requests.get(url)

print(response.text)
const options = {method: 'GET'};

fetch('https://www.nmcrate.com/api/public/v1/studio/products/{slug}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://www.nmcrate.com/api/public/v1/studio/products/{slug}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://www.nmcrate.com/api/public/v1/studio/products/{slug}"

req, _ := http.NewRequest("GET", url, nil)

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://www.nmcrate.com/api/public/v1/studio/products/{slug}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://www.nmcrate.com/api/public/v1/studio/products/{slug}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
Returns one product from your catalog. The lookup only searches your own studio’s products, a valid slug belonging to another studio returns 404.
Tier: Free, any studio key.

Request

curl https://nmcrate.com/api/public/v1/studio/products/dungeon-pack \
  -H "x-api-key: nmk_studio_..."

Path parameters

ParameterTypeDescription
slugstringProduct slug, public id, or Mongo ObjectId.

Response

{
  "product": {
    "id": "prod_8f3a2c",
    "slug": "dungeon-pack",
    "name": "Dungeon Pack",
    "shortDescription": "50 rooms of doom.",
    "description": "Long-form description…",
    "category": "plugin",
    "tags": ["dungeon", "adventure"],
    "price": 14.99,
    "currency": "USD",
    "isPaid": true,
    "license": "Proprietary",
    "imageUrl": "https://cdn.example.com/dungeon.png",
    "imageUrls": ["https://cdn.example.com/shot-1.png"],
    "currentVersion": "2.1.0",
    "downloadCount": 5321,
    "rating": 4.8,
    "ratingCount": 96,
    "minecraftVersion": { "min": "1.19", "max": "1.21" },
    "modelCompatibility": [],
    "createdAt": "2025-11-02T10:20:00.000Z",
    "updatedAt": "2026-06-30T08:12:00.000Z",
    "url": "/products/dungeon-pack",
    "status": "published",
    "isPublic": true,
    "isArchived": false
  }
}

Errors

HTTPCodeWhen
404NOT_FOUNDNo product with that identifier in this studio.