Provider API documentation
Every endpoint, field, response and error on one page. Examples use curl and JSON.
Getting started
JSON over HTTPS. Send one call per client when its switch changes. Every call is safe to repeat.
Base URLhttps://api.anuto.app/v1
Endpoints
| Endpoint | Meaning |
|---|---|
POST/provider/clients | Activate or update a client |
GET/provider/clients/{externalId} | Status of one client |
DELETE/provider/clients/{externalId} | Deactivate a client and withdraw its listings |
POST/provider/clients/{externalId}/changes | Tell Anuto that a client's stock changed |
GET/provider/me | Check the key: provider name, formats and status |
Retries are safe
Calls with the same externalId update that client. They never create duplicates, so you can retry after a timeout.
Authentication
Send your key in the Authorization header of every request. Keys start with anp_, are shown once, and can be rotated on the API keys page.
Authorization: Bearer anp_…Activate or update a client
POST/provider/clients
Send the client's details when its switch turns on. Repeat the call with the same externalId to update that client.
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
}'| Field | Required | Meaning |
|---|---|---|
externalId | Required | Your ID for this client (for example their account or company ID in your software). 1 to 100 characters. |
name | Required | Business name (up to 120 characters). |
email | Required | Client's contact email. Used to create their Anuto account when they are new to Anuto. |
country | Required | Two-letter ISO country code, for example ES. |
phone | Optional | Contact phone (up to 40 characters). |
website | Optional | Client website, http or https. |
format | Optional | Only needed if your access covers several integrations. |
connection | Optional | Connection fields for your integration, if any. We tell you which ones when we approve your access. |
listingsCount | Optional | Number of listings the client has, for planning. |
test | Optional | Validate and check the connection only. Nothing is created. |
Response
Each call returns the client's status, listing counts and plan.
{
"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"
}Get the status of a client
GET/provider/clients/{externalId}
Returns the client's current status, listing counts and plan, in the same shape as the activate response.
curl https://api.anuto.app/v1/provider/clients/12345 \
-H "Authorization: Bearer $ANUTO_KEY"Deactivate a client
DELETE/provider/clients/{externalId}
Deleting a client turns it off and withdraws its listings from Anuto.
curl -X DELETE https://api.anuto.app/v1/provider/clients/12345 \
-H "Authorization: Bearer $ANUTO_KEY"Notify changes
POST/provider/clients/{externalId}/changes
Call it whenever a client's stock changes: a listing is created, updated, sold or deleted. We re-sync that client within minutes instead of waiting for the regular sync every few hours. Calls within 5 minutes are merged, so calling it on every change is fine.
- The body is optional. Add itemIds to name up to 100 of your property or product IDs that changed.
- A successful call returns 202. nextSyncAt is the time (UTC) when the re-sync is scheduled.
- For an inactive client the response has queued: false and a message. Nothing is queued.
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"
}Check your key
GET/provider/me
Returns your provider name, the formats your access covers and the key's status. Call it first to confirm that a new key works.
curl https://api.anuto.app/v1/provider/me \
-H "Authorization: Bearer $ANUTO_KEY"{
"providerId": "Xw3kQ9mZr2LpT7vNa4Bc",
"name": "Your software company",
"formats": ["…"],
"status": "approved"
}Test mode
Set test to true to validate the body and check the connection. Nothing is created; you get the status it would have and the checks.
{
"externalId": "12345",
"name": "Casa Sol Real Estate",
"email": "[email protected]",
"country": "ES",
"test": true
}
{
"ok": true,
"wouldBe": "active",
"checks": { "connection": "ok", "owner": "new_account" }
}Client statuses
- activeLive and syncing.
- pendingThe connection is not working yet, so nothing is published.
- reviewAnuto is reviewing it, because this new client's email already belongs to another Anuto account.
- inactiveTurned off by you, or removed by Anuto.
Errors
Failed calls return JSON with statusCode, code and message. Branch on code; message is for people.
{
"statusCode": 404,
"code": "PROVIDER_CLIENT_NOT_FOUND",
"message": "No client with externalId 12345"
}| Code | HTTP | Meaning |
|---|---|---|
PROVIDER_KEY_INVALID | 401 | Missing, malformed or unknown key. |
PROVIDER_REVOKED | 403 | Your provider access was revoked by Anuto. |
PROVIDER_FORMAT_REQUIRED | 400 | Your software has several formats, so the body needs format. |
PROVIDER_FORMAT_NOT_ALLOWED | 400 | The format is not one of your approved formats. |
PROVIDER_CLIENT_NOT_FOUND | 404 | No client with that externalId for your provider. |
Rate limits
When you go over the limit you get 429 with a Retry-After header. Wait that many seconds, then retry.
Questions about the API or your access? [email protected]