Make your first API call
Authenticate, list your locations, read the response envelope, page through results, and learn how IDs work. About five minutes.
This guide assumes you have an account and an API key from
Getting started. Every request runs against the live
API at https://listingsapi.com. There is no sandbox, so a write call changes
real data.
1. Set your API key
Copy the key from API Keys in the dashboard and export it once in your shell:
export LISTINGSAPI_KEY="your-api-key"Keys carry an access level. A Read key covers every lookup and report in
these guides. Creating or updating anything, replying to a review, or
publishing a post needs a Write key. Sending a Read key to a write
endpoint returns HTTP 400 with error code SY90016.
2. List your locations
Locations are the master record everything else hangs off, so the first call
is to list them. The REST header is the literal word API, a space, then the
key.
curl "https://listingsapi.com/api/v4/locations?first=5" \-H "Authorization: API $LISTINGSAPI_KEY"3. Read the envelope
The REST API returns a GraphQL-style envelope, so the payload is nested rather
than a bare array. The operation name sits under data, list results are a
connection of edges, and each edge wraps a node:
{ "data": { "allLocations": { "edges": [ { "cursor": "TG9jYXRpb246MTgwMDI4OQ==", "node": { "id": "TG9jYXRpb246MTgwMDI4OQ==", "databaseId": 1800289, "name": "Jenny Home", "city": "Austin", "stateIso": "TX", "approved": "APPROVED", "subCategoryName": "Restaurants" } } ], "pageInfo": { "hasNextPage": false, "endCursor": "TG9jYXRpb246MTgwMDI4OQ==" } } }}The SDKs unwrap this for you: Python hands back an iterable page of objects,
and Node hands back locations plus pageInfo. When you call REST directly,
read data.allLocations.edges[].node.
4. Page through results
List endpoints on locations and reviews use cursor pagination. Ask for a page
with first, then pass pageInfo.endCursor back as after to get the next
one. The SDKs can walk every page for you.
curl "https://listingsapi.com/api/v4/locations?first=50&after=TG9jYXRpb246MTgwMDI4OQ==" \-H "Authorization: API $LISTINGSAPI_KEY"Not every endpoint paginates this way. Connected accounts, duplicate rollups,
and posts use plain page and perPage numbers with a records array. Each
guide says which style its endpoints use.
5. Two kinds of ID
Every record has two identifiers. id is a base64 string such as
TG9jYXRpb246MTgwMDI4OQ==, which decodes to Location:1800289. databaseId
is the plain number, 1800289.
Store the base64 id. Every write endpoint wants it, and it is what appears
in webhook payloads. Many read endpoints that take a location in the path also
accept the raw number, and both SDKs accept either form and encode for you.
6. Errors and rate limits
Failures return the matching HTTP status with an errors array. The message
starts with an SY code you can look up in Error codes:
{ "data": { "allLocations": null }, "errors": [{ "message": "SY90005: Invalid Token" }]}Rate limits are per plan and counted per minute, hour, and day. Launch allows
10 requests a minute. When you exceed a limit the API answers 429 with a
Retry-After header; wait that many seconds rather than retrying at once. The
SDKs raise RateLimitError and expose the same value. Full detail is in
Rate limits.
Next steps
- Choose how to integrate: REST, SDK, MCP, or webhooks, and when each fits.
- Add a location: your first write call.
- Connect Google and import locations: bring in profiles you already manage.