Skip to content

Every successful mint on a contract by NimbusMint users from your app, one row each

View as Markdown
GET
/mints
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"

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.

contract
required
string
/^0x[0-9a-fA-F]{40}$/

Contract address, 0x-prefixed, any case.

Example

0x000000000000000000000000000000000000dead
since
required
string format: date-time

Window start (inclusive), RFC 3339, floored to the minute.

Example

2026-10-08T15:00:00Z
until
string format: date-time

Window 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).

chain_id
integer
>= 1

Only this chain. Omitted, every chain.

Example

33139
limit
integer
default: 100 >= 1 <= 500

Rows per page.

cursor
string

The next_cursor of the previous page. Omitted, the first page.

One page of hits.

Media typeapplication/json
object
contract
required

The contract, lowercased.

string
since
required
string format: date-time
until
required
string format: date-time
mints
required
Array<object>
object
task_id
required

The NimbusMint mint task id.

string
user_id
required

The NimbusMint account id. Today it equals the Discord id.

string
discord_id
required

The user’s Discord id; empty if the account record is missing.

string
discord_username
required

The user’s Discord username as last seen at login; empty if unknown.

string
wallet
required

The address that minted, lowercase; empty for tasks that did not record one.

string
chain_id
required
integer
contract
required

The contract, lowercased.

string
tx_hash
required

The transaction hash on the task when it completed (the landed hash when one was recorded, otherwise the submitted one). May be empty.

string
quantity
required

Tokens the task was booked to mint (a hit is the task, whatever its quantity).

integer
completed_at
required

When the receipt was confirmed, RFC 3339 with up to millisecond precision (trailing zeros trimmed, so the width varies).

string format: date-time
next_cursor
required

Pass as cursor for the next page; null on the last page.

string | null
generated_at
required
string format: date-time

Examples

Examplemints

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).

Media typeapplication/json
object
code
required
string
Allowed values: invalid_key ip_not_allowed scope_missing rate_limited ip_trust_unconfigured tenant_api_disabled invalid_request window_too_large not_found internal
message
required
string

Examples

Examplewindow
{
"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.

Media typeapplication/json
object
code
required
string
Allowed values: invalid_key ip_not_allowed scope_missing rate_limited ip_trust_unconfigured tenant_api_disabled invalid_request window_too_large not_found internal
message
required
string

Examples

Exampleinvalid
{
"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).

Media typeapplication/json
object
code
required
string
Allowed values: invalid_key ip_not_allowed scope_missing rate_limited ip_trust_unconfigured tenant_api_disabled invalid_request window_too_large not_found internal
message
required
string

Examples

Exampleip
{
"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).

Media typeapplication/json
object
code
required
string
Allowed values: invalid_key ip_not_allowed scope_missing rate_limited ip_trust_unconfigured tenant_api_disabled invalid_request window_too_large not_found internal
message
required
string

Examples

Examplelimited
{
"code": "rate_limited",
"message": "rate limit exceeded"
}
Retry-After
integer
>= 1

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.

Media typeapplication/json
object
code
required
string
Allowed values: invalid_key ip_not_allowed scope_missing rate_limited ip_trust_unconfigured tenant_api_disabled invalid_request window_too_large not_found internal
message
required
string

Examples

Exampledisabled
{
"code": "tenant_api_disabled",
"message": "the partner API is disabled"
}
Retry-After
integer
>= 1

Seconds to wait before retrying.