O que é
Este guia é para quem vai construir alguma coisa em cima do Symphony: um script, um backend, uma automação, um assistente interno, um agente que roda sozinho. Ele parte do princípio de que você sabe programar, mas não tem acesso ao código do Symphony. Tudo o que está aqui você consegue fazer só com a sua chave de API e um cliente HTTP. Se você quer apenas o passo a passo rápido para gerar a chave e fazer a primeira chamada, comece por Conectar via API e volte aqui quando for montar o projeto de verdade.openai (Python, Node, LangChain, LlamaIndex, Vercel AI SDK…), você troca a URL e a chave e o resto do código continua igual. A diferença é que passa a usar os modelos, os agentes e as bases de conhecimento da sua empresa, com o consumo controlado pela sua organização.Pré-requisitos
- Conta ativa no AI Symphony.
- Uma chave de API (começa com
sk-). - O ID da sua empresa, para o header
X-Enterprise-Id. - Um cliente HTTP qualquer (cURL,
requests,fetch, Postman) ou uma biblioteca compatível com OpenAI.
1. Preparando o acesso
1.1 Gerar a sua chave de API
Clique no seu nome de usuário
Abra as chaves de API
Gere e copie a chave
sk-.1.2 Descobrir o ID da sua empresa
O Symphony atende várias empresas, e cada uma tem o próprio catálogo de modelos, agentes e bases de conhecimento. Como a chave de API não carrega essa informação, você precisa dizer em qual empresa está trabalhando, pelo header:1.3 Os três headers que você vai usar sempre
https://symphony.fcamara.com
2. Sua primeira chamada
O que mais dá para mandar
stop, outros só aceitam a temperatura padrão. Quando isso acontece, o Symphony devolve uma mensagem explicando exatamente qual parâmetro incomodou.3. Descobrindo os modelos e agentes que você pode usar
Nunca chute o valor demodel. Os identificadores são definidos pela sua empresa e mudam de ambiente para ambiente.
- Ela já vem filtrada pelo que a sua conta pode usar. Modelo desativado, agente que ninguém compartilhou com você e modelo fora do catálogo da empresa simplesmente não aparecem. Se algo está na sua tela mas não está aqui, o problema quase sempre é o
X-Enterprise-Id. - Agentes aparecem junto com os modelos. Todo item que tem
info.base_model_idé um agente criado na plataforma. Usar um agente é o atalho mais poderoso da API: o prompt de sistema, as bases de conhecimento e as ferramentas configuradas nele são aplicados automaticamente, sem você mandar nada além domodel. - Copie o
idexatamente como veio. Usar o nome do modelo no fornecedor original (gemini-2.5-pro) em vez do identificador do Symphony (FC.gemini-2.5-pro) é a causa mais comum de erro 404.
4. Conectando o seu projeto com uma biblioteca pronta
Como a API é compatível com a da OpenAI, você não precisa escrever cliente HTTP na mão. Aponte abase_url para https://symphony.fcamara.com/api: a biblioteca acrescenta /chat/completions sozinha.
No VS Code / JetBrains
Se o seu “projeto” é programar com assistência de IA no editor, não precisa de código: veja Plug-in para IDE.5. Receitas de projeto
5.1 Usar um agente da empresa como motor do seu produto
É a receita mais subestimada. Em vez de manter um prompt gigante dentro do seu código, crie um agente na interface do Symphony, com prompt de sistema, base de conhecimento e ferramentas, e chame-o peloid:
5.2 Assistente com memória de conversa
A API é sem estado por padrão: cada chamada é independente. Para manter contexto, mande o histórico:5.3 Extração de dados estruturados
Quando você precisa de JSON confiável em vez de texto, useresponse_format:
5.4 Perguntas e respostas sobre os documentos da empresa (RAG)
Crie a base de conhecimento pela interface (é mais simples) e depois use oid dela nas suas chamadas. Veja a seção 7. Trabalhando com documentos e bases de conhecimento.
5.5 Deixar o modelo chamar funções do seu sistema
O padrão de function calling funciona igual ao da OpenAI: você descreve as funções, o modelo devolvetool_calls, o seu código executa e devolve o resultado como uma mensagem de papel tool.
tools desta receita são funções do seu sistema, que só o seu código sabe executar.5.6 Processamento em lote
Para classificar, resumir ou traduzir muitos itens:- Limite a concorrência. Comece com 3 a 5 requisições em paralelo e aumente devagar, observando erros
429. - Salve o progresso a cada item, para poder retomar de onde parou.
- Faça retry só nos erros certos (veja a seção 9. Erros).
- Acompanhe o consumo em
GET /api/v1/consumption/me. Um lote grande pode consumir o seu limite mensal antes de terminar.
6. Respostas em tempo real (streaming)
Com"stream": true, a resposta chega em pedaços conforme é gerada. É o que dá a sensação de “digitando” nas interfaces de chat.
data: {...}, encerrada por data: [DONE].
7. Trabalhando com documentos e bases de conhecimento
7.1 Enviar um documento junto com a pergunta
Suba o arquivo
Espere o processamento terminar
processing:Anexe o arquivo à pergunta
7.2 Usar uma base de conhecimento
Bases de conhecimento servem para o caso oposto: muito conteúdo, do qual só os trechos relevantes devem entrar em cada pergunta. Crie a base pela interface (Base de conhecimento), copie oid dela e use:
GET /api/v1/knowledge/list/compact (veja a Referência da API).
Se você usa um agente que já tem base configurada, não precisa mandar files: ele traz a base junto.
8. Mantendo o histórico da conversa
Por padrão nada é gravado: você manda o histórico a cada chamada e o Symphony não guarda nada. Se você quiser que as conversas do seu projeto apareçam no histórico da plataforma (para auditoria, para o usuário continuar a conversa pela interface, ou só para não ter que gerenciar histórico), crie um chat e reutilize ochat_id:
chat_id e apenas a nova pergunta do usuário (nenhuma mensagem de papel assistant no array), o Symphony recupera o histórico gravado e o coloca antes da sua mensagem. Ou seja: dá para manter uma conversa longa mandando só a pergunta nova.
Duas condições para isso funcionar:
- Se o seu array já contém alguma mensagem
assistant, o Symphony entende que você está gerenciando o histórico e não injeta nada. - Numa conversa nova, ainda sem nenhuma resposta gravada, também não há o que injetar.
9. Erros: como interpretar e o que fazer
As respostas de erro trazem um código estável, além do texto. Dependendo do endpoint, o código vem emerror.code ou em detail.code:
O que cada código de status significa aqui
Códigos que você mais vai encontrar
Política de retry
- Repita em
429e5xx, com backoff exponencial e um pouco de aleatoriedade, respeitando o cabeçalhoRetry-Afterquando ele vier. - Nunca repita
400,401,402,403,404e409. Nenhum deles se resolve sozinho, e insistir só queima a sua cota de requisições.
10. Limites de uso
São três limites diferentes, e confundi-los leva a retry inútil:1. Limite de requisições (429 com Retry-After)
1. Limite de requisições (429 com Retry-After)
X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset para você se orientar. Como o limite é por IP, várias integrações saindo pela mesma rede dividem a mesma cota. Espere e tente de novo.2. Cota da empresa (429, com quota_exceeded no corpo)
2. Cota da empresa (429, com quota_exceeded no corpo)
3. Seu limite de consumo (402)
3. Seu limite de consumo (402)
402. Só um administrador aumentando o seu limite, ou a virada do mês.11. Boas práticas
Faça
- Guarde a chave em variável de ambiente ou cofre de segredos.
- Use sempre HTTPS.
- Peça uma conta técnica dedicada ao administrador, para cada integração. Isso evita que regenerar a sua chave pessoal derrube a automação, e mantém o consumo do projeto separado do seu uso individual nos relatórios da empresa.
- Fixe o
X-Enterprise-Idpor configuração, nunca deduzido em tempo de execução. - Chame
GET /api/modelsuma vez na inicialização e valide que o modelo que você espera existe. Falhar no start é muito melhor que falhar no meio de um lote. - Registre o
request_idde toda resposta de erro. - Meça o consumo antes de escalar o volume.
Não faça
- Não coloque a chave em código que roda no navegador. Ela dá acesso total à sua conta, sem restrição de origem ou escopo. Se o seu projeto tem front-end, a chave fica no seu backend, que faz a chamada.
- Não versione a chave em repositório, nem a coloque em URL, log ou parâmetro de query.
- Não repita requisições que falharam com erro
4xxdeterminístico. - Não trate o
200 OKdo upload de arquivo como “pronto para usar”. - Não assuma que um modelo que funciona hoje vai existir amanhã: o catálogo é gerenciado pela sua empresa.
12. Perguntas frequentes
Preciso mesmo do X-Enterprise-Id?
Preciso mesmo do X-Enterprise-Id?
Preciso do token CSRF?
Preciso do token CSRF?
Minha chave expira?
Minha chave expira?
Posso ter mais de uma chave, uma para cada projeto?
Posso ter mais de uma chave, uma para cada projeto?
A chave tem permissões próprias?
A chave tem permissões próprias?
Qual modelo devo usar?
Qual modelo devo usar?
id retornados por GET /api/models. Se existe um agente da empresa para o seu caso de uso, prefira o agente: ele já vem com prompt, base e ferramentas prontos.Consigo usar as bibliotecas e frameworks de IA que já conheço?
Consigo usar as bibliotecas e frameworks de IA que já conheço?
openai, LangChain, LlamaIndex, Vercel AI SDK, Continue.dev e afins.Como sei quanto estou gastando?
Como sei quanto estou gastando?
GET /api/v1/consumption/me. Os relatórios completos ficam com o administrador da empresa.Existe documentação interativa (Swagger)?
Existe documentação interativa (Swagger)?
Recebo 401 mesmo com a chave que acabei de copiar.
Recebo 401 mesmo com a chave que acabei de copiar.
Authorization: Bearer sk-..., sem aspas, sem espaço extra e com a chave completa. Confira também se ninguém gerou uma chave nova na mesma conta.A resposta ignora o arquivo que anexei.
A resposta ignora o arquivo que anexei.
GET /api/v1/files/{id} até o status ficar ready.13. Limitações conhecidas
- Uma única chave por usuário, sem nome, sem escopo próprio e sem rotação sem interrupção. Gerar uma nova derruba a anterior imediatamente.
- A chave equivale à sua conta inteira. Não há credencial de serviço com permissões reduzidas.
- O limite de requisições é por IP, não por chave. Integrações que saem pelo mesmo IP dividem a cota.
- Não há notificação (webhook) de conclusão para quem consome a API: a integração é síncrona ou por streaming.
- Não existe biblioteca oficial do Symphony. Use uma compatível com OpenAI.
- Não há Swagger em produção.
- O catálogo de modelos é gerenciado pela sua empresa e pode mudar sem aviso para quem integra.
- Algumas funcionalidades dependem de permissão (busca na web, geração de imagem, interpretador de código) e podem estar desligadas para a sua conta.
14. Checklist antes de colocar em produção
- Chave em variável de ambiente ou cofre, nunca no código nem no front-end
- Idealmente, uma conta técnica dedicada para esta integração
-
X-Enterprise-Idvindo de configuração, presente em todas as chamadas - Modelo validado na inicialização com
GET /api/models - Tratamento de erro pelo
code(emerror.codeoudetail.code), não pelo texto - Retry com backoff apenas em
429e5xx -
request_idgravado nos seus logs de erro - Timeout do cliente compatível com respostas longas
- Se usa streaming:
[DONE], eventos partidos e erro depois do200tratados - Se usa arquivos: espera o status
readyantes de anexar - Se a conversa é longa: estratégia definida para o histórico não estourar a janela
- Consumo monitorado em
GET /api/v1/consumption/me
Documentos relacionados
- Conectar via API: início rápido
- Referência da API: todos os endpoints disponíveis, com parâmetros e respostas
- Erros e limites: catálogo completo de códigos de erro e limites de uso
- Ambientes e suporte: produção, homologação e como pedir ajuda
- Plug-in para IDE: IA no seu editor, sem escrever integração
- Agentes: criar o agente que o seu projeto vai chamar
- Base de conhecimento: preparar os documentos para RAG
- Ferramentas (Tools): ferramentas executadas pela plataforma
- Configurações da conta: onde fica a sua chave de API