curl --silent --show-error --fail-with-body --request POST \
--url 'https://response.stateset.com/api/v1/integrations/shopify' \
--header "Authorization: Bearer $RESPONSECX_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"shop": "string",
"access_token": "YOUR_API_KEY",
"confirm_replace": true
}'
{
"object": "integration.connection",
"provider": "shopify",
"connected": true,
"shop": "string",
"shop_name": "string",
"scopes": "string",
"next_action": "string"
}
Connect Shopify with a custom-app Admin API token
The token is verified against the store live before it is stored, and is never returned by any read. Replacing an existing connection requires confirm_replace…
POST
/
api
/
v1
/
integrations
/
shopify
curl --silent --show-error --fail-with-body --request POST \
--url 'https://response.stateset.com/api/v1/integrations/shopify' \
--header "Authorization: Bearer $RESPONSECX_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"shop": "string",
"access_token": "YOUR_API_KEY",
"confirm_replace": true
}'
{
"object": "integration.connection",
"provider": "shopify",
"connected": true,
"shop": "string",
"shop_name": "string",
"scopes": "string",
"next_action": "string"
}
The token is verified against the store live before it is stored, and is never returned by any read. Replacing an existing connection requires confirm_replace. For browser OAuth instead, use the connect_url from the status endpoint.
Request body
ConnectShopify
string
required
The store handle or myshopify domain, e.g. ‘acme’ or ‘acme.myshopify.com’. Minimum length:
1. Maximum length: 100.string
required
An Admin API access token (shpat_…) from a custom app. Minimum length:
10. Maximum length: 200.boolean
Required (true) when the organization already has a Shopify connection — connecting replaces it.
Response
object
string
required
Allowed values:
'integration.connection'.string
required
Allowed values:
'shopify'.boolean
required
Allowed values:
true.string
required
The normalised myshopify handle (without
.myshopify.com).string,null
required
The store’s display name as reported by Shopify.
string,null
required
Comma-separated scopes the token was granted, when Shopify reports them.
string
required
Status codes
| Code | Meaning |
|---|---|
200 | The verified connection. The token was validated with a live call to the store before being stored. |
400 | Invalid request. issues names the offending field(s). |
401 | Missing, invalid, or expired API key. |
403 | The key lacks a required scope. |
409 | Conflict — either the creation ceiling was reached for this organization (agent_limit_reached), or a request with the same Idempotency-Key is still in flight (idempotency_in_progress); retry the latter after the first attempt settles. |
429 | Rate limit exceeded. |
Access
| Required scope | agents:write |
| Rate limit | 30 requests per minute |
Using this contract
Read the source OpenAPI document for declared schemas and alternatives. This page also includes documented corrections from the spec overlays. Example IDs and values are illustrative; replace them with records from your workspace.curl --silent --show-error --fail-with-body --request POST \
--url 'https://response.stateset.com/api/v1/integrations/shopify' \
--header "Authorization: Bearer $RESPONSECX_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"shop": "string",
"access_token": "YOUR_API_KEY",
"confirm_replace": true
}'
{
"object": "integration.connection",
"provider": "shopify",
"connected": true,
"shop": "string",
"shop_name": "string",
"scopes": "string",
"next_action": "string"
}
Last modified on September 21, 2026