tipochat / api EstadoComeçar

DOCUMENTAÇÃO

Introdução

Integre respostas de texto no seu produto usando uma API B2B simples, com crédito pré-pago e repetição segura.

Estado atual: API em piloto fechado. A capacidade disponível é texto síncrono; não há streaming, voz ou imagens.

Início rápido

  1. Receba uma chave de projeto tc_live_… ou tc_test_… por canal seguro.
  2. No servidor, gere um UUID novo para Idempotency-Key.
  3. Faça POST /v1/responses.
  4. Em falha de rede, repita o mesmo pedido com a mesma chave.

Chaves e segurança

Uma chave nunca pode entrar no browser, app móvel distribuído, repositório ou variável PUBLIC_. Guarde-a apenas no servidor da integração. Não há acesso comercial aberto, recarga pública, voz, imagens ou SSE nesta versão.

Referência: criar uma resposta

POST https://api.tipochat.co.mz/v1/responses

CampoObrigatórioRegra
AuthorizationsimBearer tc_live_…; use somente no servidor.
Idempotency-Keysim8–255 caracteres; reutilize apenas para a mesma operação.
inputsimTexto não vazio, até 8.000 caracteres.
instructionsnãoTexto até 2.000 caracteres.
modelnãoSe enviado, deve ser tipo-text.
max_output_tokensnãoInteiro entre 1 e 2.048; padrão 512.
streamnãoNão use true; streaming ainda não existe.

Resposta de sucesso

{
  "id": "resp_…", "object": "response", "model": "tipo-text",
  "output_text": "Olá! Como posso ajudar?",
  "usage": { "input_tokens": 12, "output_tokens": 8, "total_tokens": 20 },
  "billing": { "mode": "live", "currency": "MZN", "charged_micro_mzn": 9400 }
}

JavaScript (Node.js)

const response = await fetch("https://api.tipochat.co.mz/v1/responses", {
  method: "POST",
  headers: { "Authorization": `Bearer ${process.env.TIPOCHAT_API_KEY}`,
    "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify({ model: "tipo-text", input: "Resume este texto: …", max_output_tokens: 180 }),
});
const body = await response.json();
if (!response.ok) throw new Error(body.error?.code || "tipochat_error");
console.log(body.output_text);

PHP (cURL)

<?php
$curl = curl_init("https://api.tipochat.co.mz/v1/responses");
curl_setopt_array($curl, [CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POSTFIELDS => json_encode(["model" => "tipo-text", "input" => "Escreve uma saudação curta."]),
  CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("TIPOCHAT_API_KEY"),
    "Content-Type: application/json", "Idempotency-Key: " . bin2hex(random_bytes(16))]]);
$body = curl_exec($curl); $status = curl_getinfo($curl, CURLINFO_RESPONSE_CODE); curl_close($curl);
if ($status < 200 || $status >= 300) throw new RuntimeException($body ?: "TipoChat request failed");
echo json_decode($body, true)["output_text"];

Erros e repetição segura

HTTP / códigoCausa provávelAção
400 invalid_requestCorpo, limite ou modelo inválido.Corrija o pedido e use outra chave.
401 invalid_api_keyChave ausente, expirada, revogada ou sem escopo.Verifique-a no servidor.
402 insufficient_balanceSaldo insuficiente.Aguarde uma recarga validada.
409 idempotency_key_reusedChave repetida com outro corpo.Use chave nova.
409 request_in_progressOperação original em curso.Aguarde e repita a mesma chave.
502 provider_errorFornecedor indisponível.Retry exponencial após erro final.
503 service_unavailableManutenção ou segurança.Consulte o estado.

A mesma chave com o mesmo corpo devolve a resposta guardada; com corpo diferente devolve 409. Use x-request-id para diagnóstico.

Preços e pagamentos

ProdutoUnidadePreço públicoEstado
tipo-textTokens de entrada e saídaDefinido no contrato/piloto e no price_book ativoPiloto fechado

A cobrança reserva saldo antes da chamada e liquida apenas o uso devolvido. Recargas M-Pesa, e-Mola e mKesh serão publicadas somente depois de uma transação real reconciliada.

Sandbox

Após a publicação técnica, uma chave de projeto test devolve resposta simulada pela mesma rota, com billing.mode = "sandbox" e charged_micro_mzn = 0. O sandbox não chama a OpenAI, não reserva saldo e mantém a idempotência por 24 horas.

Alterações

4 de agosto de 2026: primeira versão pública da documentação; texto síncrono em piloto fechado.

Esta página descreve o estado atual; não substitui condições comerciais ou de proteção de dados assinadas.