Troubleshooting
Fixes for the problems integrations with the Vestta API run into most often.
On this page
- Every request returns 401
- A working key gets 401 "Lack of permissions"
- A property is in Vestta but not in the API
- A property has no address
- Rent prices are missing or price is 0
- A map filter returns nothing, or everything
- A rental lead returns 200 but does not appear
- Create an inquiry returns 409
- A lead request fails with 422 for the phone
- A rental lead fails with 500
- The lead did not get a WhatsApp message
- Requests from the browser
Every request returns 401
Read the detail of the response — it names the cause. The most common ones:
API key required— the header did not reach the API. Check its name (X-Api-Key), and that no proxy, gateway or HTTP library drops custom headers.Authorization: Beareris not accepted.Invalid API key format— the value was cut, or includes quotes or whitespace. Environment files often add quotes; print the length of the value you send.API key expiredorAPI key is revoked— create a new key or reactivate it in Settings → API.
A working key gets 401 "Lack of permissions"
The key is valid but lacks the endpoint's scope. Call Retrieve key context to see the scopes it has. Scopes are fixed at creation, so create a new key with the right ones — see scopes.
A property is in Vestta but not in the API
The API only returns the public catalogue. Check in Vestta that the property:
- is marked as public;
- is not sold, rented or withdrawn;
- belongs to the workspace of the key you are using.
The same rules make Retrieve a property return 404.
A property has no address
address, postal_code and the coordinates follow the property's address privacy setting: with a hidden location only city, province and country are returned, and with an approximate location the coordinates are rounded to about 1 km. See Address privacy.
Rent prices are missing or price is 0
price is the sale price. Monthly rent and transfer prices live in specs.price_calc.price_alq and specs.price_calc.price_trasp. Filter with operation=alquiler to make min_price, max_price and sort use the rent. See Operations and prices.
A map filter returns nothing, or everything
- If
locationsis not valid JSON, it is ignored and you get every property. Checkfilters.locationsin the response: it lists the areas that were applied. - Areas need a
geometry(or"type": "point"):{ "name": "Madrid" }is ignored. Use thecityfilter for names. - Properties with a hidden location never match an area, and approximate ones are matched by their rounded coordinates.
- Coordinates are
lat/lngin degrees; swapping them puts the area in another part of the world.
A rental lead returns 200 but does not appear
Ingest a rental lead does not create a lead when the workspace already has one with the same phone, and still returns 200. Search for the phone in Vestta: the existing lead is the one the agency will work with.
Create an inquiry returns 409
A lead with the same primary phone already exists in the workspace. The contact is already in Vestta; do not retry.
A lead request fails with 422 for the phone
Send numbers in international format, such as +34600111222. Numbers without a prefix are read as Spanish, so foreign numbers need their prefix.
A rental lead fails with 500
Check search.budget: it must be a whole number (1200) or a range of whole numbers (900-1200). Values like 1.200 or 1200€ cause a server error.
The lead did not get a WhatsApp message
The automatic first message is only sent when the workspace has WhatsApp connected in Vestta, and only once per lead. Lead creation does not depend on it.
Requests from the browser
The API answers cross-origin requests, but calling it from front-end code exposes your key to every visitor. Send requests from your server. For public forms, post to your backend and call Create an inquiry from there.