Produção ou desenvolvimento
A conta tem dois tipos de chave, na mesma tela e para a mesma URL. O que muda é o que a chamada faz:
| Ponto | Desenvolvimento | Produção |
|---|---|---|
| Prefixo | afd_test_pk_… | afd_live_pk_… |
| O que faz | Simula a resposta, no formato real. Nunca cobra. | Executa e cobra só resposta 2xx. |
dev_mode | Obrigatório: sem ele, 403. | Proibido: com ele, 400. |
| Limite por minuto | O menor entre o da rota e 120. | O da rota. |
Criar a chave
- Abra Chaves de API no painel e escolha o ambiente: Produção ou Desenvolvimento.
- Clique em Criar chave.
- Dê um nome que diga onde ela vai rodar —
checkout-web,erp-noturno. Uma chave por integração. - Escolha o Vínculo: Conta inteira, quando o header
X-Project-Idescolhe o projeto em cada chamada, ou Somente o projeto, quando a integração é de um cliente só. - Clique em Criar chave.

Guardar o segredo
O par tem uma chave pública e um segredo. O segredo aparece uma única vez, logo depois de criar: a ApiForDevs guarda só o hash dele, e nem o suporte consegue recuperá-lo.

Fazer a primeira chamada
O par vai em HTTP Basic (chave_pública:segredo) e o projeto no header X-Project-Id. Sem o header, vale o projeto padrão; com a chave vinculada a um projeto, vale o dela. O ping passa por todo o caminho — chave, projeto, cota e saldo — sem executar serviço.
curl 'https://api.apifordevs.com/api/v1/ping/billable?dev_mode=true&summary=true' \
-u "afd_test_pk_...:$APIFORDEVS_TEST_SECRET" \
-H 'X-Project-Id: proj_...'
import os
import requests
response = requests.get(
"https://api.apifordevs.com/api/v1/ping/billable",
params={"dev_mode": "true", "summary": "true"},
auth=("afd_test_pk_...", os.environ["APIFORDEVS_TEST_SECRET"]),
headers={"X-Project-Id": "proj_..."},
timeout=30,
)
print(response.status_code, response.json())
Resposta esperada, resumida — em Desenvolvimento, billable é false e o preço é zero:
{
"success": true,
"code": 200,
"errors": [],
"header": {
"service": "platform/ping",
"billable": false,
"dev_mode": true,
"price": "0.000000",
"log_id": "01a07159-..."
},
"data_count": 1,
"data": [{"pong": true, "service": "platform/ping", "project": "proj_..."}]
}
Rotacionar e revogar
| Ponto | Rotacionar | Revogar |
|---|---|---|
| Quando | Troca periódica, saída de alguém do time. | O segredo vazou. |
| O que acontece | Nasce um par novo, com o mesmo ambiente e restrições. O atual continua valendo por 24 horas. | A chave para de autenticar na hora. Não tem volta. |
| O que fazer | Trocar o segredo no servidor dentro das 24 horas. | Criar outra chave e trocar no servidor. |
Erros comuns
| Status · código | O que aconteceu | Como resolver |
|---|---|---|
401 unauthorized | Chave pública ou segredo errados, ou o par não foi em Basic. | Confira o par e o -u chave:segredo. |
403 test_key_cannot_run_live | Chave de Desenvolvimento sem dev_mode=true. | Envie dev_mode=true ou use a de Produção. |
400 live_key_cannot_use_dev_mode | Chave de Produção com dev_mode=true. | Tire o dev_mode. |
400 bad_request | A credencial está travada em outro projeto. | Mande o projeto da chave ou não mande o header. |
403 ip_not_allowed | O IP do servidor não está na lista do projeto. | Inclua o IP em Projetos. |
429 rate_limit_exceeded | Limite por minuto da chave naquela rota. | Espere o tempo indicado e reduza a taxa. |
Cada conta tem até 25 chaves ativas por ambiente. Chegou ao teto? Revogue as que não usa.
Respostas rápidas
Não dá: só o hash fica guardado. Rotacione a chave — a atual vale mais 24 horas — e salve o novo segredo.
Desenvolvimento simula com `dev_mode=true` e nunca cobra; Produção executa e cobra só resposta 2xx. A URL é a mesma.
Quando a integração é de um cliente ou produto só: a chave passa a usar o projeto dela e recusa outro `X-Project-Id`.