Documentação da Provider API
Todos os endpoints, campos, respostas e erros numa só página. Os exemplos usam curl e JSON.
Primeiros passos
JSON sobre HTTPS. Envie uma chamada por cliente sempre que o interruptor mudar. Cada chamada pode ser repetida sem risco.
URL basehttps://api.anuto.app/v1
Endpoints
| Endpoint | Significado |
|---|---|
POST/provider/clients | Ativar ou atualizar um cliente |
GET/provider/clients/{externalId} | Estado de um cliente |
DELETE/provider/clients/{externalId} | Desativar um cliente e retirar os anúncios |
POST/provider/clients/{externalId}/changes | Avisar a Anuto de que o stock de um cliente mudou |
GET/provider/me | Verificar a chave: nome do fornecedor, formatos e estado |
Repetir é seguro
As chamadas com o mesmo externalId atualizam esse cliente. Nunca criam duplicados, por isso pode repetir após um timeout.
Autenticação
Envie a sua chave no cabeçalho Authorization de cada pedido. As chaves começam por anp_, são mostradas uma única vez e podem ser renovadas na página de chaves de API.
Authorization: Bearer anp_…Ativar ou atualizar um cliente
POST/provider/clients
Envie os dados do cliente quando o interruptor for ligado. Repetir a chamada com o mesmo externalId atualiza esse cliente.
curl -X POST https://api.anuto.app/v1/provider/clients \
-H "Authorization: Bearer $ANUTO_KEY" \
-H "Content-Type: application/json" \
-d '{
"externalId": "12345",
"name": "Casa Sol Real Estate",
"email": "[email protected]",
"phone": "+34 600 000 000",
"website": "https://casasol.es",
"country": "ES",
"listingsCount": 85
}'| Campo | Obrigatório | Significado |
|---|---|---|
externalId | Obrigatório | O seu ID para este cliente (por exemplo, o ID da conta ou da empresa no seu software). De 1 a 100 caracteres. |
name | Obrigatório | Nome da empresa (até 120 caracteres). |
email | Obrigatório | Email de contacto do cliente. Serve para criar a conta Anuto dele, se for novo na Anuto. |
country | Obrigatório | Código de país ISO de duas letras, por exemplo ES. |
phone | Opcional | Telefone de contacto (até 40 caracteres). |
website | Opcional | Site do cliente, http ou https. |
format | Opcional | Só é necessário se o seu acesso abranger várias integrações. |
connection | Opcional | Campos de ligação para a sua integração, se existirem. Dizemos quais quando aprovarmos o seu acesso. |
listingsCount | Opcional | Número de anúncios do cliente, para planeamento. |
test | Opcional | Valida apenas os dados e verifica a ligação. Nada é criado. |
Resposta
Cada chamada devolve o estado do cliente, o número de anúncios e o plano.
{
"externalId": "12345",
"clientId": "Xw3kQ9mZr2LpT7vNa4Bc",
"status": "active",
"shopUrl": "https://es.anuto.app/@casa-sol",
"listings": { "active": 10, "waiting": 0, "planWaiting": 75 },
"plan": { "tier": "free", "maxActive": 10, "freeMaxActive": 10 },
"upgradeUrl": "https://es.anuto.app/user/manage/plan",
"lastSyncAt": "2026-10-08T09:30:00.000Z"
}Consultar o estado de um cliente
GET/provider/clients/{externalId}
Devolve o estado atual do cliente, o número de anúncios e o plano, na mesma forma da resposta à ativação.
curl https://api.anuto.app/v1/provider/clients/12345 \
-H "Authorization: Bearer $ANUTO_KEY"Desativar um cliente
DELETE/provider/clients/{externalId}
Eliminar um cliente desativa-o e retira os seus anúncios da Anuto.
curl -X DELETE https://api.anuto.app/v1/provider/clients/12345 \
-H "Authorization: Bearer $ANUTO_KEY"Avisar alterações
POST/provider/clients/{externalId}/changes
Chame-o sempre que o stock de um cliente mudar: um anúncio é criado, alterado, vendido ou eliminado. Voltamos a sincronizar esse cliente em minutos, em vez de esperar pela sincronização regular a cada poucas horas. As chamadas feitas em 5 minutos são agrupadas, por isso pode chamá-lo em cada alteração.
- O corpo é opcional. Acrescente itemIds para indicar até 100 IDs dos seus imóveis ou produtos que mudaram.
- Uma chamada bem-sucedida devolve 202. nextSyncAt é a hora (UTC) em que a nova sincronização fica agendada.
- Para um cliente inativo, a resposta traz queued: false e uma mensagem. Nada fica em fila.
curl -X POST https://api.anuto.app/v1/provider/clients/12345/changes \
-H "Authorization: Bearer $ANUTO_KEY" \
-H "Content-Type: application/json" \
-d '{ "itemIds": ["123", "456"] }'{
"queued": true,
"nextSyncAt": "2026-10-08T12:00:00Z"
}Verificar a sua chave
GET/provider/me
Devolve o nome do seu fornecedor, os formatos abrangidos pelo seu acesso e o estado da chave. Chame-o primeiro para confirmar que uma nova chave funciona.
curl https://api.anuto.app/v1/provider/me \
-H "Authorization: Bearer $ANUTO_KEY"{
"providerId": "Xw3kQ9mZr2LpT7vNa4Bc",
"name": "Your software company",
"formats": ["…"],
"status": "approved"
}Modo de teste
Defina test como true para validar os dados e verificar a ligação. Nada é criado: recebe o estado que teria e o resultado das verificações.
{
"externalId": "12345",
"name": "Casa Sol Real Estate",
"email": "[email protected]",
"country": "ES",
"test": true
}
{
"ok": true,
"wouldBe": "active",
"checks": { "connection": "ok", "owner": "new_account" }
}Estados do cliente
- activeAtivo e sincronizado.
- pendingA ligação ainda não funciona, por isso nada é publicado.
- reviewA Anuto está a analisar, porque o email deste novo cliente já pertence a outra conta Anuto.
- inactiveDesativado por si ou removido pela Anuto.
Erros
As chamadas com falha devolvem JSON com statusCode, code e message. Decida com base em code; message é para pessoas.
{
"statusCode": 404,
"code": "PROVIDER_CLIENT_NOT_FOUND",
"message": "No client with externalId 12345"
}| Código | HTTP | Significado |
|---|---|---|
PROVIDER_KEY_INVALID | 401 | Chave em falta, mal formada ou desconhecida. |
PROVIDER_REVOKED | 403 | O acesso do seu fornecedor foi revogado pela Anuto. |
PROVIDER_FORMAT_REQUIRED | 400 | O seu software tem vários formatos, por isso o corpo precisa de format. |
PROVIDER_FORMAT_NOT_ALLOWED | 400 | O formato não está entre os formatos aprovados para si. |
PROVIDER_CLIENT_NOT_FOUND | 404 | Não existe cliente com esse externalId no seu fornecedor. |
Limites de pedidos
Ao ultrapassar o limite recebe 429 com o cabeçalho Retry-After. Espere esse número de segundos e tente de novo.
Dúvidas sobre a API ou sobre o seu acesso? [email protected]