Partner API slutpunkter
Fyll i Partner API exempel på begäran och svar för nycklar, grupper, förfrågningar och transaktioner.
Partner API slutpunkter
Bas-URL:
https://p-api.model-gate.com
Alla förfrågningar kräver:
Authorization: Bearer mg_partner_...
Accept: application/json
Alla monetära värden och gränsvärden är JSON-decimalsträngar. Analysera dem inte som binära flyttal.
Gemensamma regler för bankintegration
Alla externa tidsstämplar är UTC RFC3339. Användning av samlingsslutpunkter limit (1–100) plus en ogenomskinlig cursor; analysera eller tillverka aldrig markörinnehåll. POST, PATCH, och DELETE förfrågningar kräver Idempotency-Key; Försök med samma åtgärd igen efter timeouts. Idempotensuppgifter bevaras i 7 dagar. Svaren inkluderar X-Request-ID, är Cache-Control: no-store, och alla fel är JSON. Frekvensgränssvar är HTTP 429 med Retry-After och X-RateLimit-* rubriker. Okända brödtext/frågefält avvisas.
Det maskinläsbara OpenAPI 3.1-kontraktet distribueras som resources/contracts/partner-api.openapi.yaml.
Skapa en API-nyckel
Begäran
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"
}'
Svar - 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"
}
}
Den kompletta key värde returneras först efter skapande eller rotation.
Lista API-nycklar
Begäran
curl https://p-api.model-gate.com/api/v1/partner/keys \
-H "Authorization: Bearer mg_partner_..."
Svar - 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"
}
]
}
Listan är beställd som den senaste först och använder ogenomskinlig markörpaginering. Passera limit=1..100; när meta.has_more är sant, skicka meta.next_cursor som nästa cursor.
Skaffa en API-nyckel
Begäran
curl https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID \
-H "Authorization: Bearer mg_partner_..."
Svar - 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"
}
}
Uppdatera en API-nyckel
PATCH ersätter endast de föränderliga värdena som stöds. För att ta bort nyckeln från en grupp, skicka en tom group_id. För att ärva värderingsinställningar, skicka null för nyckelnivåbasen och multiplikatorn.
Begäran
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
}'
Svar - 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"
}
}
Ta bort en API-nyckel
Begäran
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" \
Svar - 200
{"data":{"deleted":true}}
Frys och frys upp en nyckel
Begäran om frysning
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" \
Frys svar
{"data":{"public_id":"KEY_PUBLIC_ID","status":"frozen"}}
Frigör begäran
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" \
Frigör svar
{"data":{"public_id":"KEY_PUBLIC_ID","status":"active"}}
Unfreezing kräver en verifierad ägarens e-postadress.
Vrid på en nyckel
Begäran
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" \
Svar - 200
{
"data": {
"public_id": "KEY_PUBLIC_ID",
"status": "active",
"key_prefix": "mg_live_cd34",
"key": "mg_live_cd34..."
}
}
Återställ nyckelanvändning
Begäran
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" \
Svar - 200
{
"data": {
"public_id": "KEY_PUBLIC_ID",
"usage": "0.0000000000",
"total_spent": "1.1400000000"
}
}
Att återställa användningen ändrar inte livstidsutgifter eller kontosaldo.
Få nyckelanvändning
Begäran
curl https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID/usage \
-H "Authorization: Bearer mg_partner_..."
Svar - 200
{
"data": {
"key_id": "KEY_PUBLIC_ID",
"usage": "3.2500000000",
"total_spent": "1.1400000000"
}
}
Få utgiftsgräns och återstående användning
Begäran
curl https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID/spent-limit \
-H "Authorization: Bearer mg_partner_..."
Svar - 200
{
"data": {
"key_id": "KEY_PUBLIC_ID",
"spend_limit": "20.0000000000",
"usage": "3.2500000000",
"remaining": "16.7500000000"
}
}
När spend_limit är noll, det är obegränsat och remaining är null.
Få de senaste förfrågningarna om en nyckel
Detaljerad förfrågningshistorik är en datauppsättning för hot-retention som kontrolleras av API_REQUESTS_HOT_RETENTION_DAYS (standard 7 dagar). Svarsmetadata rapporterar det aktiva lagringsfönstret. Använd balanstransaktioner för långsiktig finansiell avstämning.
limit är valfritt, har som standard 10 och måste vara ett heltal från 1 till 100. Slutförda förfrågningar ordnas av finished_at nyaste först. När meta.has_more är true, passera meta.next_cursor som den ogenomskinliga before frågeparameter för att hämta nästa äldre sida. Analysera eller konstruera inte markörer själv.
Svaret innehåller oföränderliga priser för användare och officiella per miljon token för förfrågningar som slutförs efter migrering 059_request_pricing_audit_snapshot.sql. Den räknar också pricing_snapshot.usage_price från den sparade basen, multiplikatorn och historiska kurserna utan att lagra en annan kursuppsättning. Detta gör att den oberoende värderingen av användningsgränsen kan granskas efter katalogpriserna ändras. Historiska förfrågningar skapade före migrering 059 returnerar pricing_snapshot.available: false snarare än att ersätta nuvarande priser. Förfrågningar som körs via Claude/OpenAI-kompatibla batch-API:er är uttryckligen markerade med request_mode: "batch" och inkludera deras protokoll, batchjobb-ID, custom_id, och den ögonblicksbildade Model Gate batchprismultiplikatorn.
Latensen använder stabila företags-/partnernamn: gateway_overhead_ms, upstream_first_token_ms, och e2e_first_token_ms. E2E:s första token-värde mäts från Model Gate-begärans start till den första riktiga innehållstoken och exkluderar nätverks-/TLS-tid på klientsidan. Partner API exponerar endast det explicita e2e_first_token_ms namn; den interna lagringskolumnen finns kvar api_requests.first_token_ms.
Begäran
curl "https://p-api.model-gate.com/api/v1/partner/keys/KEY_PUBLIC_ID/requests?limit=10" \
-H "Authorization: Bearer mg_partner_..."
Svar - 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
}
}
För att fortsätta med nästa äldre sida:
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_..."
En ogiltig before markören returnerar HTTP 422. Markören innehåller endast sluttidspositionen och extern begäran om offentligt ID; interna numeriska begärande-ID:n exponeras aldrig.
För synkrona och inbyggda asynkförfrågningar, request_mode är sync eller async och den batch objektet utelämnas. Den sparade token-rate ögonblicksbilden gör att den historiska basberäkningen kan reproduceras som sum(tokens × snapshotted_rate / 1,000,000). Avräkning avrundar det valda basbeloppet till 10 decimaler och räknar sedan ut round(base_amount × multiplier, 10). Den lagrade cost, official_base_cost, och usage_cost fälten förblir auktoritativa.
Obearbetade begäranden och svarsinstanser returneras aldrig av denna slutpunkt.
Lista saldotransaktioner
Begäran
curl https://p-api.model-gate.com/api/v1/partner/transactions \
-H "Authorization: Bearer mg_partner_..."
Svar - 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"
}
]
}
Fakturerbar slutledning representeras som en plånboksrad per faktureringsägare och sluttidsminut. transaction_id är den hållbara reskontraidentifieraren. request_count är antalet förfrågningar som ingår i den minutdebiteringen; billing_minute_num är floor(unix(finished_at)/60). Rå intern reskontra id / source_id värden returneras inte. Aggregerade API-användningsrader returneras avsiktligt null för balance_before, balance_after, och api_key_id; exakt information om nyckel/grupp/begäran förblir tillgänglig från förfrågningshistoriken och panelens minutdrill-down.
Få aktuell balans
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"}}
Använd denna slutpunkt efter account.balance_low återuppringningar för att stämma av plånboken för nuvarande konto utan att kräva en modell API-referens.
Lista Partnerrevisionshändelser
curl "https://p-api.model-gate.com/api/v1/partner/audit-events?limit=100" \
-H "Authorization: Bearer mg_partner_..."
Granskningshändelser registrerar framgångsrika partnerhanteringsmutationer med begäran-ID, åtgärd, mål, käll-IP, status, säker metadata och UTC-tidsstämpel. Hemligheter, bärartokens, klartext med API-nyckel, idempotensnycklar, begärande fingeravtryck och replay-kroppar lagras inte i granskningsmetadata. Använda cursor för efterföljande sidor och valfritt action filtrering.
Skapa en grupp
Begäran
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"
}'
Svar - 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"
}
}
Lista grupper
Begäran
curl https://p-api.model-gate.com/api/v1/partner/groups \
-H "Authorization: Bearer mg_partner_..."
Svar
{"data":[{"public_id":"GROUP_PUBLIC_ID","name":"Telegram bot A","status":"active","usage":"0.0000000000"}]}
Skaffa eller uppdatera en grupp
Få förfrågan
curl https://p-api.model-gate.com/api/v1/partner/groups/GROUP_PUBLIC_ID \
-H "Authorization: Bearer mg_partner_..."
Få svar
{"data":{"public_id":"GROUP_PUBLIC_ID","name":"Telegram bot A","spend_limit":"1000.0000000000","usage":"12.0000000000"}}
Uppdatera begäran
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"}'
Uppdatera svar
{"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"}}
Ta bort en grupp
En icke-tom grupp tas inte bort. Flytta eller ta bort alla medlemmars API-nycklar först; annars returnerar API:et HTTP 409 med group_not_empty.
Begäran
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" \
Svar
{"data":{"deleted":true}}
Nycklar kopplas bort i enlighet med databasens främmande nyckelbeteende. Verifiera medlemskap innan radering.
Återställ gruppanvändning
Begäran
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" \
Svar
{"data":{"public_id":"GROUP_PUBLIC_ID","usage":"0.0000000000","total_spent":"8.5000000000"}}
Lista gruppmedlemmar
Begäran
curl https://p-api.model-gate.com/api/v1/partner/groups/GROUP_PUBLIC_ID/members \
-H "Authorization: Bearer mg_partner_..."
Svar
{"data":[{"public_id":"KEY_PUBLIC_ID","name":"Telegram user 123","status":"active","usage":"3.2500000000","total_spent":"1.1400000000"}]}
Lägg till en nyckel till en grupp
Begäran
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"}'
Svar
Svaret är den uppdaterade gruppmedlemslistan:
{"data":[{"public_id":"KEY_PUBLIC_ID","name":"Telegram user 123","status":"active"}]}
Ta bort en nyckel från en grupp
Begäran
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" \
Svar
{"data":{"removed":true}}
Få gruppanvändning
Begäran
curl https://p-api.model-gate.com/api/v1/partner/groups/GROUP_PUBLIC_ID/usage \
-H "Authorization: Bearer mg_partner_..."
Svar
{"data":{"group_id":"GROUP_PUBLIC_ID","usage":"12.0000000000","total_spent":"8.5000000000","usage_reset_at":"2026-08-01T00:00:00Z"}}
Få gruppstatistik
from och to acceptera endast UTC RFC3339-tidsstämplar som slutar på Z (bråkdelar av sekunder upp till 6 siffror är tillåtna). Statistik beräknas endast från slutförda förfrågningsaggregat som knappats av finished_at; den för närvarande öppna minuten är avsiktligt utesluten, så resultaten kan släpa med upp till minutaggregeringskadensen.
average_duration_ms är den genomsnittliga fulla Model Gate-begäran varaktighet (duration_ms) över slutförda förfrågningar under den valda perioden. Det är inte E2E första token latens, uppströms första token latens eller gateway overhead. Partner API visar endast detta explicita mätvärdesnamn.
Begäran
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_..."
Svar
{
"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"
}
}
Få ett asynkront resultat
Begäran
curl https://p-api.model-gate.com/api/v1/requests/01KZ... \
-H "Authorization: Bearer mg_partner_..."
Bearbetar svar
{
"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"
}
}
Färdigt svar
{
"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"
}
}
Vanliga fel
Ogiltig Partner API-nyckel – 401
{"error":{"type":"invalid_token","message":"Invalid Partner API key"}}
Resursen hittades inte — 404
{"error":{"type":"not_found","message":"API key not found"}}
Ogiltig begäran — 422
{"error":{"type":"invalid_request","message":"limit must be an integer from 1 to 100"}}
Muterande Partner API JSON-kroppar är begränsade till 1 MiB.
Idempotenskonflikt — 409
Samma Idempotency-Key återanvändes för en annan begäran. Generera en ny nyckel för en ny logisk operation.
Prisgräns - 429
Svaret innehåller error.code = partner_rate_limit_exceeded och Retry-After. Försök igen först efter den angivna fördröjningen.
Metod inte tillåten — 405
Partnervärden returnerar ett JSON-fel plus HTTP Allow rubrik; det faller aldrig tillbaka till en HTML-felsida.
Huvudregler för affärsbehörighet
För en Business Partner API-token accepteras endast den verifierade organisationsägaren. Nycklar som skapats genom Partner API använder den ägaren som både faktureringsägare och användaruppgifter. Medarbetar-rektoruppdrag utförs i webbpanelen. group_id, när den tillhandahålls, måste identifiera en aktiv grupp som ägs av Business-kontot; ogiltiga värden returnerar HTTP 422 och fall aldrig tillbaka till en ogrupperad nyckel. Svar från förfrågningshistorik kan inkludera principal_user_id för att identifiera autentiseringsuppgifterna oberoende av faktureringsägande.