Skip to main content
GET
/
api
/
public
/
v1
/
studio
/
top-products
Top products [+]
curl --request GET \
  --url https://www.nmcrate.com/api/public/v1/studio/top-products
import requests

url = "https://www.nmcrate.com/api/public/v1/studio/top-products"

response = requests.get(url)

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

fetch('https://www.nmcrate.com/api/public/v1/studio/top-products', 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/top-products",
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/top-products"

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/top-products")
.asString();
require 'uri'
require 'net/http'

url = URI("https://www.nmcrate.com/api/public/v1/studio/top-products")

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
Products ranked by completed-sale revenue within the period, with order counts, the “best sellers” list from the dashboard.
Tier: Premium, requires a premium key and an active Branding+ subscription (checked on every request).

Request

curl "https://nmcrate.com/api/public/v1/studio/top-products?period=thisMonth&limit=5" \
  -H "x-api-key: nmk_studio_..."

Query parameters

ParameterTypeDefaultDescription
periodstringthisMonthCalendar periods (today, thisWeek, thisMonth, thisYear) or rolling windows (last7d, last30d, last90d).
limitinteger10Number of products to return, max 50.

Response

{
  "period": "thisMonth",
  "range": {
    "start": "2026-07-01T00:00:00.000Z",
    "end": "2026-07-31T23:59:59.999Z"
  },
  "currency": "USD",
  "items": [
    {
      "product": {
        "id": "prod_8f3a2c",
        "slug": "dungeon-pack",
        "name": "Dungeon Pack",
        "imageUrl": "https://cdn.example.com/dungeon.png",
        "category": "plugin",
        "price": 14.99
      },
      "revenue": 449.7,
      "orders": 30
    },
    {
      "product": null,
      "revenue": 89.94,
      "orders": 6
    }
  ]
}
FieldDescription
items[]Sorted by revenue, highest first.
items[].productnull when the product was deleted after the sales happened, the revenue still counts.
items[].revenueNet revenue in USD dollars (number).

Errors

HTTPCodeWhen
403PREMIUM_KEY_REQUIREDThe key is basic-tier.
403SUBSCRIPTION_INACTIVEPremium key, but the Branding+ subscription is no longer active.