Every successful mint on a contract by NimbusMint users from your app, one row each
curl -G "https://api.nimbusmint.bot/partner/v1/mints" \ -H "Authorization: Bearer $NIMBUS_PRIVATE_KEY" \ --data-urlencode "contract=0x000000000000000000000000000000000000dead" \ --data-urlencode "since=2026-10-08T15:00:00Z"// Node 18+ (built-in fetch). Keep the key on your server.const url = new URL('https://api.nimbusmint.bot/partner/v1/mints');url.search = new URLSearchParams({ contract: '0x000000000000000000000000000000000000dead', since: '2026-10-08T15:00:00Z',});const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.NIMBUS_PRIVATE_KEY}` },});console.log(res.status, await res.json());import osimport requests
res = requests.get( "https://api.nimbusmint.bot/partner/v1/mints", headers={"Authorization": f"Bearer {os.environ['NIMBUS_PRIVATE_KEY']}"}, params={ "contract": "0x000000000000000000000000000000000000dead", "since": "2026-10-08T15:00:00Z", }, timeout=10,)print(res.status_code, res.json())The rows behind /hits: one row per hit (a mint task booked through
your app that completed successfully on this contract in the
window, timed by when it completed), with the user’s full identity,
the wallet it minted from and the confirmed transaction. These are
your users’ personal data: mask them yourself before showing them to
anyone else.
Rows are ordered oldest first by completed_at (ties in a stable
order). Pages hold at most limit rows; when next_cursor is not
null, pass it as cursor with the same other parameters to get the
next page. A task that completes later always sorts after the rows
already served, so you can keep a cursor and resume from it. The
cursor is opaque; do not build or edit one.
contract, since, until and chain_id behave exactly as on
/hits. Not cached. Requires scope read:hits.
Errors
| Status | code |
Meaning |
|---|---|---|
| 400 | window_too_large |
The query is invalid (invalid_request) or the window is longer than allowed (window_too_large). |
| 400 | invalid_request |
The query is invalid (invalid_request) or the window is longer than allowed (window_too_large). |
| 401 | invalid_key |
The key is missing, malformed, unknown, expired or revoked, or its partner is disabled. Always invalid_key. |
| 403 | ip_not_allowed |
The calling address is not on the key’s allowlist (ip_not_allowed), or the key lacks the route’s scope (scope_missing). |
| 403 | scope_missing |
The calling address is not on the key’s allowlist (ip_not_allowed), or the key lacks the route’s scope (scope_missing). |
| 429 | rate_limited |
The key’s rate limit, or the API’s overall limit, is exceeded (rate_limited). |
| 503 | tenant_api_disabled |
The API is switched off (tenant_api_disabled), not configured (ip_trust_unconfigured) or temporarily unable to answer (internal). Retry later; Retry-After is sent when a retry is expected to succeed soon. |
| 503 | ip_trust_unconfigured |
The API is switched off (tenant_api_disabled), not configured (ip_trust_unconfigured) or temporarily unable to answer (internal). Retry later; Retry-After is sent when a retry is expected to succeed soon. |
| 503 | internal |
The API is switched off (tenant_api_disabled), not configured (ip_trust_unconfigured) or temporarily unable to answer (internal). Retry later; Retry-After is sent when a retry is expected to succeed soon. |
What to do about each: Errors.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Contract address, 0x-prefixed, any case.
Example
0x000000000000000000000000000000000000deadWindow start (inclusive), RFC 3339, floored to the minute.
Example
2026-10-08T15:00:00ZWindow end (exclusive), RFC 3339, floored to the minute. Defaults to now; a future time is clamped to now. The window may span at most 31 days unless your agreement sets another limit (window_too_large).
Only this chain. Omitted, every chain.
Example
33139Rows per page.
The next_cursor of the previous page. Omitted, the first page.
Responses
Section titled “Responses”One page of hits.
object
The contract, lowercased.
object
The NimbusMint mint task id.
The NimbusMint account id. Today it equals the Discord id.
The user’s Discord id; empty if the account record is missing.
The user’s Discord username as last seen at login; empty if unknown.
The address that minted, lowercase; empty for tasks that did not record one.
The contract, lowercased.
The transaction hash on the task when it completed (the landed hash when one was recorded, otherwise the submitted one). May be empty.
Tokens the task was booked to mint (a hit is the task, whatever its quantity).
When the receipt was confirmed, RFC 3339 with up to millisecond precision (trailing zeros trimmed, so the width varies).
Pass as cursor for the next page; null on the last page.
Examples
A page with more to come
{ "contract": "0x000000000000000000000000000000000000dead", "since": "2026-10-08T15:00:00Z", "until": "2026-10-08T18:42:00Z", "mints": [ { "task_id": "7d1f0c9e-4b8a-4f43-9a51-2f7c0b9d1e22", "user_id": "100000000000000001", "discord_id": "100000000000000001", "discord_username": "alice", "wallet": "0x1111111111111111111111111111111111111111", "chain_id": 33139, "contract": "0x000000000000000000000000000000000000dead", "tx_hash": "0x5c4e0f0a8b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e", "quantity": 2, "completed_at": "2026-10-08T15:00:01.234Z" } ], "next_cursor": "MTc1OTkzNTYwMTIzNC42NmZmMDAwMDAwMDAwMDAwMDAwMDAwMDE", "generated_at": "2026-10-08T18:42:07Z"}The query is invalid (invalid_request) or the window is longer than allowed (window_too_large).
object
Examples
{ "code": "window_too_large", "message": "the window may span at most 31 days"}The key is missing, malformed, unknown, expired or revoked, or its partner is disabled. Always invalid_key.
object
Examples
{ "code": "invalid_key", "message": "missing, invalid, expired or revoked key"}The calling address is not on the key’s allowlist (ip_not_allowed), or the key lacks the route’s scope (scope_missing).
object
Examples
{ "code": "ip_not_allowed", "message": "this address may not use this key"}The key’s rate limit, or the API’s overall limit, is exceeded (rate_limited).
object
Examples
{ "code": "rate_limited", "message": "rate limit exceeded"}Headers
Section titled “Headers”Seconds to wait before retrying.
The API is switched off (tenant_api_disabled), not configured (ip_trust_unconfigured) or temporarily unable to answer (internal). Retry later; Retry-After is sent when a retry is expected to succeed soon.
object
Examples
{ "code": "tenant_api_disabled", "message": "the partner API is disabled"}Headers
Section titled “Headers”Seconds to wait before retrying.
