Referência da API

Conceitos básicos de integração

#URL base

Todos os endpoints ficam sob /v1 no próprio domínio desta implantação. Não há seleção de região — o roteamento para os provedores upstream acontece por trás do gateway.

#Cabeçalho de autenticação

Um único cabeçalho Authorization: Bearer é toda a autenticação. Sem assinatura, sem timestamp e sem cabeçalho por usuário — nada além do bearer token que outros gateways exigem existe aqui.

#Envelope de erro

As rejeições do lado do gateway usam o envelope no formato da OpenAI com type "xiaoxiang_error". Erros do upstream são encaminhados sem alteração, os endpoints de tarefas assíncronas respondem com um corpo plano, e dois casos não trazem corpo nenhum — leia a página de erros antes de escrever seu parser.

error.json
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"
  }
}

Os cinco envelopes e a tabela de códigos de erro →

#Política de novas tentativas

Repita 429 e 5xx com backoff exponencial, respeitando Retry-After quando presente. Não repita erros de validação 4xx — o mesmo corpo vai falhar de novo. Em envios cobrados, envie uma Idempotency-Key para que uma nova tentativa após um timeout reproduza o primeiro resultado em vez de iniciar um segundo trabalho.

backoff.py
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()

Como funcionam as chaves de idempotência →

#Especificação legível por máquina

O mesmo contrato em dois formatos gerados: OpenAPI para geração de clientes, Postman e ferramentas de API, e um único arquivo markdown para colar em um agente de código. Os dois são gerados a partir destas páginas, então não ficam diferentes do que você está lendo.

A URL do servidor é reescrita para este domínio, então os clientes gerados não precisam de configuração extra.
generate-a-client.sh
# 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

#Visão geral dos endpoints

Todos os caminhos aceitam o corpo de requisição da OpenAI — parâmetros específicos do provedor (anthropic tool_use, gemini thinking_config) são repassados sem alteração. As rotas nativas de provedores e as rotas legadas congeladas estão listadas à parte na página de compatibilidade.

Texto
POST/v1/chat/completionsChat de vários turnos, chamada de ferramentas, streaming, modo JSON.
POST/v1/responsesTexto em uma única chamada, com saídas estruturadas e raciocínio.
POST/v1/messagesFormato nativo da Anthropic — mesma autenticação, sem adaptador.
POST/v1/responses/compactCondensa uma conversa longa nos modelos que suportam compactação — sem versão em streaming.
Vetor
POST/v1/moderationsModeração de conteúdo no mesmo formato de API.
Música
POST/v1/music/generationsGeração de música assíncrona — retorna um task_id; aceita webhook opcional.
GET/v1/music/tasks/:task_idConsulta o status e o progresso de uma tarefa de música assíncrona.
GET/v1/music/tasks/:task_id/contentBaixe o áudio concluído pelo gateway.
Imagem
POST/v1/images/tasksGeração de imagens assíncrona, a rota usada pelos modelos de imagem — retorna um task_id; aceita webhook opcional.
GET/v1/images/tasks/:task_idConsulta o status e o progresso de uma tarefa de imagem assíncrona.
GET/v1/images/tasks/:task_id/contentBusque as URLs finais das imagens — links persistentes, seguros para armazenar.
Vídeo
POST/v1/videosGeração de vídeo no formato da OpenAI (Sora, Doubao) — aceita webhook opcional.
GET/v1/videos/:task_idConsulta o status de uma tarefa assíncrona; o conteúdo fica em /content.
GET/v1/videos/:task_id/contentBaixe o vídeo concluído pelo gateway.
DELETE/v1/videos/:task_idCancela uma tarefa que ainda não chegou a um estado final.
POST/v1/videos/:video_id/remixRenderiza de novo um vídeo existente com um novo prompt, nos modelos que oferecem isso.
3D
POST/v1/model3d/tasksGeração assíncrona de ativos 3D e pós-processamento — retorna um task_id.
GET/v1/model3d/tasks/:task_idConsulta a tarefa 3D; a URL do resultado vem no corpo da tarefa, não há rota /content.
Mídia
POST/v1/media/upload-policyCria uma política de upload de curta duração para uma imagem, vídeo, áudio ou arquivo genérico, até o limite configurado para ele.
Assinaturas de apps
POST/v1/google-play/verifyVerifica um token de compra do Google Play no seu app com a conta de serviço configurada nesta chave — grátis, sem chamada de modelo.
POST/v1/xsolla/verifyVerifica se um usuário da Xsolla tem uma assinatura ativa com a chave de API da Xsolla definida nesta chave — grátis, sem chamada de modelo.
Conta
GET/v1/balanceSaldo da conta e quanto esta chave ainda pode gastar — grátis, sem chamada de modelo.
Metadados
GET/v1/modelsLista todos os modelos que esta chave pode acessar.
GET/v1/models/:modelRetorna uma entrada de modelo — o formato que os clientes da Anthropic e da OpenAI consultam ao iniciar.

Ainda com problemas?

Envie para nós o ID da requisição ou a mensagem de erro e vamos investigar.