I-skip tungo sa nilalaman

Brand Partner API

Isang maliit at predictable na REST API para gumawa ng mintbot orders, mag-poll ng status nila, at tumanggap ng lifecycle events. JSON in, JSON out. Bearer-token auth. Idempotent writes. Signed webhooks.

API access dashboard Tumalon sa webhooks


Mabilisang overview

Base URL https://mint.mintbot.ai/api/v1
Auth `Authorization: Bearer ***
Idempotency Idempotency-Key: <uuid> sa bawat POST maliban sa POST /dns/records
Content type application/json
Rate limit 120 req / 60 s bawat partner
Webhooks Signed gamit ang HMAC-SHA256, nire-retry hanggang 7 beses

Authentication

Bawat request ay nagpapadala ng partner API key sa Authorization header. I-generate o i-rotate ang key sa dashboard.

Authorization: Bearer mo_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json

Walang grace window ang rotation

Kapag ni-rotate ang key, atomically nare-revoke ang nauna. Planuhin na palitan ang value sa iyong config bago i-click ang Rotate.

Idempotency

Bawat POST ay nangangailangan ng Idempotency-Key header — maliban sa POST /dns/records, na natural na idempotent sa provider layer at tumatanggap ng retries kahit wala nito. Gumagana ang anumang UUID para sa bawat distinct request.

  • Kina-cache namin ang response sa loob ng 24 oras. Ang retry gamit ang parehong key ay ire-replay ang orihinal na response na may Idempotent-Replay: true.
  • Ang paggamit ulit ng parehong key na may ibang body ay magbabalik ng 409 idempotency_key_mismatch.

Orders

Gumawa ng order

POST /orders

Gumagawa ng order at nagbabalik ng Stripe Checkout URL. Kapag na-confirm ang payment, ipo-provision ng mintbot ang agent at awtomatikong ire-record ang partner-cut revenue event.

Request

{
  "tier": "s1",
  "duration_months": 1,
  "credit_usd": 10,
  "language": "en",
  "external_id": "your-side-id",
  "success_url": "https://your.app/thanks?id={ORDER_ID}",
  "cancel_url":  "https://your.app/cart",
  "webhook_url": "https://your.app/mintbot-webhook"
}
tier
Isa sa trial, s1, s2, s4.
duration_months
Calendar months ng server lifetime. Dapat isa sa 1, 3, o 12.
credit_usd
Optional. Pre-funded chat credit na naka-bundle sa order.
language
Optional. Nakakaapekto sa Stripe Checkout locale at welcome-email language.
external_id
Optional. Ibabalik sa bawat webhook at order response — gamitin ito para i-thread ang mintbot orders sa rows sa sarili mong system.
success_url · cancel_url
Stripe Checkout return URLs. Ang {ORDER_ID} ay pinapalitan server-side.
webhook_url
Optional. Per-order override ng partner-level webhook URL.

Response — 201 Created

{
  "id": 42,
  "tier": "s1",
  "duration_months": 1,
  "credit_usd": 10,
  "amount_cents": 1200,
  "currency": "usd",
  "status": "awaiting_payment",
  "checkout_url": "https://checkout.stripe.com/c/pay/cs_test_…",
  "panel_url": null,
  "expires_at": null,
  "language": "en",
  "external_id": "your-side-id",
  "created_at": "2026-05-16 09:58:00",
  "paid_at": null
}

Halimbawa

curl -X POST https://mint.mintbot.ai/api/v1/orders \
  -H "Authorization: Bearer $MINTBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "tier": "s1",
    "duration_months": 1,
    "credit_usd": 10,
    "success_url": "https://your.app/thanks?id={ORDER_ID}",
    "cancel_url":  "https://your.app/cart"
  }'
import os, uuid, requests

r = requests.post(
    "https://mint.mintbot.ai/api/v1/orders",
    headers={
        "Authorization": f"Bearer {os.environ['MINTBOT_API_KEY']}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "tier": "s1",
        "duration_months": 1,
        "credit_usd": 10,
        "success_url": "https://your.app/thanks?id={ORDER_ID}",
        "cancel_url":  "https://your.app/cart",
    },
    timeout=10,
)
r.raise_for_status()
order = r.json()
redirect_to = order["checkout_url"]

Kunin ang order

GET /orders/{id}

Kinukuha ang isang order gamit ang mintbot id nito. Nagbabalik ng parehong shape gaya ng POST /orders.

curl https://mint.mintbot.ai/api/v1/orders/42 \
  -H "Authorization: Bearer $MINTBOT_API_KEY"

I-list ang orders

GET /orders

Cursor-paginated list, pinakabago muna.

Query parameters

status
Optional. I-filter ayon sa awaiting_payment, completed, deployed, deploy_failed, o expired.
cursor
Optional. Ipasa ang next_cursor mula sa nakaraang page para magpatuloy.

Response

{
  "items": [ /* OrderResponse … */ ],
  "next_cursor": "37"
}

Ang next_cursor ay null kapag wala nang mga page.


I-renew ang order

POST /orders/{id}/renew

Pinapahaba ang existing agent para sa panibagong duration_months. Infra-only — walang bagong chat credit na naka-bundle. Nagbabalik ng bagong order id at fresh na Stripe Checkout URL.

Request

{
  "duration_months": 1,
  "external_id": "your-side-id",
  "success_url": "https://your.app/thanks?id={ORDER_ID}",
  "cancel_url":  "https://your.app/account"
}

Revenue

Basahin ang revenue

GET /revenue

Totals plus ang pinakabagong 200 ledger events.

Query parameters

include_paid
Optional, default true. I-set sa false para makita lang ang events na hindi pa paid out.

Response

{
  "currency": "usd",
  "gross_cents": 12000,
  "partner_cut_cents": 2000,
  "mintbot_cut_cents": 10000,
  "unpaid_cents": 800,
  "events": [
    {
      "id": 7,
      "order_id": 42,
      "kind": "order_paid",
      "gross_cents": 1200,
      "partner_cut_cents": 200,
      "mintbot_cut_cents": 1000,
      "currency": "usd",
      "created_at": "2026-05-16 09:58:00",
      "payout_id": null,
      "payout_at": null
    }
  ]
}

Partner profile

Kunin ang profile

GET /partner

Ibabalik ang iyong partner profile kasama ang unpaid balance — useful para ipakita ang earnings sa loob ng sarili mong admin UI nang hindi mo kailangang i-store ang mga ito mismo.

Response

{
  "id": 12,
  "email": "you@kliendifirma.com",
  "pricing_currency": "usd",
  "balance_unpaid_cents": 800,
  "webhook_url": "https://your.app/mintbot-webhook",
  "api_key_prefix": "mo_live_a12b"
}

Settings

Get settings

GET /settings

Nagbabalik ng buo mong non-secret partner configuration sa isang payload — napiling modes, apex domain, DNS provider, bot provider, template repo, subdomain pattern (may rendered preview label), per-tier pricing, API key metadata, webhook metadata, at ang parehong readiness / per-section status na nagpapatakbo sa MintOffice dashboard banner.

Dinisenyo para sa integration agents na kailangang malaman kung paano naka-set up ang partner nang hindi nag-scrape ng dashboard o nagtatanong sa operator. Ang typical caller ay coding agent na nag-i-install ng white-label setup mo sa fresh server — mababasa nito ang endpoint na ito, mag-branch sa readiness.status, at masasabi sa operator kung aling sections pa ang nangangailangan ng attention.

Walang secret na ibinabalik kailanman

Anumang ibinigay ng partner bilang credential — Telegram bot token, Zone.ee API key, webhook signing secret, mismong plaintext ng API key — lumalabas lamang bilang *_set boolean. Dagdag pa rito, ine-expose ng webhook secret ang parehong 8-char display prefix na ipinapakita na sa dashboard, kaya mako-confirm ng caller aling secret ang naka-configure nang hindi kailanman nakikita ang value.

Response

{
  "id": 12,
  "email": "you@kliendifirma.com",
  "status": "live",
  "created_at": "2026-05-12 14:22:01",
  "onboarded_at": "2026-05-12 14:48:33",
  "activated_at": "2026-05-13 09:10:05",
  "last_login_at": "2026-05-20 00:51:18",
  "preferred_language": "en",
  "pricing_currency": "usd",
  "balance_unpaid_cents": 800,

  "domain": {
    "mode": "byo",
    "client_apex_domain": "agent99.cc",
    "dns_provider": "zone.ee",
    "zone_ee_username": "you@kliendifirma.com",
    "zone_ee_api_key_set": true,
    "subdomain_prefix": "agent",
    "subdomain_numbering": "natural",
    "subdomain_pad_width": 3,
    "subdomain_label_preview": "agent1"
  },

  "bot": {
    "mode": "own",
    "provider": "telegram",
    "telegram_bot_username": "agent99cc_bot",
    "telegram_bot_token_set": true
  },

  "template": {
    "mode": "default",
    "repo_url": null
  },

  "api": {
    "key_prefix": "mo_live_a12b",
    "key_created_at": "2026-05-13 09:11:42",
    "webhook_url": "https://your.app/mintbot-webhook",
    "webhook_secret_set": true,
    "webhook_secret_prefix": "ab12cd34"
  },

  "pricing": {
    "mode": "default",
    "currency": "usd",
    "tiers": {
      "trial": { "price_cents": 0,    "partner_cut_cents": 0,   "updated_at": null },
      "s1":    { "price_cents": 1200, "partner_cut_cents": 200, "updated_at": "2026-05-13 09:05:00" },
      "s2":    { "price_cents": 2400, "partner_cut_cents": 400, "updated_at": "2026-05-13 09:05:00" },
      "s4":    { "price_cents": 4800, "partner_cut_cents": 800, "updated_at": "2026-05-13 09:05:00" }
    }
  },

  "readiness": {
    "ready": true,
    "missing_fields": [],
    "dns_blocker": null,
    "status": "live"
  },

  "section_status": {
    "domain":   { "status": "ready", "mode": "byo",     "issue": null, "dns_blocker": null },
    "bot":      { "status": "ready", "mode": "own",     "issue": null, "dns_blocker": null },
    "template": { "status": "ready", "mode": "default", "issue": null, "dns_blocker": null },
    "api":      { "status": "ready", "mode": "live",    "issue": null, "dns_blocker": null },
    "all_ready": true
  }
}

Field reference

status
Lifecycle ng partner. Isa sa onboarding, live, paused. Nire-reject ng Brand Partner API ang writes habang onboarding.
domain.mode
byo (dala mo ang sarili mong apex domain) o hosted (nagpo-provide ang mintbot ng *.mintbot.ai subdomain). Kapag hosted, sadyang walang laman ang DNS-provider fields kahit ano pa ang dating inilagay ng partner.
domain.subdomain_label_preview
Ang rendered label na matatanggap ng unang customer agent (agent1, 1, 001, …) base sa kasalukuyang subdomain_prefix, subdomain_numbering, at subdomain_pad_width. Gamitin ito para sa preview na "ito ang makikita ng customers mo" nang hindi kailangang i-reimplement ang numbering rules.
bot.mode
own (Telegram bot na provided ng partner), borrow (gamit ang bot ng mintbot habang testing), o web (panel lang, walang Telegram).
template.mode
default (reference template ng mintbot mula sa mintbot-ai/agent-template) o custom (forked repo ng partner sa repo_url). Kinokontrol ng default template ang SOUL.md (persona), config.yaml (Hermes settings), at panel theme ng agent — i-fork ito at ituro ang repo_url sa fork mo kapag gusto mo ng custom branding.
api.webhook_secret_prefix
Unang 8 character ng webhook signing secret, naroroon lang kapag may naka-configure na secret. Hinahayaan nitong matukoy ng caller kung aling secret ang ginagamit nang hindi nakikita ang buong value. Ipinapakita rin ng dashboard ang parehong prefix.
readiness.missing_fields
Listahan ng dashboard field names na kailangan pa bago mag-Go Live. Walang laman kapag ready ay true. Sapat ang stability nito para mag-drive ng "ano pa ang kulang" UI sa sarili mong admin.
readiness.dns_blocker
Naka-set sa maikling reason string kapag pumalya ang DNS verification (hal. nameservers_not_pointing, glue_record_missing). Kung hindi, null.
section_status.*.issue
Per-section human-readable hint kapag bina-block ng section na iyon ang Go Live. Katulad ito ng per-section status pills sa dashboard.

Halimbawa

curl https://mint.mintbot.ai/api/v1/settings \
  -H "Authorization: Bearer ***
import os, requests

r = requests.get(
    "https://mint.mintbot.ai/api/v1/settings",
    headers={"Authorization": f"Bearer {os.environ['MINTBOT_API_KEY']}"},
    timeout=10,
)
r.raise_for_status()
settings = r.json()

if not settings["readiness"]["ready"]:
    print("Still missing:", settings["readiness"]["missing_fields"])

DNS records

Madalas kailangan ng brand-partner integrations na mag-provision ng DNS records sa apex domain ng partner — itinuturo ang @, www, o per-customer subdomains sa tamang server. Nag-e-expose ang MintOffice ng vendor-blind proxy para magawa mo ito nang hindi kailanman hinahawakan ang API key ng upstream provider sa sarili mong infrastructure. Ang credentials na sinave mo noong onboarding (ngayon: zone.ee; naka-roadmap ang cloudflare at route53 sa likod ng parehong shape) ay nananatiling encrypted sa MintOffice; pumapasok ang call mo gamit ang Bearer mo_live_… at kami ang gumagawa ng upstream call para sa iyo.

Ang scope ay sariling configured apex ng partner (domain.client_apex_domain mula sa GET /settings). Hindi mo maaaring galawin ang record sa zone na hindi mo pagmamay-ari.

Sa ngayon, sinusuportahan ng proxy ang operations na ginagamit mismo ng deploy pipeline — A-records (upsert / list / delete by id). Susunod sa parehong shape ang CNAME / TXT / MX support kapag pinalawak na ng underlying provider abstraction ang mga iyon.

Hindi kailangan ang Idempotency-Key dito

Hindi tulad ng order-creation endpoints, natural na idempotent ang DNS upserts sa provider layer (ang muling pag-run gamit ang parehong (subdomain, ip) ay no-op at nililinis ang stale duplicates sa bawat call). Hindi mo kailangang ipadala ang Idempotency-Key header — palaging nagko-converge ang retries sa iisang A-record per FQDN.

Mag-upsert ng A-record

POST /dns/records

Idempotently ituro ang <subdomain>.<your-apex> sa isang IPv4 address. Ipasa ang "" (o "@") para sa mismong apex.

Request

{
  "subdomain": "www",
  "ip": "203.0.113.10"
}

Tinatanggap ng subdomain ang:

  • "" o "@" — ang mismong apex (example.com).
  • Isang DNS label — "www", "api" — para sa <label>.<apex>.
  • Dotted sub-labels — "api.eu" — para sa nested subdomains (api.eu.example.com).

Ang ip ay dapat dotted IPv4 address. Bawat label ay [a-z0-9_-], 1–63 chars, walang leading/trailing -.

Response — 200

{
  "apex": "example.com",
  "provider": "zone_ee",
  "fqdn": "www.example.com",
  "records": [
    { "id": "9182734", "name": "www.example.com", "destination": "203.0.113.10" }
  ]
}

Palaging ipinapakita ng post-write records list ang kasalukuyang view ng upstream provider sa FQDN pagkatapos ng duplicate sweep — kaya ang successful response na may eksaktong isang record ang happy-path signal na wala nang stale na natitira.

I-list ang records

GET /dns/records

Ibinabalik ang bawat A-record sa configured apex. Idagdag ang ?name=<label-or-fqdn> para mag-filter sa isang FQDN — maaaring bare label ("www"), dotted subdomain ("api.eu"), o full FQDN ("www.example.com") ang value.

Response — 200

{
  "apex": "example.com",
  "provider": "zone_ee",
  "items": [
    { "id": "9182734", "name": "example.com",     "destination": "203.0.113.10" },
    { "id": "9182735", "name": "www.example.com", "destination": "203.0.113.10" }
  ]
}

Mag-delete ng record

DELETE /dns/records/{record_id}

Ang record_id ay vendor identifier na ibinalik ng GET /dns/records (nag-i-issue ang zone.ee ng integer ids, na sini-stringify sa API boundary). Ang pag-delete ng record na wala na ay itinuturing na success — idempotent ang endpoint sa client side.

Response — 200

{ "deleted": true, "id": "9182734" }

Errors

HTTP error.code Sanhi
401 unauthenticated / invalid_api_key Kulang / mali ang Bearer token.
422 validation_error Mali ang subdomain o non-IPv4 destination.
422 dns_not_configured Walang client_apex_domain ang partner o nawawala ang credentials ng configured provider. Ayusin sa Settings → Domain.
422 dns_provider_unsupported Hindi pa naka-wire ang DNS provider ng partner sa MintOffice proxy (hal. cloudflare placeholder). Lumipat muna sa zone_ee.
502 dns_provider_error Nagbalik ang upstream provider ng 4xx/5xx, o pumalya ang transport. Dala ng error message ang upstream status at maikling secret-redacted excerpt ng upstream body. Safe na mag-retry.

Halimbawa

# Point apex + www at your server's IP.
curl https://mint.mintbot.ai/api/v1/dns/records \
  -H "Authorization: Bearer *** \
  -H "Content-Type: application/json" \
  -d '{"subdomain": "",    "ip": "203.0.113.10"}'

curl https://mint.mintbot.ai/api/v1/dns/records \
  -H "Authorization: Bearer *** \
  -H "Content-Type: application/json" \
  -d '{"subdomain": "www", "ip": "203.0.113.10"}'

# Verify.
curl "https://mint.mintbot.ai/api/v1/dns/records" \
  -H "Authorization: Bearer ***
import os, requests

URL = "https://mint.mintbot.ai/api/v1/dns/records"
H = {"Authorization": f"Bearer {os.environ['MINTBOT_API_KEY']}"}

for sub in ("", "www"):
    r = requests.post(URL, headers=H, json={"subdomain": sub, "ip": "203.0.113.10"})
    r.raise_for_status()
    print(sub or "@", r.json()["records"])

Webhooks

Kapag may nangyari sa isang order, nag-POST kami ng signed JSON event sa configured webhook URL mo.

Optional ang Webhooks

Ang Webhook URL at Webhook signing secret sa Settings → API access ay ganap na optional — iwanang blank ang mga ito habang onboarding kung wala ka pang receiver. Gumagana nang maayos ang dashboard at ang natitirang API kahit walang webhooks; puwede mong i-poll ang GET /api/v1/orders/{id} para i-track ang lifecycle sa halip. Idagdag ang URL (at i-generate ang secret) kapag ready ka na, walang kailangang re-activation.

Event types

Event Kailan ito nagti-trigger
order.created Nagawa ang Stripe Checkout session, naghihintay ng payment.
order.paid Kinumpirma ng Stripe ang payment. Na-record ang revenue event.
order.cancelled Nag-time out ang order o tahasang kinansela.
agent.provisioning_started Nagsimula ang deploy pipeline para sa order na ito.
agent.ready Successful ang deploy. May panel_url at expires_at ang payload.
agent.failed Nag-error ang deploy pipeline. Tingnan ang error field para sa step na nasira.
agent.expired Lumipas na ang Agent TTL. Maaaring mag-renew ang partner gamit ang POST /orders/{id}/renew.

Delivery & retries

  • Hanggang 7 attempts sa exponential schedule: 0s, 30s, 2m, 10m, 1h, 6h, 24h.
  • Pagkatapos ng huling attempt, mamamarkahan ang delivery bilang exhausted at hihinto sa retrying.
  • Mag-respond ng 2xx status sa loob ng 10 seconds para i-acknowledge.

Request headers

Content-Type: application/json
User-Agent: mintbot-webhook/1.0
X-Mintbot-Signature: t=<unix_ts>,v1=<hex_hmac_sha256>
X-Mintbot-Event-Id: evt_42_order.paid_1747371234567
X-Mintbot-Event-Type: order.paid

Sample payload — order.paid

{
  "id": 42,
  "tier": "s1",
  "duration_months": 1,
  "credit_usd": 10,
  "amount_cents": 1200,
  "currency": "usd",
  "status": "completed",
  "external_id": "your-side-id",
  "paid_at": "2026-05-16 10:02:14"
}

Verifying the signature

Ang signature ay HMAC-SHA256(secret, "{timestamp}.{raw_body}"). Palaging i-verify ang raw request body — masisira ang comparison kapag ni-re-serialise mo ang parsed JSON.

import hmac, hashlib, time

def verify(secret: str, body: bytes, header: str, tolerance: int = 300) -> bool:
    try:
        ts_part, v1_part = header.split(",", 1)
        ts  = int(ts_part.split("=", 1)[1])
        sig = v1_part.split("=", 1)[1]
    except Exception:
        return False
    if abs(int(time.time()) - ts) > tolerance:
        return False
    expected = hmac.new(
        secret.encode(),
        f"{ts}.".encode() + body,
        hashlib.sha256,
    ).hexdigest()
    return hmac.compare_digest(expected, sig)
const crypto = require("crypto");

function verify(secret, rawBody, header, toleranceSec = 300) {
  const [tsPart, v1Part] = header.split(",");
  const ts  = Number(tsPart.split("=")[1]);
  const sig = v1Part.split("=")[1];
  if (Math.abs(Date.now() / 1000 - ts) > toleranceSec) return false;
  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${ts}.`)
    .update(rawBody)
    .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(expected, "hex"),
    Buffer.from(sig, "hex"),
  );
}

Idempotent receivers

Gamitin ang X-Mintbot-Event-Id bilang dedup key mo — ginagamit muli ng retries ang parehong id, kaya pinapanatiling safe ng row-level INSERT … ON CONFLICT DO NOTHING sa column na iyon ang handler mo.

Reference portal

May runnable end-to-end reference sa mintbot-ai/partner-portal-example — FastAPI + SQLite, Dockerised, may kasamang example brand na tinatawag na ExampleAI. May live brand fork sa mintbot-ai/partner-portal-agent99 (ang actual storefront na tumatakbo sa agent99.cc). Ang architectural picture — kung paano magkakasya ang storefront, itong API, deploy worker, at agent template — ay nasa MintOffice — Technical. Ini-implement ng portal ang:

  • landing / plan-picker / thank-you / cancel pages,
  • POST /buyPOST /api/v1/orders → Stripe redirect,
  • POST /webhooks/mintoffice kasama ang HMAC verifier na nire-reference sa itaas,
  • isang HTTP-Basic-auth /admin event browser para makita mo ang deliveries.

I-fork ito, i-set ang PARTNER_BRAND, MINTOFFICE_API_KEY, at MINTOFFICE_WEBHOOK_SECRET sa .env, patakbuhin ang docker compose up, at ituro ang webhook URL ng partner row mo sa https://<your-host>/webhooks/mintoffice. Tingnan ang MintOffice → Reference portal para sa buong walkthrough.


Errors

Bawat error response ay may stable na code na puwede mong i-branch programmatically. Ang message field ay human-readable hint at maaaring magbago sa pagitan ng releases. Ine-echo ng request_id ang X-Request-Id response header — isama ito sa support tickets.

{
  "error": {
    "code": "invalid_api_key",
    "message": "API key is unknown or revoked.",
    "request_id": "f0c2d6c4-…"
  }
}
Code Kahulugan
unauthenticated Kulang o malformed ang Authorization header.
invalid_api_key Hindi kilala ang API key o na-rotate out na.
rate_limited Lumampas sa per-partner o per-IP rate limit — tingnan ang Retry-After.
missing_idempotency_key POST request na walang Idempotency-Key.
idempotency_key_mismatch Ginamit muli ang parehong key na may ibang request body.
validation_error Pumalya ang request body sa schema validation.
not_found Wala ang resource o hindi ito kabilang sa partner mo.
payment_gateway_error Ni-reject ng Stripe ang Checkout session creation.
dns_not_configured POST /dns/records laban sa partner na walang apex / walang DNS credentials. Ayusin sa Settings → Domain.
dns_provider_unsupported Hindi pa naka-wire ang dns_provider value ng partner sa MintOffice proxy.
dns_provider_error Nagbalik ng error ang upstream DNS provider — may redacted excerpt ang message.
quota_exceeded Naubos na ng partner ang lahat ng deploy slot (default ay 10). Makipag-contact sa mintbot support para itaas ang cap. Ibinabalik ng POST /orders at POST /orders/{id}/renew. Dala ng body ang deploys_used + deploy_quota.

Rate limits

  • 120 requests / 60 s rolling window, per partner. Magkapareho ang bucket ng burst at steady-state.
  • 60 requests / 60 s hiwalay na per-IP bucket para sa unauthenticated at failed-auth requests — pinipigilan nitong ubusin ng bearer brute-force ang partner quota.
  • Nagbabalik ang excess requests ng 429 rate_limited kasama ang Retry-After header (seconds bago mag-back off).

Need help?

Isinulat ang docs na ito para sa partners na aktwal na gumagamit ng API. Kung may kulang, nakakalito, o stale, banggitin ito sa mintbot agent mo — ipapasa nila ang feedback at ia-update namin ang page.