Choose how to integrate

Compare the REST API, Python and Node SDKs, MCP server, and webhooks based on your application's architecture and integration requirements.

All integration methods use the same API key and base URL: https://listingsapi.com/api/v4. You can use the REST API or an SDK for API requests, webhooks for event-driven updates, and the MCP server to integrate with the help of an AI agent.

1. Pick how you will call the API

REST API. Use the REST API to access all endpoints directly over HTTP. Your application must parse the response, handle both pagination methods, and inspect the errors[] array for API errors.

Python SDK. Install the Python SDK with pip install listingsapi. The SDK provides resource classes through interfaces such as client.locations and client.reviews. It handles cursor pagination with auto_paging_iter(), retries requests that return 429 or 5xx responses, and validates location payloads in locations.add() before sending the API request. Read Python SDK.

Node SDK. Install the Node SDK with npm install listingsapi-js. It requires Node.js 18 or later, includes TypeScript type definitions, and has no runtime dependencies. SDK methods are exposed directly on the client instance, for example client.fetchAllLocations(). Set fetchAll: true to retrieve all paginated results in a single response. Numeric IDs are automatically Base64-encoded before API requests are sent. Read Node SDK.

MCP server. Connect AI clients such as Claude, ChatGPT, Cursor, and Gemini to the ListingsAPI MCP server at https://listingsapi.com/mcp using Streamable HTTP. No local MCP server installation is required. The server exposes tools for searching ListingsAPI documentation, discovering REST endpoints, and executing supported API operations. Authentication uses an API key or OAuth. Open /dashboard/mcp to view client configuration, available MCP tools, and the API key permission level required for each tool. Connect an AI agent with MCP.

Webhooks. Use webhooks with the REST API, SDKs, or MCP server to receive event-driven updates. When a location, listing, review, or post changes, ListingsAPI sends an HTTP POST request to the webhook URL configured for your account. This allows your application to process changes without polling the API for updates. Read Webhooks overview.

2. Understand the authentication model

The REST API and SDKs authenticate requests using an API key. Pass the key in the HTTP Authorization request header using the API authentication scheme:

Authorization: API <YOUR_API_KEY>

API keys have either Read or Write access. A Read key can access read operations, including lookups and reports. A Write key is required for operations that create or update resources. Sending a Read key to a write endpoint returns HTTP 400 with error code SY90016.

API keys are scoped to an account. Requests made with keys from the same account consume the same account-level rate-limit quota.

The MCP server also supports OAuth authentication. MCP clients can authenticate through the browser using OAuth instead of providing an API key. REST API and SDK requests authenticate using the Authorization header. See the Authentication documentation for configuration details.

3. Understand the pagination models

REST list endpoints use either cursor-based or offset-based pagination. The SDKs abstract these pagination models.

Cursor-based endpoints accept first and after. Results are returned through edges[].node, and pageInfo.endCursor provides the cursor for the next request.

Offset-based endpoints accept page and perPage. Results are returned in records[], and pageInfo.totalRecords reports the total number of available records.

StyleParamsPayloadUsed by
Cursorfirst, afteredges[].node, pageInfo.endCursor, pageInfo.hasNextPageLocations, location search, reviews
Offsetpage, perPagerecords[], pageInfo.totalRecords, pageInfo.totalPagesConnected accounts, suggestions, posts, duplicate rollup
NonePlain arrayCountries, subcategories, plan sites, a location's photos

The following examples perform the same list-locations operation using three integration methods. The cURL implementation requires the application to parse the API response structure directly.

List locations
curl "https://listingsapi.com/api/v4/locations?first=5" \-H "Authorization: API $LISTINGSAPI_KEY" # Read data.allLocations.edges[].node, then pass# data.allLocations.pageInfo.endCursor back as ?after= for the next page.

For all integration methods, API errors are returned in the errors[] array, with each error message prefixed by an SY error code. Write requests can return HTTP 200 with success: false, so the response body must be checked before treating the operation as successful.

When the account exceeds its rate limit, the API returns HTTP 429 with a Retry-After header. The Launch plan supports up to 10 requests per minute. See the Error codes and Rate limits documentation for details.

4. Choose between webhooks and polling

Use polling when your application needs resource state on a defined schedule, such as a nightly synchronization of all locations, or when the required event does not have webhook support. Use webhooks when your application needs to process changes as they occur, such as receiving a new review, a listing status change, or a rejected Google post.

Configure one webhook URL per account at /dashboard/webhooks. Each webhook request includes an X-ListingsAPI-Signature header in the following format:

X-ListingsAPI-Signature: sha256=<base64 HMAC>

The webhook endpoint must return a 2xx response within 5 seconds. Failed deliveries are not retried.

Use the webhook event as a trigger to retrieve the current resource state from the API. Since webhook deliveries are not retried, run a scheduled reconciliation process to detect updates that may have been missed. See React to events with webhooks for an implementation example.

5. Compare at a glance

OptionBest forAuthPagination handled?Read more
RESTEvery endpoint, your preferred stack and HTTP clientAPI key headerNo, you follow cursors or pagesGetting started
Python SDKBackend jobs, data pipelines, scriptsAPI key from LISTINGSAPI_KEYYes, SyncPage and auto_paging_iter()Python SDK
Node SDKTypeScript services, serverless, dashboardsAPI key from LISTINGSAPI_KEYYes, fetchAll: trueNode SDK
MCPClaude, Cursor, and other AI assistantsAPI key or OAuthYes, tools return complete results/dashboard/mcp
WebhooksReacting to changes within secondsHMAC signature on each deliveryNot applicable, one event per deliveryWebhooks overview

Next steps