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/clientsActivate 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}/changesTell Anuto that a client's stock changed
GET/provider/meCheck 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_INVALID401Missing, malformed or unknown key.
PROVIDER_REVOKED403Your provider access was revoked by Anuto.
PROVIDER_FORMAT_REQUIRED400Your software has several formats, so the body needs format.
PROVIDER_FORMAT_NOT_ALLOWED400The format is not one of your approved formats.
PROVIDER_CLIENT_NOT_FOUND404No 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]