Skip to main content
Synq connects to over 100 commerce platforms — including Shopify, WooCommerce, Amazon, BigCommerce, and more — through a secure OAuth flow. Once connected, Synq continuously syncs your product catalog and orders across every storefront, giving you a single source of truth for your commerce operations.

Authentication

All Integration endpoints require these headers on every request:
HeaderDescription
AuthorizationBearer <your API token>
X-Tenant-IDYour tenant UUID
X-Org-IDYour organization UUID

Connect a commerce platform

Use the following OAuth flow to connect a new storefront or marketplace to Synq.
1
Get the authorization URL
2
Call POST /api/v1/integrations/auth-url to receive a unique OAuth URL scoped to your tenant. Redirect your user to this URL to begin the authorization flow on the target platform.
3
POST /api/v1/integrations/auth-url
4
Example request
5
cURL
curl -X POST https://api.synq.com/api/v1/integrations/auth-url \
  -H "Authorization: Bearer TOKEN" \
  -H "X-Tenant-ID: a1b2c3d4-0000-0000-0000-000000000001" \
  -H "X-Org-ID: a1b2c3d4-0000-0000-0000-000000000002"
JavaScript
const response = await fetch(
  "https://api.synq.com/api/v1/integrations/auth-url",
  {
    method: "POST",
    headers: {
      Authorization: "Bearer TOKEN",
      "X-Tenant-ID": "a1b2c3d4-0000-0000-0000-000000000001",
      "X-Org-ID": "a1b2c3d4-0000-0000-0000-000000000002",
    },
  }
);
const { auth_url } = await response.json();
6
Example response
7
{
  "auth_url": "https://api.unified.to/integration/auth?category=commerce&state=a1b2c3d4-0000-0000-0000-000000000001"
}
8
The full OAuth authorization URL. Redirect your user’s browser to this URL to begin the connection flow on the target platform.
9
Redirect your user to authorize the connection
10
Send your user to the auth_url returned in step 1. They will be presented with a list of supported commerce platforms (Shopify, WooCommerce, Amazon, etc.) and prompted to authorize Synq’s access.
11
After the user grants access, Synq completes the OAuth handshake and returns a connection_id to your configured redirect URI along with the category and provider of the connected platform.
12
Store the returned connection_id in your application’s session or state — you’ll need it in the next step to complete the connection registration in Synq.
13
Save the connection to Synq
14
After authorization, call POST /api/v1/integrations/callback with the connection_id returned in the OAuth callback. Synq verifies the connection and registers it against your tenant so that product sync and webhook events work automatically.
15
POST /api/v1/integrations/callback
Content-Type: application/json
16
Request body
17
The connection ID returned after the user completes OAuth authorization. Must not be empty.
18
The integration category. Defaults to "commerce". Use "accounting" for accounting platforms.
19
The platform name in lowercase (e.g. "shopify", "woocommerce", "amazon"). Used as a fallback identifier in non-production environments.
20
Example request
21
cURL
curl -X POST https://api.synq.com/api/v1/integrations/callback \
  -H "Authorization: Bearer TOKEN" \
  -H "X-Tenant-ID: a1b2c3d4-0000-0000-0000-000000000001" \
  -H "X-Org-ID: a1b2c3d4-0000-0000-0000-000000000002" \
  -H "Content-Type: application/json" \
  -d '{
    "connection_id": "conn_shopify_8f3a2b",
    "category": "commerce",
    "provider": "shopify"
  }'
JavaScript
const response = await fetch(
  "https://api.synq.com/api/v1/integrations/callback",
  {
    method: "POST",
    headers: {
      Authorization: "Bearer TOKEN",
      "X-Tenant-ID": "a1b2c3d4-0000-0000-0000-000000000001",
      "X-Org-ID": "a1b2c3d4-0000-0000-0000-000000000002",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      connection_id: "conn_shopify_8f3a2b",
      category: "commerce",
      provider: "shopify",
    }),
  }
);
const result = await response.json();
22
Example response201 Created
23
{
  "status": "success",
  "message": "Integration secured"
}
24
Verify your connections
25
Confirm the integration registered correctly by listing all active connections for your tenant.
26
GET /api/v1/integrations/connections
27
Example request
28
cURL
curl https://api.synq.com/api/v1/integrations/connections \
  -H "Authorization: Bearer TOKEN" \
  -H "X-Tenant-ID: a1b2c3d4-0000-0000-0000-000000000001" \
  -H "X-Org-ID: a1b2c3d4-0000-0000-0000-000000000002"
JavaScript
const response = await fetch(
  "https://api.synq.com/api/v1/integrations/connections",
  {
    headers: {
      Authorization: "Bearer TOKEN",
      "X-Tenant-ID": "a1b2c3d4-0000-0000-0000-000000000001",
      "X-Org-ID": "a1b2c3d4-0000-0000-0000-000000000002",
    },
  }
);
const { connections } = await response.json();
29
Example response
30
{
  "connections": [
    {
      "id": "7e9d1f3c-aaaa-4d2e-b001-112233445566",
      "unified_connection_id": "conn_shopify_8f3a2b",
      "provider": "shopify",
      "status": "ACTIVE",
      "created_at": "2024-09-01T12:05:00Z",
      "updated_at": "2024-09-01T12:05:00Z"
    }
  ]
}
31
Array of active integration connection objects.
id
string
Synq’s internal UUID for this connection.
unified_connection_id
string
The connection ID issued during the OAuth flow.
provider
string
Lowercase name of the connected platform (e.g. "shopify", "woocommerce").
status
string
Current connection status. ACTIVE means the connection is live and syncing.
created_at
string
ISO 8601 timestamp when the connection was first registered.
updated_at
string
ISO 8601 timestamp of the last status change.

Sync products to connected platforms

Once you have at least one active connection, push any product in your Synq catalog to all connected storefronts with a single API call.
POST /unified/sync/push/product
Content-Type: application/json
Request body
productId
string
required
UUID of the product in Synq’s catalog to push.
action
string
required
Sync action to perform. Use "UPSERT" to create or update the product on all connected storefronts, or "DELETE" to remove it from all connected storefronts.
Example request
curl -X POST https://api.synq.com/unified/sync/push/product \
  -H "Authorization: Bearer TOKEN" \
  -H "X-Tenant-ID: a1b2c3d4-0000-0000-0000-000000000001" \
  -H "X-Org-ID: a1b2c3d4-0000-0000-0000-000000000002" \
  -H "Content-Type: application/json" \
  -d '{
    "productId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "action": "UPSERT"
  }'
Example response202 Accepted
{
  "status": "queued"
}
The action field accepts two values: "UPSERT" (create or update the product on every connected storefront) and "DELETE" (remove the product from every connected storefront).Product sync is asynchronous. A 202 Accepted response means Synq has queued the sync job — the actual push to each connected storefront happens in the background. Synq fans out the update to every active connection for your tenant with automatic retries and exponential backoff on transient errors.