connection_id.
All requests except
POST /unified/webhook require three headers: Authorization: Bearer YOUR_TOKEN, X-Tenant-ID: YOUR_TENANT_ID, and X-Org-ID: YOUR_ORG_ID. The webhook endpoint is public and uses HMAC signature verification instead.Get OAuth authorization URL
Generate the OAuth URL your users should visit to authorize a new integration. Redirect them to the returnedauth_url; Synq handles the OAuth callback automatically and generates a connection_id you can save with the callback endpoint below.
POST /api/v1/integrations/auth-url
Headers
Bearer token from your authentication provider.
UUID of your tenant. This is embedded in the OAuth
state parameter to tie the callback back to your account.UUID of your organization.
Response
The full OAuth authorization URL. Redirect your user’s browser to this URL to start the connection flow.
Save a connection
After a user completes the OAuth flow, the provider returns aconnection_id. Call this endpoint to persist that connection in Synq and activate background sync for the platform.
POST /api/v1/integrations/callback
Headers
Bearer token from your authentication provider.
UUID of your tenant.
UUID of your organization.
Body
The
connection_id returned by the OAuth provider after authorization completion.Integration category. Use
commerce for storefronts and marketplaces, or accounting for accounting platforms. Defaults to commerce.Provider name, e.g.
shopify, woocommerce, or amazon. Used as a display name for the connection.Response
Returns201 Created on success.
List connections
Retrieve all active integrations for your tenant and organization.GET /api/v1/integrations/connections
Headers
Bearer token from your authentication provider.
UUID of your tenant.
UUID of your organization.
Response
Array of active connection objects.
Push a product to integrations
Enqueue an asynchronous job to push a product record to all active integrations for your tenant. The platform fans the job out to every connected provider in the background.POST /unified/sync/push/product
Headers
Bearer token from your authentication provider.
UUID of your tenant.
UUID of your organization.
Body
UUID of the Synq product to push.
The sync action to perform. Use
UPSERT to create or update the product on the remote platform, or DELETE to remove it.Response
Returns202 Accepted immediately. The push job runs asynchronously.
Always
queued on a successful 202 response.Inbound webhook
Receive real-time events from connected platforms (e.g. new Shopify orders, inventory updates). Synq verifies every inbound payload using an HMAC-SHA256 signature before processing it.POST /unified/webhook
This endpoint is public — it does not require
Authorization, X-Tenant-ID, or X-Org-ID headers. Security is enforced entirely through the X-Unified-Signature HMAC header. Requests with an invalid or missing signature are rejected with 401 Unauthorized.Headers
HMAC-SHA256 hex digest of the raw request body, signed with your webhook secret. Synq rejects the request if this does not match.
Body
The provider
connection_id that originated this event. Must match an active connection in Synq.Event type from the upstream platform, e.g.
order.created or product.updated.Raw event payload from the upstream platform.
connection_id, validates it is ACTIVE, and persists the event to the outbox for downstream processing. Returns 200 OK on success.
UCP catalog feed
Retrieve a redirect to your tenant’s Unified Commerce Profile (UCP) catalog feed. This endpoint issues a302 Found redirect to a static JSON-LD file that describes your full product catalog in a machine-readable format. It is designed for AI shopping agents and Merchant Center integrations that require a stable, authenticated URL to crawl your catalog without placing load on the primary API.
GET /api/v1/ucp/catalog.json
Headers
Bearer token from your authentication provider. The token must be linked to a valid tenant.
UUID of your tenant.
UUID of your organization.
Response
Returns302 Found with a Location header pointing to your tenant’s catalog JSON-LD file. The redirect URL is dynamic and should not be cached — always call this endpoint to get the current feed URL.