Skip to content

Quick start

View as Markdown

The Partner API is read-only and server-to-server. You call it from your own backend with a private key, from an IP address you have allowlisted with us. Never call it from a browser or a mobile app.

Base URL: https://api.nimbusmint.bot/partner/v1

Request access with the form or a ticket in the NimbusMint Discord; we issue a private key for your server. The Get API keys page lists what to include. Then:

  1. Check your allowlist. The private key only works from the server IPs you sent us. See IP allowlist.
  2. Store the key as a secret on that server, for example in an environment variable called NIMBUS_PRIVATE_KEY. It looks like nmk_live_<id>_<secret>. Never put it in a browser, a mobile app or a repository.

GET /health needs the same key and allowlisted IP as every other route, so a 200 proves both are right. It returns the key’s own details, including when it expires:

Terminal window
curl https://api.nimbusmint.bot/partner/v1/health \
-H "Authorization: Bearer $NIMBUS_PRIVATE_KEY"
{
"tenant": "example-partner",
"key_id": "nmk_exampleid000",
"scopes": ["read:hits"],
"expires_at": "2027-10-01T00:00:00Z"
}

A 401 invalid_key means the key is wrong, revoked or expired. A 403 ip_not_allowed means the request did not come from an allowlisted address. See Errors.

A hit is one successful mint NimbusMint completed for a user of your app (booked through your app, receipt confirmed, not reverted). Ask for one contract and a start time; the window can span up to 31 days (currently):

Terminal window
curl -G https://api.nimbusmint.bot/partner/v1/hits \
-H "Authorization: Bearer $NIMBUS_PRIVATE_KEY" \
--data-urlencode "contract=0x000000000000000000000000000000000000dEaD" \
--data-urlencode "since=2026-10-01T00:00:00Z" \
--data-urlencode "top=25"

The response (shortened):

{
"contract": "0x000000000000000000000000000000000000dead",
"chain_ids": [33139],
"since": "2026-10-01T00:00:00Z",
"until": "2026-10-02T00:00:00Z",
"total": { "hits": 36, "users": 11 },
"users": [
{
"handle": "s*******", "user_id": "100000000000000001", "discord_id": "100000000000000001",
"discord_username": "sam", "wallets": ["0x1111111111111111111111111111111111111111"],
"hits": 9, "gas": { "mode": "manual", "max_fee_gwei": "3", "priority_gwei": "0.5" }
},
{
"handle": "k*******", "user_id": "100000000000000002", "discord_id": "100000000000000002",
"discord_username": "kai", "wallets": ["0x2222222222222222222222222222222222222222"],
"hits": 4, "gas": { "mode": "auto", "max_fee_gwei": null, "priority_gwei": null }
}
],
"others": { "users": 9, "hits": 23 },
"generated_at": "2026-10-02T00:00:03Z",
"cache_ttl_s": 30
}
  • users are listed by hits, most first. Each row identifies the user: user_id, discord_id, discord_username and the wallets that minted in the window. handle is a ready-made masked name; mask anything you show publicly (see the Terms).
  • For one row per mint (wallet, transaction hash, quantity, time), page through GET /partner/v1/mints with its cursor.
  • others sums everyone beyond the top rows.
  • Cache the response yourself for cache_ttl_s seconds instead of calling again (responses carry Cache-Control: no-store, so no HTTP cache will do it for you). since and until are floored to the minute.

Every field is described in the API reference.

A typical integration is a Discord bot whose /gas command shows mint activity for a collection. The bot already counts hits from its own users and adds the NimbusMint cloud users underneath:

🖥️: 71 hits / ☁️: 36 hits
☁️ s******* — 9 hits — ⛽ 3/0.5
☁️ k******* — 4 hits — ⛽ auto
…and 9 more cloud users — 23 hits

Inside the /gas handler, call /hits with the collection’s contract and your own tracking start as since, then render the rows. The bot runs on your server, so the private key never reaches Discord users.

Terminal window
# What the bot calls for each /gas, with the collection's contract and your tracking start
curl -G https://api.nimbusmint.bot/partner/v1/hits \
-H "Authorization: Bearer $NIMBUS_PRIVATE_KEY" \
--data-urlencode "contract=$CONTRACT" \
--data-urlencode "since=$TRACKING_SINCE" \
--data-urlencode "top=25"