Référence API
Bases de l'intégration
#URL de base
Tous les endpoints se trouvent sous /v1, sur le domaine propre à ce déploiement. Il n'y a pas de choix de région — le routage vers les fournisseurs en amont se fait derrière la passerelle.
#En-tête d'authentification
Un seul en-tête Authorization: Bearer suffit pour toute l'authentification. Pas de signature, pas d'horodatage, pas d'en-tête par utilisateur — rien de ce qu'exigent d'autres passerelles au-delà du jeton bearer n'existe ici.
#Enveloppe d'erreur
Les rejets côté passerelle utilisent l'enveloppe au format OpenAI avec le type "xiaoxiang_error". Les erreurs en amont sont transmises telles quelles, les endpoints de tâches asynchrones répondent avec un corps plat, et deux cas n'ont aucun corps — lisez la page des erreurs avant d'écrire votre parseur.
HTTP/1.1 402 Payment Required
X-Oneapi-Request-Id: 2026091023...
{
"error": {
"message": "insufficient account balance, please top up to continue (request id: 2026091023...)",
"type": "xiaoxiang_error",
"code": "insufficient_user_quota"
}
}#Politique de nouvelle tentative
Réessayez les 429 et 5xx avec un backoff exponentiel, en respectant Retry-After s'il est présent. Ne réessayez pas les erreurs de validation 4xx — le même corps échouera à nouveau. Pour les soumissions facturables, envoyez une Idempotency-Key : une nouvelle tentative après un délai d'expiration rejouera le premier résultat au lieu de lancer un second traitement.
import time, requests
def call_with_backoff(url, headers, body, tries=5):
for i in range(tries):
r = requests.post(url, headers=headers, json=body)
if r.status_code not in (429, 500, 502, 503, 504):
return r
# 429 and 413 have no JSON body — never parse before checking status.
wait = int(r.headers.get("Retry-After", 2 ** i))
time.sleep(wait)
r.raise_for_status()#Spécification lisible par machine
Le même contrat dans deux formats générés : OpenAPI pour la génération de clients, Postman et les outils API, et un fichier markdown unique à coller dans un agent de code. Les deux sont reconstruits à partir de ces pages : ils ne peuvent pas diverger de ce que vous lisez.
openapi.json
OpenAPI 3.1 — chaque chemin documenté, ses paramètres et ses réponses d'erreur.
llms-full.txt
Tout le contrat d'échange en un seul fichier markdown, dimensionné pour la fenêtre de contexte d'un agent.
llms.txt
Index court de toutes les pages de documentation, pour les clients IA qui le récupèrent en premier.
# Any OpenAPI generator works; this is the common one.
npx @openapitools/openapi-generator-cli generate \
-i https://www.aisplice.store/openapi.json \
-g python \
-o ./gateway-client#Vue d'ensemble des endpoints
Chaque chemin accepte le corps de requête OpenAI — les paramètres propres aux fournisseurs (anthropic tool_use, gemini thinking_config) sont transmis tels quels. Les routes natives des fournisseurs et les routes historiques figées sont listées séparément sur la page de compatibilité.
| Texte | ||
| POST | /v1/chat/completions | Chat multitour, appel d'outils, streaming, mode JSON. |
| POST | /v1/responses | Texte en un seul appel, avec sorties structurées et raisonnement. |
| POST | /v1/messages | Format natif Anthropic — même authentification, aucun adaptateur nécessaire. |
| POST | /v1/responses/compact | Condense une longue conversation sur les modèles qui prennent en charge la compaction — pas de version en streaming. |
| Vecteurs | ||
| POST | /v1/moderations | Modération de contenu avec le même format d'échange. |
| Musique | ||
| POST | /v1/music/generations | Génération de musique asynchrone — renvoie un task_id ; webhook facultatif pris en charge. |
| GET | /v1/music/tasks/:task_id | Interroge le statut et la progression d'une tâche de musique asynchrone. |
| GET | /v1/music/tasks/:task_id/content | Récupère l'audio terminé via la passerelle. |
| Image | ||
| POST | /v1/images/tasks | Génération d'images asynchrone, la route utilisée par les modèles d'image — renvoie un task_id ; webhook facultatif pris en charge. |
| GET | /v1/images/tasks/:task_id | Interroge le statut et la progression d'une tâche d'image asynchrone. |
| GET | /v1/images/tasks/:task_id/content | Récupère les URL finales des images — liens persistants, que vous pouvez stocker. |
| Vidéo | ||
| POST | /v1/videos | Génération vidéo au format OpenAI (Sora, Doubao) — webhook facultatif pris en charge. |
| GET | /v1/videos/:task_id | Interroge le statut d'une tâche asynchrone ; le contenu est disponible sur /content. |
| GET | /v1/videos/:task_id/content | Télécharge la vidéo terminée via la passerelle. |
| DELETE | /v1/videos/:task_id | Annule une tâche qui n'a pas encore atteint un état final. |
| POST | /v1/videos/:video_id/remix | Régénère une vidéo existante avec un nouveau prompt, sur les modèles qui le permettent. |
| 3D | ||
| POST | /v1/model3d/tasks | Génération asynchrone d'assets 3D et post-traitement — renvoie un task_id. |
| GET | /v1/model3d/tasks/:task_id | Interroge la tâche 3D ; l'URL du résultat figure dans le corps de la tâche, il n'y a pas de route /content. |
| Médias | ||
| POST | /v1/media/upload-policy | Crée une politique d'envoi de fichier de courte durée pour une image, une vidéo, un audio ou un fichier générique, dans la limite configurée. |
| Abonnements d'application | ||
| POST | /v1/google-play/verify | Vérifie un jeton d'achat Google Play pour votre application avec le compte de service configuré sur cette clé — gratuit, sans appel de modèle. |
| POST | /v1/xsolla/verify | Vérifie si un utilisateur Xsolla a un abonnement actif avec la clé API Xsolla définie sur cette clé — gratuit, aucun appel de modèle. |
| Compte | ||
| GET | /v1/balance | Solde du compte et montant que cette clé peut encore dépenser — gratuit, sans appel de modèle. |
| Métadonnées | ||
| GET | /v1/models | Liste tous les modèles auxquels cette clé a accès. |
| GET | /v1/models/:model | Récupère une entrée de modèle — le format que les clients Anthropic et OpenAI sondent au démarrage. |
Toujours bloqué ?
Envoyez-nous l'ID de requête ou le message d'erreur, et nous examinerons le problème.