# API Overview

> The Synkro API empowers you to seamlessly integrate with Synkro, enabling direct management of your Shopify inventory from your own system.

Source: https://www.synkro-app.com/documentation/api-overview
Last updated: 2026-10-21

## Authorization

All requests made to the Synkro API require a valid Synkro access token. Include your token as a `X-Synkro-Access-Token` header on all API queries.

### Creating an API key

You can create and manage your own API keys directly within the Synkro app:

1. In the Synkro settings navigate to `API access`.
2. Optionally give the key a name to help you identify what it is used for, e.g. "Warehouse integration".
3. Click `Create API key`.

Your new API key will appear in the list below, where you can reveal and copy its value. You can create multiple API keys — for example, one per integration. Deleting a key immediately revokes it, and any integrations using it will stop working.

API access requires a Synkro plan which includes the offline API feature. If your current plan does not include it, the `API access` settings page will present an upgrade option.

If you have any questions about the Synkro API, please contact our [**customer support**](mailto:support@synkro-app.com?subject=Synkro%20API%20support) team.

## Endpoints and requests

All Synkro API requests are scoped to the store associated with the provided access token, with the route determining the specific query or action to be performed. API endpoints follow this pattern, where `store_name` refers to the store's `store_name.myshopify.com` url:

```
https://api.synkro-app.com/api/stores/{store_name}/inventory/bulk_update
```

The store associated with the provided `store_name` can be any store which is connected to the same Synkro user account as the store associated with the provided API access token. Attempts to access a different store will result in an unauthorized API response.

## Rate limits

The Synkro API supports a limit of **5 requests per second**. Beyond this limit, the API will return a `429 Too Many Requests` error. If you encounter such an error, sleep your application process for a second before resuming your requests.

## Job API

Some API requests start a long-running operation in the background, such as a [**full store force sync**](https://www.synkro-app.com/documentation/force-sync-api.md#force-sync-store-inventory). These requests respond with a `job_id` which you can use to follow the operation's progress.

### Job status

`GET /api/jobs/{job_id}`

The `status` of a job is one of:

- **pending**: the job is waiting to start.
- **processing**: the job is running.
- **complete**: the job has finished. Jobs which can't be found are also reported as **complete**.

Jobs are only visible to stores connected to the same Synkro user account as the store the job runs for. Other jobs are reported as **complete**.

#### Request

```json
curl --location 'https://api.synkro-app.com/api/jobs/3f1c7a52-8d4e-4b9a-9c2f-6e0d1b7a4c18' \
--header 'Accept: application/json' \
--header 'X-Synkro-Access-Token: synkro_at_*******'
```

#### Successful response `200`

```json
{
  "id": "3f1c7a52-8d4e-4b9a-9c2f-6e0d1b7a4c18",
  "status": "processing"
}
```

When polling a job's status, wait a few seconds between requests to stay within the [rate limits](#rate-limits).

## Status and error codes

All Synkro API queries return HTTP status codes that can tell you more about the response.

### 400 Bad Request

The request parameters are invalid. The response body describes which parameters are invalid and why.

### 401 Unauthorized

The provided API access token does not have permission to access the store associated with the request.

### 403 Forbidden

The server is refusing to respond. This is typically caused by an invalid or missing API access token.

### 404 Not Found

The requested resource was not found.

### 409 Conflict

The request conflicts with an operation which is already in progress, such as starting a [full store force sync](https://www.synkro-app.com/documentation/force-sync-api.md#sync-already-in-progress-409) while another is still running.

### 429 Too Many Requests

The API rate limit has been exceeded. See [Rate limits](#rate-limits).
