Como obter uma chave
As chaves de parceiro são emitidas manualmente — não há auto-atendimento. Escreva para [email protected] ou chame no WhatsApp (12) 99687-7222 contando qual integração você quer construir. Você recebe uma chave por integração.
Toda requisição precisa do cabeçalho:
Authorization: Bearer <PARTNER_API_KEY>
Sem a chave, ou com uma chave errada, a resposta é 401 com {"error": "Unauthorized"}.
partner-list-services, partner-list-packages, partner-list-slots) e use reserve: true ao mexer na agenda — a pré-reserva expira sozinha em minutos se você não confirmar. O gateway de pagamento entra em modo sandbox automaticamente quando a chave do Asaas configurada é de teste.
Guia rápido
URL base:
https://kealfidxmdzmskfwhuee.supabase.co/functions/v1
1. Listar os pacotes disponíveis
curl -s https://kealfidxmdzmskfwhuee.supabase.co/functions/v1/partner-list-packages \
-H "Authorization: Bearer $PARTNER_API_KEY"
2. Ver horários livres de um dia
curl -s "https://kealfidxmdzmskfwhuee.supabase.co/functions/v1/partner-list-slots?date=2026-06-15&type=atendimento" \
-H "Authorization: Bearer $PARTNER_API_KEY"
3. Pré-reservar um horário por 15 minutos
curl -s -X POST https://kealfidxmdzmskfwhuee.supabase.co/functions/v1/partner-book-slot \
-H "Authorization: Bearer $PARTNER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"slot_id": "3c4d5e6f-7a8b-4c9d-8e1f-2a3b4c5d6e7f",
"booking_type": "atendimento",
"client_name": "Maria Silva",
"client_phone": "+5511999999999",
"service_type_id": "4d5e6f7a-8b9c-4d0e-9f1a-2b3c4d5e6f70",
"reserve": true,
"ttl_minutes": 15
}'
Fluxo comercial completo
1. GET /partner-list-packages → pacotes disponíveis
2. GET /partner-lookup-client?phone= → cliente já existe?
3. POST /partner-create-client → cria, se não existir
4. POST /partner-create-budget → orçamento + página pública
5. POST /partner-create-charge → cobrança PIX / boleto / cartão
Endpoints especificados
| Método | Caminho | O que faz |
|---|---|---|
| GET | /partner-list-services | Tipos de serviço ativos, em pt/en/es. |
| GET | /partner-list-packages | Pacotes com preços e itens inclusos. |
| GET | /partner-lookup-client | Busca cliente por telefone ou IGSID. |
| POST | /partner-create-client | Cadastra cliente no CRM. |
| POST | /partner-create-budget | Cria orçamento e devolve a URL pública. |
| POST | /partner-create-charge | Gera cobrança no Asaas. |
| GET | /partner-list-slots | Horários livres de uma data. |
| POST | /partner-book-slot | Reserva ou confirma um horário. |
A API tem outros endpoints de parceiro — eventos, grupos, criação e bloqueio de horários — que ainda não estão na especificação OpenAPI. Pergunte por e-mail se precisar de algum deles.
Erros
Todo erro devolve Content-Type: application/json com o corpo:
{ "error": "mensagem descritiva" }
O status HTTP carrega a categoria:
| Status | Significado | O que fazer |
|---|---|---|
400 | Parâmetro inválido ou ausente. | A mensagem nomeia o campo. Corrija e repita. |
401 | Chave ausente ou inválida. | Confira o header Authorization. Não repita sem trocar a chave. |
404 | Recurso não encontrado. | Cliente, pacote ou horário não existe. Releia o catálogo. |
405 | Método HTTP errado. | Veja o método correto na tabela acima. |
409 | Horário não está mais disponível. | Liste os horários de novo e escolha outro. |
422 | Horário não aceita esse tipo de agendamento. | Use um horário com accepted_type compatível. |
500 | Erro interno. | Tente de novo com recuo. Se persistir, escreva para o contato. |
O próprio site também responde em JSON: qualquer caminho inexistente pedido com Accept: application/json devolve 404 com code, message, hint e documentation_url.
Convenções
- Datas em
YYYY-MM-DD; horas emHH:MM:SS, fuso America/Sao_Paulo. - Identificadores são UUID v4.
- Valores são números decimais em reais. Cobranças pelo Asaas só em
BRL. - Idiomas de orçamento:
pt-BR,en,es. - IGSID é o Instagram Scoped ID (15 a 20 dígitos) que a Meta dá a cada pessoa que fala com a conta no Direct — útil para bots.
- Pagamentos confirmados chegam por webhook do Asaas direto no CRM; não faça polling.
Gerar um cliente a partir da spec
Não publicamos um CLI oficial: seriam poucos integradores e um pacote a manter em sincronia com a API. Como a especificação OpenAPI está publicada, você gera o cliente da sua linguagem em um comando — e ele fica sempre alinhado com a API de verdade.
# TypeScript, Python, Go, PHP, Java e outros
npx @openapitools/openapi-generator-cli generate \
-i https://www.thaisalmeida.art/openapi.json \
-g typescript-fetch -o ./thais-client
# ou um CLI pronto, direto da spec
npx @stoplight/prism-cli mock https://www.thaisalmeida.art/openapi.json
Para agentes, a própria spec já basta: aponte a ferramenta de chamada HTTP para /openapi.json e ela descobre endpoints, parâmetros e formato de erro sozinha.
Formatos legíveis por máquina
- /openapi.json — especificação OpenAPI 3.1 desta API.
- /llms.txt — índice do site para agentes, no formato llmstxt.org.
- /partner-api-docs.md — referência completa em Markdown.
- /sitemap.xml e /sitemap-conteudo.xml.
- As páginas principais respondem a
Accept: text/markdownconforme acceptmarkdown.com.