Partner API eindpunten
Vul Partner API voorbeelden van verzoeken en antwoorden in voor sleutels, groepen, verzoeken en transacties.
Partner API eindpunten
Basis-URL:
https://p-api.model-gate.com
Alle verzoeken vereisen:
Authorization: Bearer mg_partner_...
Accept: application/json
Alle monetaire waarden en grenswaarden zijn JSON-decimale tekenreeksen. Parseer ze niet als binaire getallen met drijvende komma.
Gemeenschappelijke regels voor bankintegratie
Alle externe tijdstempels zijn UTC RFC3339. Gebruik van verzamelingseindpunten limit (1–100) plus een ondoorzichtige kleur cursor; parseer of vervaardig nooit de cursorinhoud. POST, PATCH, En DELETE verzoeken vereisen Idempotency-Key; Probeer dezelfde bewerking opnieuw met dezelfde sleutel na een time-out. Idempotentiegegevens worden 7 dagen bewaard. Reacties omvatten X-Request-ID, Zijn Cache-Control: no-store, en alle fouten zijn JSON. Reacties op snelheidslimieten zijn HTTP 429 met Retry-After En X-RateLimit-* kopteksten. Onbekende hoofdtekst-/queryvelden worden afgewezen.
Het machinaal leesbare OpenAPI 3.1-contract wordt gedistribueerd als resources/contracts/partner-api.openapi.yaml.
Maak een API-sleutel
Verzoek
curl -X POST https://p-api.model-gate.com/api/v1/partner/keys \
-H "Authorization: Bearer mg_partner_..." \
-H "Idempotency-Key: operation-unique-001" \
-H "Content-Type: application/json" \
-d '{
"name": "Telegram user 123",
"group_id": "GROUP_PUBLIC_ID",
"rpm_limit": 30,
"concurrency_limit": 2,
"spend_limit": "20.0000000000",
"usage_price_basis": "official_price",
"usage_price_multiplier": "0.900000"
}'
Reactie — 201
{
"data": {
"public_id": "KEY_PUBLIC_ID",
"group_id": "GROUP_PUBLIC_ID",
"name": "Telegram user 123",
"key_prefix": "mg_live_ab12",
"key": "mg_live_ab12...",
"status": "active",
"rpm_limit": 30,
"concurrency_limit": 2,
"spend_limit": "20.0000000000",
"usage": "0.0000000000",
"total_spent": "0.0000000000",
"usage_price_basis": "official_price",
"usage_price_multiplier": "0.900000",
"effective_usage_price_basis": "official_price",
"effective_usage_price_multiplier": "0.900000"
}
}
De volledige key waarde wordt alleen geretourneerd na creatie of rotatie.
Lijst met API-sleutels
Verzoek
curl https://p-api.model-gate.com/api/v1/partner/keys \
-H "Authorization: Bearer mg_partner_..."
Reactie — 200
{
"data": [
{
"public_id": "KEY_PUBLIC_ID",
"group_id": "GROUP_PUBLIC_ID",
"name": "Telegram user 123",
"status": "active",
"spend_limit": "20.0000000000",
"usage": "3.2500000000",
"total_spent": "1.1400000000"
}
]
}
De lijst is als nieuwste eerst geordend en maakt gebruik van ondoorzichtige cursorpaginering. Doorgang limit=1..100; wanneer meta.has_more is waar, stuur meta.next_cursor als de volgende cursor.
Ontvang één API-sleutel
Verzoek
curl https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID \
-H "Authorization: Bearer mg_partner_..."
Reactie — 200
{
"data": {
"public_id": "KEY_PUBLIC_ID",
"group_id": "GROUP_PUBLIC_ID",
"name": "Telegram user 123",
"status": "active",
"rpm_limit": 30,
"concurrency_limit": 2,
"spend_limit": "20.0000000000",
"usage": "3.2500000000",
"total_spent": "1.1400000000",
"effective_usage_price_basis": "official_price",
"effective_usage_price_multiplier": "0.900000"
}
}
Update een API-sleutel
PATCH vervangt alleen de ondersteunde veranderlijke waarden. Als u de sleutel uit een groep wilt verwijderen, stuurt u een leeg bericht group_id. Verzend om de waarderingsinstellingen over te nemen null voor de sleutelniveaubasis en multiplier.
Verzoek
curl -X PATCH https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID \
-H "Authorization: Bearer mg_partner_..." \
-H "Idempotency-Key: operation-unique-001" \
-H "Content-Type: application/json" \
-d '{
"name": "Updated user name",
"group_id": "GROUP_PUBLIC_ID",
"rpm_limit": 60,
"concurrency_limit": 4,
"spend_limit": "40.0000000000",
"usage_price_basis": null,
"usage_price_multiplier": null
}'
Reactie — 200
{
"data": {
"public_id": "KEY_PUBLIC_ID",
"spend_limit": "40.0000000000",
"usage": "3.2500000000",
"effective_usage_price_basis": "user_price",
"effective_usage_price_multiplier": "1.000000"
}
}
Verwijder een API-sleutel
Verzoek
curl -X DELETE https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID \
-H "Authorization: Bearer mg_partner_..." \
-H "Idempotency-Key: operation-unique-001" \
Reactie — 200
{"data":{"deleted":true}}
Een sleutel bevriezen en deblokkeren
Verzoek om bevriezing
curl -X POST https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID/freeze \
-H "Authorization: Bearer mg_partner_..." \
-H "Idempotency-Key: operation-unique-001" \
Bevroren reactie
{"data":{"public_id":"KEY_PUBLIC_ID","status":"frozen"}}
Aanvraag deblokkeren
curl -X POST https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID/unfreeze \
-H "Authorization: Bearer mg_partner_..." \
-H "Idempotency-Key: operation-unique-001" \
Reactie opheffen
{"data":{"public_id":"KEY_PUBLIC_ID","status":"active"}}
Voor het opheffen van de bevriezing is een geverifieerd e-mailadres van de eigenaar vereist.
Draai een sleutel
Verzoek
curl -X POST https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID/rotate \
-H "Authorization: Bearer mg_partner_..." \
-H "Idempotency-Key: operation-unique-001" \
Reactie — 200
{
"data": {
"public_id": "KEY_PUBLIC_ID",
"status": "active",
"key_prefix": "mg_live_cd34",
"key": "mg_live_cd34..."
}
}
Sleutelgebruik opnieuw instellen
Verzoek
curl -X POST https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID/reset-usage \
-H "Authorization: Bearer mg_partner_..." \
-H "Idempotency-Key: operation-unique-001" \
Reactie — 200
{
"data": {
"public_id": "KEY_PUBLIC_ID",
"usage": "0.0000000000",
"total_spent": "1.1400000000"
}
}
Het opnieuw instellen van het gebruik heeft geen invloed op de levenslange uitgaven of het rekeningsaldo.
Ontvang sleutelgebruik
Verzoek
curl https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID/usage \
-H "Authorization: Bearer mg_partner_..."
Reactie — 200
{
"data": {
"key_id": "KEY_PUBLIC_ID",
"usage": "3.2500000000",
"total_spent": "1.1400000000"
}
}
Ontvang de bestedingslimiet en het resterende gebruik
Verzoek
curl https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID/spent-limit \
-H "Authorization: Bearer mg_partner_..."
Reactie — 200
{
"data": {
"key_id": "KEY_PUBLIC_ID",
"spend_limit": "20.0000000000",
"usage": "3.2500000000",
"remaining": "16.7500000000"
}
}
Wanneer spend_limit is nul, het is onbeperkt en remaining is null.
Ontvang de laatste aanvragen voor een sleutel
Gedetailleerde verzoekgeschiedenis is een dataset voor het bewaren van gegevens die wordt beheerd door API_REQUESTS_HOT_RETENTION_DAYS (standaard 7 dagen). De metagegevens van het antwoord rapporteren de actieve bewaarperiode. Gebruik saldotransacties voor financiële afstemming op de langere termijn.
limit is optioneel, is standaard ingesteld op 10 en moet een geheel getal zijn van 1 tot 100. Afgeronde verzoeken worden gerangschikt op finished_at nieuwste eerst. Wanneer meta.has_more is true, doorgang meta.next_cursor als het ondoorzichtige before queryparameter om de volgende oudere pagina op te halen. Parseer of construeer zelf geen cursors.
Het antwoord bevat onveranderlijke gebruikers- en officiële tarieven per miljoen token voor verzoeken die na de migratie zijn voltooid 059_request_pricing_audit_snapshot.sql. Er wordt ook gerekend pricing_snapshot.usage_price van de opgeslagen basis-, vermenigvuldigings- en historische koersen zonder een andere koersset op te slaan. Dit maakt de onafhankelijke waardering van de gebruikslimiet controleerbaar nadat de catalogusprijzen zijn gewijzigd. Historische verzoeken die vóór migratie 059 zijn gemaakt, keren terug pricing_snapshot.available: false in plaats van de huidige prijzen te vervangen. Verzoeken die worden uitgevoerd via Claude/OpenAI-compatibele batch-API's worden expliciet gemarkeerd met request_mode: "batch" en vermeld hun protocol, batchtaak-ID, custom_iden de momentopname van de Model Gate-batchprijsvermenigvuldiger.
Latency gebruikt stabiele bedrijfs-/partnernamen: gateway_overhead_ms, upstream_first_token_ms, En e2e_first_token_ms. De E2E-waarde voor het eerste token wordt gemeten vanaf het begin van het Model Gate-verzoek tot het eerste echte inhoudstoken en sluit de netwerk-/TLS-tijd aan de clientzijde uit. De Partner API geeft alleen het expliciete weer e2e_first_token_ms naam; de interne opslagkolom blijft api_requests.first_token_ms.
Verzoek
curl "https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID/requests?limit=10" \
-H "Authorization: Bearer mg_partner_..."
Reactie — 200
{
"data": [
{
"request_id": "01KZ...",
"key_id": "KEY_PUBLIC_ID",
"group_id": "GROUP_PUBLIC_ID",
"model": "claude-opus-4.7",
"endpoint": "messages",
"method": "POST",
"status": "succeeded",
"status_code": 200,
"is_stream": false,
"request_mode": "batch",
"batch": {
"protocol": "claude",
"job_id": "msgbatch_01K...",
"custom_id": "request-1",
"price_multiplier": "0.5"
},
"tokens": {
"input": 120,
"output": 45,
"cached": 0,
"cache_write": 0,
"reasoning": 0,
"total": 165
},
"cost": "0.0000345",
"usage_cost": "0.00345",
"official_base_cost": "0.000345",
"currency": "USD",
"usage_pricing": {
"basis": "official_price",
"base_field": "official_base_cost",
"base_amount": "0.000345",
"multiplier": "10",
"usage_cost": "0.00345",
"formula": "round(base_amount * multiplier, 10)"
},
"pricing_snapshot": {
"available": true,
"unit": "per_1m_tokens",
"user_price": {
"input": "0.2",
"output": "1",
"cache_read": "0.02",
"cache_write": "0.25",
"reasoning": "1"
},
"official_price": {
"input": "1",
"output": "5",
"cache_read": "0.1",
"cache_write": "1.25",
"reasoning": "5"
},
"usage_price": {
"input": "10",
"output": "50",
"cache_read": "1",
"cache_write": "12.5",
"reasoning": "50"
}
},
"duration_ms": 842,
"gateway_overhead_ms": 34,
"upstream_first_token_ms": 156,
"e2e_first_token_ms": 190,
"settlement_status": "settled",
"started_at": "2026-08-05T10:00:00Z",
"finished_at": "2026-08-05T10:00:00.842Z"
}
],
"meta": {
"key_id": "KEY_PUBLIC_ID",
"limit": 10,
"returned": 1,
"order": "finished_at_desc",
"next_cursor": "eyJ0IjoiMjAyNi0wOC0wNSAxMDowMDowMCIsInAiOiIwMUt...",
"has_more": true
}
}
Om verder te gaan met de volgende oudere pagina:
curl "https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID/requests?limit=10&before=NEXT_CURSOR" \
-H "Authorization: Bearer mg_partner_..."
Een invalide before cursor retourneert HTTP 422. De cursor bevat alleen de eindtijdpositie en de publieke ID van het externe verzoek; interne numerieke verzoek-ID's worden nooit weergegeven.
Voor synchrone en native asynchrone verzoeken: request_mode is sync of async en de batch voorwerp wordt weggelaten. Met de opgeslagen momentopname van de tokensnelheid kan de historische basisberekening worden gereproduceerd als sum(tokens × snapshotted_rate / 1,000,000). Afrekening rondt het geselecteerde basisbedrag af op 10 decimalen en rekent vervolgens af round(base_amount × multiplier, 10). De opgeslagen cost, official_base_cost, En usage_cost velden blijven gezaghebbend.
Onbewerkte verzoek- en antwoordinstanties worden nooit door dit eindpunt geretourneerd.
Lijst met saldotransacties
Verzoek
curl https://p-api.model-gate.com/api/v1/partner/transactions \
-H "Authorization: Bearer mg_partner_..."
Reactie — 200
{
"data": [
{
"transaction_id": "TRANSACTION_PUBLIC_ID",
"type": "debit",
"source": "api_usage_minute",
"billing_minute_num": 29769120,
"amount": "-0.0232000000",
"request_count": 100,
"balance_before": null,
"balance_after": null,
"api_key_id": null,
"created_at": "2026-08-05T10:00:00Z"
}
]
}
Factureerbare gevolgtrekking wordt weergegeven als één portefeuille-grootboekrij per factureringseigenaar en eindtijdminuut. transaction_id is de duurzame grootboek-ID. request_count is het aantal verzoeken dat in die minuutafschrijving is inbegrepen; billing_minute_num is floor(unix(finished_at)/60). Ruw intern grootboek id / source_id waarden worden niet geretourneerd. Geaggregeerde API-gebruiksrijen retourneren opzettelijk null voor balance_before, balance_after, En api_key_id; Het exacte sleutel-/groeps-/verzoekdetail blijft beschikbaar via de verzoekgeschiedenis en het panelminutenoverzicht.
Huidig saldo opvragen
curl https://p-api.model-gate.com/api/v1/partner/balance \
-H "Authorization: Bearer mg_partner_..."
{"data":{"balance":"1234.5678900000","currency":"USD","as_of":"2026-08-28T07:00:00Z"}}
Gebruik dit eindpunt daarna account.balance_low callbacks om de huidige accountportemonnee af te stemmen zonder dat een Model API-referentie vereist is.
Lijst van auditgebeurtenissen van partners
curl "https://p-api.model-gate.com/api/v1/partner/audit-events?limit=100" \
-H "Authorization: Bearer mg_partner_..."
Auditgebeurtenissen registreren succesvolle partnerbeheermutaties met verzoek-ID, actie, doel, bron-IP, status, veilige metagegevens en UTC-tijdstempel. Geheimen, dragertokens, platte tekst van API-sleutels, idempotentiesleutels, vingerafdrukken van verzoeken en herhalingsteksten worden niet opgeslagen in auditmetagegevens. Gebruik cursor voor volgende pagina's en optioneel action filteren.
Maak een groep
Verzoek
curl -X POST https://p-api.model-gate.com/api/v1/partner/groups \
-H "Authorization: Bearer mg_partner_..." \
-H "Idempotency-Key: operation-unique-001" \
-H "Content-Type: application/json" \
-d '{
"name": "Telegram bot A",
"description": "Keys created by bot A",
"rpm_limit": 100,
"concurrency_limit": 20,
"spend_limit": "1000.0000000000",
"usage_price_basis": "official_price",
"usage_price_multiplier": "0.900000"
}'
Reactie — 201
{
"data": {
"public_id": "GROUP_PUBLIC_ID",
"name": "Telegram bot A",
"status": "active",
"spend_limit": "1000.0000000000",
"usage": "0.0000000000",
"total_spent": "0.0000000000",
"usage_price_basis": "official_price",
"usage_price_multiplier": "0.900000"
}
}
Lijst groepen
Verzoek
curl https://p-api.model-gate.com/api/v1/partner/groups \
-H "Authorization: Bearer mg_partner_..."
Antwoord
{"data":[{"public_id":"GROUP_PUBLIC_ID","name":"Telegram bot A","status":"active","usage":"0.0000000000"}]}
Een groep ophalen of bijwerken
Verzoek ontvangen
curl https://p-api.model-gate.com/api/v1/partner/groups/GROUP_PUBLIC_ID \
-H "Authorization: Bearer mg_partner_..."
Krijg antwoord
{"data":{"public_id":"GROUP_PUBLIC_ID","name":"Telegram bot A","spend_limit":"1000.0000000000","usage":"12.0000000000"}}
Verzoek bijwerken
curl -X PATCH https://p-api.model-gate.com/api/v1/partner/groups/GROUP_PUBLIC_ID \
-H "Authorization: Bearer mg_partner_..." \
-H "Idempotency-Key: operation-unique-001" \
-H "Content-Type: application/json" \
-d '{"name":"Telegram bot A production","status":"active","spend_limit":"2000.0000000000","usage_price_basis":"user_price","usage_price_multiplier":"1.200000"}'
Reactie bijwerken
{"data":{"public_id":"GROUP_PUBLIC_ID","name":"Telegram bot A production","spend_limit":"2000.0000000000","usage_price_basis":"user_price","usage_price_multiplier":"1.200000"}}
Verwijder een groep
Een niet-lege groep wordt niet verwijderd. Verplaats of verwijder eerst alle API-sleutels van leden; anders retourneert de API HTTP 409 met group_not_empty.
Verzoek
curl -X DELETE https://p-api.model-gate.com/api/v1/partner/groups/GROUP_PUBLIC_ID \
-H "Authorization: Bearer mg_partner_..." \
-H "Idempotency-Key: operation-unique-001" \
Antwoord
{"data":{"deleted":true}}
Sleutels worden losgekoppeld op basis van het gedrag van de externe sleutel in de database. Controleer het lidmaatschap voordat u het verwijdert.
Groepsgebruik resetten
Verzoek
curl -X POST https://p-api.model-gate.com/api/v1/partner/groups/GROUP_PUBLIC_ID/reset-usage \
-H "Authorization: Bearer mg_partner_..." \
-H "Idempotency-Key: operation-unique-001" \
Antwoord
{"data":{"public_id":"GROUP_PUBLIC_ID","usage":"0.0000000000","total_spent":"8.5000000000"}}
Groepsleden vermelden
Verzoek
curl https://p-api.model-gate.com/api/v1/partner/groups/GROUP_PUBLIC_ID/members \
-H "Authorization: Bearer mg_partner_..."
Antwoord
{"data":[{"public_id":"KEY_PUBLIC_ID","name":"Telegram user 123","status":"active","usage":"3.2500000000","total_spent":"1.1400000000"}]}
Een sleutel aan een groep toevoegen
Verzoek
curl -X POST https://p-api.model-gate.com/api/v1/partner/groups/GROUP_PUBLIC_ID/members \
-H "Authorization: Bearer mg_partner_..." \
-H "Idempotency-Key: operation-unique-001" \
-H "Content-Type: application/json" \
-d '{"key_id":"KEY_PUBLIC_ID"}'
Antwoord
Het antwoord is de bijgewerkte lijst met groepsleden:
{"data":[{"public_id":"KEY_PUBLIC_ID","name":"Telegram user 123","status":"active"}]}
Verwijder een sleutel uit een groep
Verzoek
curl -X DELETE https://p-api.model-gate.com/api/v1/partner/groups/GROUP_PUBLIC_ID/members/KEY_PUBLIC_ID \
-H "Authorization: Bearer mg_partner_..." \
-H "Idempotency-Key: operation-unique-001" \
Antwoord
{"data":{"removed":true}}
Groepsgebruik ophalen
Verzoek
curl https://p-api.model-gate.com/api/v1/partner/groups/GROUP_PUBLIC_ID/usage \
-H "Authorization: Bearer mg_partner_..."
Antwoord
{"data":{"group_id":"GROUP_PUBLIC_ID","usage":"12.0000000000","total_spent":"8.5000000000","usage_reset_at":"2026-08-01T00:00:00Z"}}
Groepsstatistieken verkrijgen
from En to accepteer alleen UTC RFC3339-tijdstempels die eindigen op Z (fractionele seconden van maximaal 6 cijfers zijn toegestaan). Statistieken worden uitsluitend berekend op basis van de aggregaten van voltooide verzoeken, ingetoetst op finished_at; de huidige open minuut is opzettelijk uitgesloten, dus de resultaten kunnen tot aan de aggregatiefrequentie van minuten achterblijven.
average_duration_ms is de gemiddelde volledige Model Gate-verzoekduur (duration_ms) voor voltooide verzoeken in de geselecteerde periode. Het is geen latentie van de eerste token van E2E, latentie van de upstream van de eerste token of gateway-overhead. De Partner API geeft alleen deze expliciete statistieknaam weer.
Verzoek
curl "https://p-api.model-gate.com/api/v1/partner/groups/GROUP_PUBLIC_ID/stats?from=2026-08-01T00:00:00Z&to=2026-08-05T23:59:59Z" \
-H "Authorization: Bearer mg_partner_..."
Antwoord
{
"data": {
"group_id": "GROUP_PUBLIC_ID",
"requests": 120,
"errors": 3,
"input_tokens": 50000,
"output_tokens": 12000,
"cached_tokens": 8000,
"cache_write_tokens": 1200,
"reasoning_tokens": 2000,
"cost": "8.5000000000",
"average_duration_ms": "842.50",
"from": "2026-08-01T00:00:00Z",
"to": "2026-08-05T23:59:59Z"
}
}
Krijg een asynchroon resultaat
Verzoek
curl https://p-api.model-gate.com/api/v1/requests/01KZ... \
-H "Authorization: Bearer mg_partner_..."
Reactie verwerken
{
"data": {
"request_id": "01KZ...",
"status": "processing",
"created_at": "2026-08-05T10:00:00Z",
"started_at": "2026-08-05T10:00:00Z",
"completed_at": null,
"expires_at": "2026-08-06T10:00:00Z"
}
}
Voltooide reactie
{
"data": {
"request_id": "01KZ...",
"status": "completed",
"response_status": 200,
"response_headers": {"Content-Type":"application/json"},
"response": {"id":"resp_example","status":"completed"},
"completed_at": "2026-08-05T10:00:05Z",
"expires_at": "2026-08-06T10:00:00Z"
}
}
Veelvoorkomende fouten
Ongeldige sleutel Partner API: 401
{"error":{"type":"invalid_token","message":"Invalid Partner API key"}}
Bron niet gevonden — 404
{"error":{"type":"not_found","message":"API key not found"}}
Ongeldig verzoek — 422
{"error":{"type":"invalid_request","message":"limit must be an integer from 1 to 100"}}
Muterende Partner API JSON-lichamen zijn beperkt tot 1 MiB.
Idempotentieconflict — 409
Hetzelfde Idempotency-Key werd hergebruikt voor een ander verzoek. Genereer een nieuwe sleutel voor een nieuwe logische bewerking.
Tarieflimiet — 429
Het antwoord bevat error.code = partner_rate_limit_exceeded En Retry-After. Probeer het pas opnieuw na de aangegeven vertraging.
Methode niet toegestaan — 405
De partnerhost retourneert een JSON-fout plus de HTTP Allow koptekst; het valt nooit terug naar een HTML-foutpagina.
Hoofdregels voor bedrijfsreferenties
Voor een Business Partner API-token wordt alleen de geverifieerde organisatie-eigenaar geaccepteerd. Sleutels die via Partner API zijn gemaakt, gebruiken die eigenaar als factureringseigenaar en als hoofd van de referentie. De toewijzing van een medewerker aan een opdrachtgever wordt uitgevoerd in het webpaneel. group_id, indien verstrekt, moet een actieve groep identificeren die eigendom is van het zakelijke account; ongeldige waarden retourneren HTTP 422 en val nooit terug op een niet-gegroepeerde sleutel. Antwoorden op verzoekgeschiedenis kunnen het volgende omvatten principal_user_id om de referentie-principal onafhankelijk van het factureringseigendom te identificeren.