Ir para o conteúdo

Primeiros passos

Da chave de API à primeira resposta do modelo, com o código pronto em três linguagens.

Atualizado em 09 de ago. de 2026

Da chave até a primeira resposta de um modelo. Se você já usa a API da OpenAI, são duas linhas de mudança; se está começando do zero, dá para terminar em cinco minutos.

O que você precisa

  • Uma conta em platform.hinow.ai e uma chave de API
  • Node.js 18+, Python 3.9+, PHP 8+ ou qualquer cliente HTTP
  • Nada mais: não há SDK próprio para instalar

Prepare seu acesso

Gere uma chave de API ou entre na plataforma para criar sua conta.

A única mudança que importa

A API do HiNow fala o mesmo protocolo da API da OpenAI. Os SDKs oficiais dela funcionam sem adaptação — você só troca o endereço base e a chave:

Valor
Endereço basehttps://api.hinow.ai/v1
CabeçalhoAuthorization: Bearer hi_...
Endpoint de conversaPOST https://api.hinow.ai/v1/chat/completions
Nome do modelohinow/himax, hinow/hinova ou hinow/higenesis

O prefixo hinow/ faz parte do nome

Mandar higenesis em vez de hinow/higenesis devolve 404 model_not_found. É o erro mais comum de quem está começando, e a mensagem não deixa óbvio o que faltou.

Instale o cliente

terminalbash
# Nada a instalar: o fetch já vem no Node 18+.
mkdir meu-app && cd meu-app
echo '{ "type": "module" }' > package.json

# Se preferir o SDK da OpenAI, ele também funciona:
# npm install openai

Faça a primeira chamada

Exporte a chave e rode o arquivo. Ele é completo — não falta nada além da sua chave.

terminalbash
export HINOW_API_KEY="hi_sua_chave_aqui"
primeira-chamada.jsjavascript
const API = 'https://api.hinow.ai/v1/chat/completions';
const KEY = process.env.HINOW_API_KEY;

async function call(body) {
  const response = await fetch(API, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${KEY}` },
    body: JSON.stringify(body),
  });

  // Always read the status before touching the payload. Without this, a 401
  // shows up later as "cannot read properties of undefined".
  if (!response.ok) {
    throw new Error(`HiNow ${response.status}: ${await response.text()}`);
  }
  return response.json();
}

const data = await call({
  model: 'hinow/higenesis',
  messages: [{ role: 'user', content: 'Say hello in one short sentence.' }],
});

console.log(data.choices[0].message.content);

Se deu certo, sai uma frase curta como esta:

saída
Hello! How can I help you today?

Não funcionou? Comece por aqui

Os erros que a API devolve, o que cada um quer dizer e o que fazer.

CódigoO que a API respondeO que resolve
401AUTH_MISSINGFaltou o cabeçalho Authorization na requisição
401AUTH_INVALID_FORMATO cabeçalho existe mas está vazio ou malformado. Use Bearer seguido da chave
401AUTH_TOKEN_INVALIDA chave não existe ou foi revogada. Gere outra no painel
404model_not_foundConfira o prefixo: é hinow/higenesis, não higenesis
400messages is requiredO corpo foi enviado sem o array messages, ou ele veio vazio
429limite de usoReduza a frequência das chamadas ou espere alguns segundos e tente de novo

Confira o status antes de ler a resposta

Se o seu código pular direto para choices[0], um erro 401 aparece como "cannot read properties of undefined" e você vai procurar o problema no lugar errado. Os exemplos acima já checam o status primeiro — mantenha isso.

Mostrando a resposta enquanto ela chega

Numa tela de conversa, esperar a resposta inteira parece lento mesmo quando não é. Com stream: true as primeiras palavras aparecem em uma fração do tempo total, e a percepção muda completamente.

A resposta vem em linhas data: com um pedaço do texto em cada uma, até um data: [DONE] final.

streaming.jsjavascript
const response = await fetch('https://api.hinow.ai/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: `Bearer ${process.env.HINOW_API_KEY}`,
  },
  body: JSON.stringify({
    model: 'hinow/hinova',
    messages: [{ role: 'user', content: 'List three uses for an LLM, one line each.' }],
    stream: true,
  }),
});

if (!response.ok) throw new Error(`HiNow ${response.status}: ${await response.text()}`);

const reader = response.body.getReader();
const decoder = new TextDecoder();
let buffer = '';

while (true) {
  const { done, value } = await reader.read();
  if (done) break;

  buffer += decoder.decode(value, { stream: true });
  const lines = buffer.split('\n');
  buffer = lines.pop();          // the last piece may be an incomplete line

  for (const line of lines) {
    if (!line.startsWith('data: ')) continue;
    const payload = line.slice(6).trim();
    if (payload === '[DONE]') continue;

    const chunk = JSON.parse(payload);
    const piece = chunk.choices[0]?.delta?.content;
    if (piece) process.stdout.write(piece);
  }
}
console.log();

Cuidado com a linha cortada ao meio

Cada pedaço que chega da rede pode terminar no meio de uma linha. Os exemplos em Node e PHP guardam a sobra num buffer e só processam linhas completas — sem isso, o JSON.parse quebra de forma intermitente, e é o tipo de bug que só aparece em produção.

Próximos passos