Documentação
Comece pela API
Uma URL, uma chave, o formato que o seu editor já conhece. Os capítulos abaixo são o contrato público — sem inventar rota.
Nesta página
Base URL
https://api.lianex.com.br/v1
Modelo
GET /v1/models · o id vem com a chave
Chave
Authorization: Bearer lianex_…
01 · Request
O primeiro token
lianex_.curl https://api.lianex.com.br/v1/chat/completions \
-H "Authorization: Bearer lianex_SUA-CHAVE" \
-H "Content-Type: application/json" \
-d '{"model":"lianex-model","conversation_id":"00","messages":[{"role":"user","content":"Continue o projeto."}]}'from openai import OpenAI
client = OpenAI(
api_key="lianex_SUA-CHAVE",
base_url="https://api.lianex.com.br/v1",
)
client.chat.completions.create(
model="lianex-model",
extra_body={"conversation_id": "00"},
messages=[{"role": "user", "content": "Continue o projeto."}],
)stream: true devolve SSE. O cabeçalho Idempotency-Key vale no request sem stream — 24 horas, mesmo corpo.
curl https://api.lianex.com.br/v1/chat/completions \
-H "Authorization: Bearer lianex_SUA-CHAVE" \
-H "Content-Type: application/json" \
-d '{"model":"lianex-model","conversation_id":"00","stream":true,"messages":[{"role":"user","content":"Continue o projeto."}]}'02 · Chat
Continuidade no chat
conversation_id, com null ou com 00, cada chamada abre um chat novo. A resposta sempre traz conversation_id. Reenvie esse id para continuar na mesma conversa, só com a mensagem nova.A primeira chamada, com 00, devolve o id real:
{
"id": "chatcmpl_...",
"object": "chat.completion",
"model": "lianex-model",
"conversation_id": "6680621b-e345-4b29-a989-89836c15458e",
"choices": [{ "message": { "role": "assistant", "content": "Olá! Como posso ajudar você hoje?" } }]
}A chamada seguinte reenvia esse conversation_id e só a mensagem nova. Em fluxo sem conversa contínua, o campo volta null.
curl https://api.lianex.com.br/v1/chat/completions \
-H "Authorization: Bearer lianex_SUA-CHAVE" \
-H "Content-Type: application/json" \
-d '{"model":"lianex-model","conversation_id":"6680621b-e345-4b29-a989-89836c15458e","messages":[{"role":"user","content":"Continua daqui."}]}'Imagem e documento vão na mesma chamada, no content da última mensagem. Imagem: image_url com data URL (jpeg, png, gif, webp). Documento: file com file_data (pdf, txt, csv, md, docx, xlsx). Uma URL https também serve. Não há rota separada de upload.
{
"model": "lianex-model",
"conversation_id": "00",
"messages": [{
"role": "user",
"content": [
{ "type": "text", "text": "O que tem aqui?" },
{ "type": "image_url", "image_url": { "url": "data:image/png;base64,..." } }
]
}]
}03 · Base
Arquivo certo, com citação
Documentos ficam na conta. A resposta aponta a origem. A API usa o contexto da mesma empresa — não um índice público.
04 · Conta
Onde a chave nasce
30 dias sem cartão: Chat, Base, modelos e CRM no teste. A chave é criada depois que você entra — em API, com resumo antes de qualquer consumo. Dá para restringir IP (lista ou fixar no primeiro).
05 · Modelos
O id não se adivinha
GET /v1/models exige a mesma chave. A lista é a da conta: id é o slug, owned_by é lianex. Use esse id em chat/completions. Sem chave, a rota não abre.curl https://api.lianex.com.br/v1/models \ -H "Authorization: Bearer lianex_SUA-CHAVE"
06 · Limites
O teto padrão
X-RateLimit-Limit e, no 429, Retry-After. Os números abaixo são o piso de fábrica — a operação pode subir, não inventamos outro.- Por chave
- 60 pedidos / minuto
- Por conta
- 180 pedidos / minuto
- Por IP
- 120 pedidos / minuto
- Mensagens no corpo
- até 128
- Tamanho do chat
- até 20 MB
- Anexos
- até 5 · 15 MB cada
- max_tokens
- até 16 384
- Paralelo por chave
- até 8
07 · Erros
O corpo é sempre o mesmo
{ "error": { "message", "type", "code" }, "request_id" }. O X-Request-Id volta no cabeçalho. Guarde os dois se for abrir um chamado.- 401invalid_api_key
- Chave ausente, inválida ou revogada.
- 403ip_not_allowed
- Este IP não está liberado nesta chave.
- 402insufficient_quota
- Saldo pré-pago insuficiente.
- 404model_not_found
- O id do modelo não existe nesta conta.
- 409idempotency_key_mismatch
- Idempotency-Key reutilizada com outro corpo.
- 400file_unsupported
- Tipo de arquivo fora da lista, ou mais de 5 anexos.
- 413payload_too_large
- Corpo acima de 20 MB, arquivo acima de 15 MB, ou max_tokens acima do teto.
- 429rate_limit_exceeded
- Janela de taxa. Veja Retry-After e X-RateLimit-*.
- 503model_not_configured
- Nenhum modelo de API está ativo.
- 502provider_error
- O provedor a montante falhou. Tente de novo.