Sell
61 operations. Authenticate with your secret API key (see Authentication); failures use the shape described in Errors. Example requests read $GIEP_API_URL, your deployment’s API host.
Checkout sessions funnel, active-now count and recent activity
GET/v1/analytics/checkout-funnel
Counts of checkout sessions created in [from, to) (at most 400 days): with an email, with a payment attempt, paid; the previous period of equal length; sessions touched in the last 15 minutes; and the 10 most recent sessions without any customer data. Requires sell:read.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Query parameters
fromstring · date-timerequiredISO 8601 instant with Z or an offset, e.g. 2026-10-24T00:00:00Z
pattern ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$tostring · date-timerequiredISO 8601 instant with Z or an offset, e.g. 2026-10-24T00:00:00Z
pattern ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$storeIdstring · uuidA store of the merchant; omit for all of the merchant's stores
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
200 response fieldsCheckoutFunnel
storeIdstringrequirednullableThe store in scope; null = all stores.
fromstringrequiredtostringrequiredtotalsobjectrequiredFields: 4 fields
createdintegerrequiredCheckout sessions created in the window.
withEmailintegerrequiredSessions with an email captured.
withPaymentAttemptintegerrequiredSessions that started a payment.
paidintegerrequiredSessions with status
paid.
ratesobjectrequiredFields: 4 fields
emailCapturednumberrequirednullablewithEmail / created
min 0 · max 1paymentAttemptednumberrequirednullablewithPaymentAttempt / created
min 0 · max 1paidOfAttemptednumberrequirednullablepaid / withPaymentAttempt
min 0 · max 1paidOfCreatednumberrequirednullablepaid / created
min 0 · max 1
previousobjectrequiredFields: 4 fields
fromstringrequiredtostringrequiredtotalsobjectrequiredFields: 4 fields
createdintegerrequiredCheckout sessions created in the window.
withEmailintegerrequiredSessions with an email captured.
withPaymentAttemptintegerrequiredSessions that started a payment.
paidintegerrequiredSessions with status
paid.
ratesobjectrequiredFields: 4 fields
emailCapturednumberrequirednullablewithEmail / created
min 0 · max 1paymentAttemptednumberrequirednullablewithPaymentAttempt / created
min 0 · max 1paidOfAttemptednumberrequirednullablepaid / withPaymentAttempt
min 0 · max 1paidOfCreatednumberrequirednullablepaid / created
min 0 · max 1
activeNowobjectrequiredFields: 3 fields
countintegerrequiredOpen, unexpired sessions touched in the last window.
windowMinutesintegerrequiredasOfstringrequired
recentarray<object>requiredThe 10 most recently created sessions. Contains no customer data.
Each item has 8 fields
idstring · uuidrequiredcheckoutNamestringrequiredstatusstringrequiredtotalintegerrequiredSession total in minor units of
currency.currencystringrequired3 charssourcestringrequiredcreatedAtstringrequiredupdatedAtstringrequired
curl -X GET "$GIEP_API_URL/v1/analytics/checkout-funnel?from=1&to=1" \
-H "Authorization: Bearer $GIEP_API_KEY"{
"storeId": "string",
"from": "string",
"to": "string",
"totals": {
"created": 1,
"withEmail": 1,
"withPaymentAttempt": 1,
"paid": 1
},
"rates": {
"emailCaptured": 1,
"paymentAttempted": 1,
"paidOfAttempted": 1,
"paidOfCreated": 1
},
"previous": {
"from": "string",
"to": "string",
"totals": {
"created": 1,
"withEmail": 1,
"withPaymentAttempt": 1,
"paid": 1
},
"rates": {
"emailCaptured": 1,
"paymentAttempted": 1,
"paidOfAttempted": 1,
"paidOfCreated": 1
}
},
"activeNow": {
"count": 1,
"windowMinutes": 1,
"asOf": "string"
},
"recent": [
{
"id": "37386ae0-251d-4f38-a753-611e841d7",
"checkoutName": "string",
"status": "string",
"total": 4999,
"currency": "USD",
"source": "string",
"createdAt": "2026-10-26T12:00:00.000Z",
"updatedAt": "2026-10-26T12:00:00.000Z"
}
]
}{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Checkout funnel analytics
GET/v1/analytics/funnel
Checkout sessions created in the window and how many were paid. Prefer GET /v1/analytics/checkout-funnel, which adds rates, the previous period and recent activity.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Query parameters
fromanytoany
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/analytics/funnel" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Order bump and upsell performance
GET/v1/analytics/offers
Per offer in one currency, over paid sessions created in [from, to): sessions the offer was shown to, accepted, take rate and revenue (integer minor units). Requires sell:read.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Query parameters
fromstring · date-timerequiredISO 8601 instant with Z or an offset, e.g. 2026-10-24T00:00:00Z
pattern ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$tostring · date-timerequiredISO 8601 instant with Z or an offset, e.g. 2026-10-24T00:00:00Z
pattern ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$currencystringISO 4217 code; defaults to the merchant's default currency
pattern ^[A-Za-z]{3}$
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
200 response fieldsOffersAnalytics
currencystringrequired3 charsfromstringrequiredtostringrequiredoffersarray<object>requiredEach item has 12 fields
offerIdstring · uuidrequiredcheckoutIdstring · uuidrequiredcheckoutNamestringrequiredtitlestringrequiredkindstringrequiredOne ofbumpupsellactivebooleanrequiredamountintegerrequiredThe offer's current price (minor units).
currencystringrequired3 charsofferedintegerrequiredPaid sessions the offer was shown to.
acceptedintegerrequiredtakeRatenumberrequirednullableaccepted / offered
min 0 · max 1revenueintegerrequiredRevenue from accepted offers (minor units).
totalsobjectrequiredFields: 3 fields
revenueintegerrequiredbumpRevenueintegerrequiredupsellRevenueintegerrequired
curl -X GET "$GIEP_API_URL/v1/analytics/offers?from=1&to=1" \
-H "Authorization: Bearer $GIEP_API_KEY"{
"currency": "USD",
"from": "string",
"to": "string",
"offers": [
{
"offerId": "738b9848-20a7-4736-a22b-f187258aa",
"checkoutId": "679010dc-dba5-41d2-a1d7-5b76-d95",
"checkoutName": "string",
"title": "string",
"kind": "bump",
"active": false,
"amount": 4999,
"currency": "USD",
"offered": 1,
"accepted": 1,
"takeRate": 1,
"revenue": 1
}
],
"totals": {
"revenue": 1,
"bumpRevenue": 1,
"upsellRevenue": 1
}
}{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Captured carts (email + consent), newest first
GET/v1/carts
Status: started (open and active), abandoned (idle past CART_ABANDON_AFTER_MINUTES, expired or cancelled), recovered (paid after capture). Recovery emails are not part of v1.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Query parameters
statusstringOne ofstartedabandonedrecoveredqstringmax 200 charsstoreIdstring · uuidlimitintegermin 1 · max 100beforeany
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/carts" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}One captured cart with the consent record
GET/v1/carts/{id}
One captured cart (email, items, value, status) with its consent record: mode, time and the version of the consent text shown.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/carts/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Delete a captured cart (audited)
DELETE/v1/carts/{id}
Erases the shopper's personal data on an unpaid session (email, name, phone, address, notes, tracking ids; the customer record when no order uses it). A paid cart only leaves the list.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X DELETE "$GIEP_API_URL/v1/carts/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Export captured carts as CSV (audited)
GET/v1/carts/export.csv
CSV of the captured carts matching the filters. Contains shopper emails, so it needs sell:manage and is audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Query parameters
statusstringOne ofstartedabandonedrecoveredqstringmax 200 charsstoreIdstring · uuidlimitintegermin 1 · max 100beforeany
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a CSV file, streamed.
200 response fields
Body type: string.
curl -X GET "$GIEP_API_URL/v1/carts/export.csv" \
-H "Authorization: Bearer $GIEP_API_KEY"(streamed CSV, one row per line){
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}List your saved checkout templates
GET/v1/checkout-templates
The merchant's own saved checkout templates (built-in templates are chosen with template on POST /v1/checkouts).
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/checkout-templates" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Save a checkout as a template for your stores
POST/v1/checkout-templates
Copies the checkout working copy with offer references cleared (offers belong to one checkout). Start a checkout from it with templateId on POST /v1/checkouts.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
201
Request body · application/jsonrequired
checkoutIdstring · uuidrequirednamestringrequiredmin 1 chars · max 80 charsdescriptionstringmax 300 chars
Responses
- 201Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 201 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/checkout-templates" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"checkoutId": "679010dc-dba5-41d2-a1d7-5b76-d95",
"name": "string"
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Archive a saved template
DELETE/v1/checkout-templates/{id}
Archives a saved template. Checkouts already created from it are not changed.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X DELETE "$GIEP_API_URL/v1/checkout-templates/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}List checkouts
GET/v1/checkouts
Checkouts of the merchant with status (draft, published, archived) and the published version.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/checkouts" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Create a checkout
POST/v1/checkouts
Creates a checkout (a draft) for a store, from a built-in template (dtc, subscription, high-risk), a saved templateId or an explicit config. Nothing is live until it is published.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
201
Request body · application/jsonrequired
namestringrequiredmin 1 chars · max 200 charsstoreIdstring · uuidtemplatestringOne ofdtcsubscriptionhigh_riskblanktemplateIdstring · uuidslugstringpattern ^[a-z0-9][a-z0-9-]{2,58}[a-z0-9]$configany
Responses
- 201Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 201 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/checkouts" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string"
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Retrieve a checkout
GET/v1/checkouts/{id}
One checkout with its working copy (draft config).
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/checkouts/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Update a checkout
PATCH/v1/checkouts/{id}
Renames a checkout or replaces its working copy (draft config). The hosted page keeps serving the last published version until the next publish.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Request body · application/jsonrequired
namestringmin 1 chars · max 200 charsconfigany
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X PATCH "$GIEP_API_URL/v1/checkouts/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string"
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Archive a checkout
DELETE/v1/checkouts/{id}
Archives a checkout (soft delete). Its published versions and orders stay for history.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X DELETE "$GIEP_API_URL/v1/checkouts/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Publish a checkout version
POST/v1/checkouts/{id}/publish
Validates the working copy and freezes it as the next immutable version, which the hosted page then serves. Refused with 422 publish_validation_failed and a list of issues (for example a missing payment step, an unknown offer, a return URL not on the store allow-list). Emits checkout.published.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/checkouts/275cd27c-ca97-41ae-aeaa-5caa5355/publish" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}List checkout versions
GET/v1/checkouts/{id}/versions
Published versions of a checkout, newest first. Versions are immutable.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/checkouts/275cd27c-ca97-41ae-aeaa-5caa5355/versions" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}List discounts (coupon codes and automatic discounts)
GET/v1/discounts
used counts uses reserved by a payment in flight or redeemed by a paid order (both count against the limits).
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/discounts" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Create a coupon code or automatic discount
POST/v1/discounts
Percent values are basis points (1000 = 10%), fixed amounts integer minor units with a currency. Codes are matched case-insensitively and unique per store (409 code_taken). Audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
201
Request body · application/jsonrequired
storeIdstring · uuidkindstringrequiredOne ofcodeautomaticcodestringmin 3 chars · max 40 chars · pattern ^[A-Za-z0-9_-]+$namestringrequiredmin 1 chars · max 80 charsvalueTypestringrequiredOne ofpercentfixedpercentBpsintegermin 1 · max 10000amountintegergreater than 0currencystring3 charsminSubtotalintegermin 0minQuantityintegermin 1 · max 10000usageLimitintegermin 1 · max 10000000perCustomerLimitintegermin 1 · max 10000startsAtanyendsAtanyappliesToBumpsbooleanactiveboolean
Responses
- 201Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 201 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/discounts" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"kind": "code",
"name": "string",
"valueType": "percent"
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Retrieve a discount
GET/v1/discounts/{id}
One discount with its limits and usage.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/discounts/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Update a discount (null clears a limit, bound or date)
PATCH/v1/discounts/{id}
Changes a discount. null clears an optional limit, bound or date. Audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Request body · application/jsonrequired
namestringmin 1 chars · max 80 charsvalueTypestringOne ofpercentfixedpercentBpsintegermin 1 · max 10000amountintegergreater than 0currencystring3 charsminSubtotalintegernullablemin 0minQuantityintegernullablemin 1 · max 10000usageLimitintegernullablemin 1 · max 10000000perCustomerLimitintegernullablemin 1 · max 10000startsAtanynullableendsAtanynullableappliesToBumpsbooleanactiveboolean
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X PATCH "$GIEP_API_URL/v1/discounts/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"valueType": "percent",
"percentBps": 1
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Archive a discount
DELETE/v1/discounts/{id}
Archives a discount; it no longer applies to new sessions. Audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X DELETE "$GIEP_API_URL/v1/discounts/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}List custom domains (status pending | verified | active | failed)
GET/v1/domains
Custom checkout domains with their status (pending waiting for DNS, verified TXT matched, active also pointing at the edge, failed), the DNS records to create, the last check and whether the domain is the store primary.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/domains" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Add a custom checkout domain
POST/v1/domains
Normalised (lower case, IDN to punycode). Refused (422): IP addresses, wildcards, special-use names (localhost, .local, .test), a bare public suffix, the platform domains, more than CHECKOUT_DOMAINS_PER_STORE per store. The answer lists the exact DNS records to create: CNAME to the platform edge host (or A/AAAA to the edge addresses for an apex) and the TXT ownership record. Audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
201
Request body · application/jsonrequired
hostnamestringrequiredmin 1 chars · max 253 charsstoreIdstring · uuid
Responses
- 201Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 201 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/domains" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"hostname": "string"
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Remove a custom domain (audited)
DELETE/v1/domains/{id}
Removes a custom checkout domain; it stops serving the checkout. Audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X DELETE "$GIEP_API_URL/v1/domains/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Make an active domain the store primary (new hosted-checkout URLs use it)
POST/v1/domains/{id}/primary
With primary: true, new hosted-checkout URLs of the store use this domain; only an active domain can be primary (422 domain_not_active). Audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Request body · application/jsonrequired
primarybooleanrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/domains/275cd27c-ca97-41ae-aeaa-5caa5355/primary" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"primary": false
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Re-check a domain: TXT ownership, then DNS routing to the edge
POST/v1/domains/{id}/verify
verified = the TXT record matched; active = verified AND the hostname points at the platform edge (CNAME or address). A DNS resolver failure is a 502, never a failed verdict. Only one merchant can hold a hostname verified (409).
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/domains/275cd27c-ca97-41ae-aeaa-5caa5355/verify" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Store integrations (Shopify, WooCommerce) and whether Shopify is configured
GET/v1/integrations
Per store: how it is connected (Shopify shop, scopes, API version, catalog import state; WooCommerce), without credentials, and whether the Shopify app is configured for this installation.
- Authentication
- API key (Bearer)
- Permission
store:read- Idempotency-Key
- Not used
- Success
200
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/integrations" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Privacy requests Shopify sent (data requests and erasures)
GET/v1/integrations/privacy-requests
Customer data requests and erasure requests Shopify forwarded. GIEP handles erasures automatically. Requires audit:read.
- Authentication
- API key (Bearer)
- Permission
audit:read- Idempotency-Key
- Not used
- Success
200
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/integrations/privacy-requests" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}One privacy request; a data request carries the customer data to pass on
GET/v1/integrations/privacy-requests/{id}
One privacy request. A data request carries the customer data GIEP holds, for the merchant to send to the customer. Requires audit:read.
- Authentication
- API key (Bearer)
- Permission
audit:read- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/integrations/privacy-requests/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Storefront checkout redirect status (state, public id, allowed origins, pricing mode, snippet)
GET/v1/integrations/shopify/{storeId}/checkout-redirect
Whether the redirect block is installed in the live theme, the store's public id, the allowed storefront origins, whether a Storefront token is stored (pricing: storefront_api or admin_api) and a manual install snippet. Requires store:read.
- Authentication
- API key (Bearer)
- Permission
store:read- Idempotency-Key
- Not used
- Success
200
Path parameters
storeIdstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/integrations/shopify/string/checkout-redirect" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Install the checkout redirect in the live Shopify theme
POST/v1/integrations/shopify/{storeId}/checkout-redirect/install
Backs up layout/theme.liquid (SecretStore reference) and adds a marked block before </head>; installing twice replaces the block. 409 missing_scope without write_themes, theme_markers_broken, theme_no_head, in_progress; 502 when Shopify refuses or does not answer (the theme is left as it was). Audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
storeIdstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/integrations/shopify/string/checkout-redirect/install" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Remove the checkout redirect from the Shopify theme
POST/v1/integrations/shopify/{storeId}/checkout-redirect/remove
Removes the marked block (later theme edits stay). With damaged markers it answers 409 confirm_restore_required unless confirmRestoreBackup: true is sent, because restoring the stored original overwrites later edits. 409 theme_changed when the file changed while it was being edited, app_uninstalled after an uninstall (remove the block by hand). Audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
storeIdstringrequired
Request body · application/jsonrequired
confirmRestoreBackupboolean
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/integrations/shopify/string/checkout-redirect/remove" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"confirmRestoreBackup": false
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Set the storefront domains and the Storefront API token
PUT/v1/integrations/shopify/{storeId}/checkout-redirect/settings
Replaces the custom storefront domains the script may call from and/or stores (or clears with null) the Storefront API access token in the SecretStore. The token is never returned. Audited without the token.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
storeIdstringrequired
Request body · application/jsonrequired
domainsarray<string>max 10 itemsstorefrontTokenstringnullablemin 8 chars · max 200 chars
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X PUT "$GIEP_API_URL/v1/integrations/shopify/string/checkout-redirect/settings" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"domains": [
"string"
],
"storefrontToken": "string"
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Import or re-sync the Shopify catalog (one checkout item per variant)
POST/v1/integrations/shopify/{storeId}/sync-catalog
Reads every active product and variant, upserts them (external id = variant GID) and deactivates variants removed in Shopify. 409 when the store is not connected; 502 when Shopify does not answer (nothing changes). Audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
storeIdstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/integrations/shopify/string/sync-catalog" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}List offers
GET/v1/offers
Order bumps and post-purchase upsells, optionally for one checkoutId.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Query parameters
checkoutIdstring · uuid
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/offers" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Create an offer (bump / upsell)
POST/v1/offers
Creates an order bump (added before payment) or a post-purchase upsell for one checkout. amount is integer minor units in currency; prices holds explicit prices in other presentment currencies (never converted). Place it on the page in the checkout editor.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
201
Request body · application/jsonrequired
checkoutIdstring · uuidrequiredkindstringrequiredOne ofbumpupsellproductIdstring · uuidtitlestringrequiredmin 1 chars · max 200 charsdescriptionstringmax 2000 charsamountintegerrequiredgreater than 0currencystringrequired3 charspricesanypositionintegermin 0 · max 1000
Responses
- 201Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 201 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/offers" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"checkoutId": "679010dc-dba5-41d2-a1d7-5b76-d95",
"kind": "bump",
"title": "string",
"amount": 4999,
"currency": "USD"
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Retrieve an offer
GET/v1/offers/{id}
One offer: kind (bump or upsell), checkout, price, per-currency prices, position and active state.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/offers/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Update an offer
PATCH/v1/offers/{id}
Changes title, description, price, per-currency prices, position or active state of an offer.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Request body · application/jsonrequired
titlestringmin 1 chars · max 200 charsdescriptionstringmax 2000 charsamountintegergreater than 0pricesanypositionintegermin 0 · max 1000activeboolean
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X PATCH "$GIEP_API_URL/v1/offers/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "string",
"description": "string",
"amount": 4999
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Archive an offer
DELETE/v1/offers/{id}
Deactivates the offer (same as active: false); the record stays for order history.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X DELETE "$GIEP_API_URL/v1/offers/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Orders (paid checkouts), newest first
GET/v1/orders
The merchant's orders with customer, total and the latest payment. Filters: storeId (one of your stores; 404 otherwise), status, q (order id, store order reference or customer email). Keyset pagination: pass nextBefore back as before. Amounts are integer minor units.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Query parameters
statusstringOne ofopenpaidpartially_refundedrefundedcancelledqstringmax 200 charsstoreIdstring · uuidlimitintegermin 1 · max 100beforestring
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/orders" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}One order with lines, discounts, shipping, tax, payments and refunds
GET/v1/orders/{id}
Line amounts of kind discount are the reduction (positive); tax lines marked inclusive are already part of the total. Each payment lists its refunds (pending and unknown refunds count as spent).
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/orders/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}List payment links
GET/v1/payment-links
Payment links with their URL, amount, checkout and status.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/payment-links" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Create a payment link
POST/v1/payment-links
A shareable link that opens the published version of a checkout for a fixed amount (integer minor units). Optional product, per-currency prices, reusable and expiresAt.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
201
Request body · application/jsonrequired
checkoutIdstring · uuidrequiredtitlestringrequiredmin 1 chars · max 200 charsproductIdstring · uuidamountintegerrequiredgreater than 0currencystringrequired3 charspricesanyreusablebooleanexpiresAtany
Responses
- 201Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 201 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/payment-links" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"checkoutId": "679010dc-dba5-41d2-a1d7-5b76-d95",
"title": "string",
"amount": 4999,
"currency": "USD"
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}List products
GET/v1/products
Products of the merchant (title, price in integer minor units, per-currency prices, SKU, image, external id, inventory, active).
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/products" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Create a product
POST/v1/products
Creates a product for a store. price is integer minor units of currency; prices holds explicit prices in other presentment currencies (never converted). Shopify stores import products instead (sync-catalog).
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
201
Request body · application/jsonrequired
storeIdstring · uuidtitlestringrequiredmin 1 chars · max 200 charsdescriptionstringmax 5000 charsskustringmax 100 charspriceintegerrequiredmin 0currencystringrequired3 charsimageUrlstring · uriexternalIdstringmax 200 charsinventoryintegermin 0pricesany
Responses
- 201Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 201 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/products" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "string",
"price": 4999,
"currency": "USD"
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Retrieve a product
GET/v1/products/{id}
One product: title, price in integer minor units, per-currency prices, SKU, image, external id, inventory and active state.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/products/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Update a product
PATCH/v1/products/{id}
Changes a product, or deactivates it with active: false.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Request body · application/jsonrequired
titlestringmin 1 chars · max 200 charsdescriptionstringmax 5000 charsskustringmax 100 charspriceintegermin 0imageUrlstring · uriexternalIdstringmax 200 charsinventoryintegermin 0pricesanyactiveboolean
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X PATCH "$GIEP_API_URL/v1/products/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "string",
"description": "string",
"sku": "string"
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Archive a product
DELETE/v1/products/{id}
Deactivates the product (same as active: false); the record stays for order history.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X DELETE "$GIEP_API_URL/v1/products/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Hosted-checkout features of a store: wallets, Places autocomplete, cart consent
GET/v1/stores/{storeId}/checkout-features
Each wallet shows whether the store turned it on and whether the platform side exists (configured, missing): Apple Pay needs the platform domain-association file, Google Pay the merchant id, PayPal an enabled PayPal connector.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Path parameters
storeIdstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/stores/string/checkout-features" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Change hosted-checkout features (audited; consent version bumps on a wording change)
PUT/v1/stores/{storeId}/checkout-features
Turns wallets (Apple Pay, Google Pay, PayPal), Google Places autocomplete (browser key) and cart capture (consent mode off, notice or checkbox, consent text, retention 1-730 days) on or off for a store. Changing the consent wording starts a new consent version. Audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
storeIdstringrequired
Request body · application/jsonrequired
applePayEnabledbooleangooglePayEnabledbooleanpaypalEnabledbooleanplacesEnabledbooleanplacesBrowserKeystringnullablemax 100 charscartCapturestringOne ofoffnoticecheckboxconsentTextstringnullablemax 300 charscartRetentionDaysintegermin 1 · max 730
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X PUT "$GIEP_API_URL/v1/stores/string/checkout-features" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"applePayEnabled": false,
"googlePayEnabled": false,
"paypalEnabled": false
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}A store's hosted checkout settings
GET/v1/stores/{storeId}/checkout-settings
A store's hosted checkout settings, such as how long after payment post-purchase offers can be accepted (upsellWindowMinutes).
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Path parameters
storeIdstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/stores/string/checkout-settings" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Change a store's hosted checkout settings
PUT/v1/stores/{storeId}/checkout-settings
upsellWindowMinutes (1..1440, default 15): how long after payment post-purchase offers can be accepted. Audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
storeIdstringrequired
Request body · application/jsonrequired
upsellWindowMinutesintegerrequiredmin 1 · max 1440
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X PUT "$GIEP_API_URL/v1/stores/string/checkout-settings" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"upsellWindowMinutes": 1
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}A store's signing secret status (never the value)
GET/v1/stores/{storeId}/signing-secret
Configured or not, merchant or legacy source, the last 4 characters and, during a rotation, until when the previous secret also signs.
- Authentication
- API key (Bearer)
- Permission
webhook:read- Idempotency-Key
- Not used
- Success
200
Path parameters
storeIdstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/stores/string/signing-secret" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Generate the store's signing secret (shown once)
POST/v1/stores/{storeId}/signing-secret
Signs the return URLs (giep_sig). The value is in this response only. 409 when one exists (rotate instead). Audited.
- Authentication
- API key (Bearer)
- Permission
webhook:manage- Idempotency-Key
- Not used
- Success
201
Path parameters
storeIdstringrequired
Responses
- 201Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 201 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/stores/string/signing-secret" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}End a rotation overlap now (the previous secret stops signing)
POST/v1/stores/{storeId}/signing-secret/revoke-previous
During the 24-hour rotation overlap, stops the previous secret now (return URLs signed with it no longer verify). Audited.
- Authentication
- API key (Bearer)
- Permission
webhook:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
storeIdstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/stores/string/signing-secret/revoke-previous" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Rotate the store's signing secret (shown once; 24 h overlap)
POST/v1/stores/{storeId}/signing-secret/rotate
The new secret signs at once; for 24 hours the previous one also signs (giep_sig_prev), so the shop can switch without failed verifications. revokeNow: true (a leaked secret): the previous one stops signing at once. Audited.
- Authentication
- API key (Bearer)
- Permission
webhook:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
storeIdstringrequired
Request body · application/jsonrequired
revokeNowbooleanDefaultfalse
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/stores/string/signing-secret/rotate" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"revokeNow": false
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}List tax rules
GET/v1/tax-rules
Tax rules: name, rate (basis points), country, optional region, inclusive or exclusive, whether shipping is taxed, active.
- Authentication
- API key (Bearer)
- Permission
sell:read- Idempotency-Key
- Not used
- Success
200
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X GET "$GIEP_API_URL/v1/tax-rules" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Create a tax rule
POST/v1/tax-rules
Matches the shopper country (and region when set). Rate in basis points (500 = 5%). Exclusive tax is added to the total; inclusive tax is shown as included. Rounding: ADR 0009. Audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
201
Request body · application/jsonrequired
storeIdstring · uuidnamestringrequiredmin 1 chars · max 60 charsrateBpsintegerrequiredmin 1 · max 10000countrystringrequiredpattern ^[A-Za-z]{2}$regionstringmin 1 chars · max 10 charsinclusivebooleanappliesToShippingbooleanpositionintegermin 0 · max 1000activeboolean
Responses
- 201Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 201 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X POST "$GIEP_API_URL/v1/tax-rules" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"rateBps": 1,
"country": "US"
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Update a tax rule
PATCH/v1/tax-rules/{id}
Changes a tax rule or activates / deactivates it. Audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Request body · application/jsonrequired
namestringmin 1 chars · max 60 charsrateBpsintegermin 1 · max 10000countrystringpattern ^[A-Za-z]{2}$inclusivebooleanappliesToShippingbooleanpositionintegermin 0 · max 1000activebooleanregionstringnullablemin 1 chars · max 10 chars
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 422Validation failed (invalid_request) Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X PATCH "$GIEP_API_URL/v1/tax-rules/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"rateBps": 1,
"country": "US"
}'// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "invalid_request",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}Archive a tax rule
DELETE/v1/tax-rules/{id}
Archives a tax rule; it no longer applies to new sessions. Audited.
- Authentication
- API key (Bearer)
- Permission
sell:manage- Idempotency-Key
- Not used
- Success
200
Path parameters
idstringrequired
Responses
- 200Success
- 401Missing or invalid credentials Body is an
errorobject withcodeandmessage. - 403Role not permitted Body is an
errorobject withcodeandmessage. - 429Rate limited (rate_limited); see Retry-After Body is an
errorobject withcodeandmessage.
The 200 response is a JSON object. The OpenAPI document does not describe its fields.
curl -X DELETE "$GIEP_API_URL/v1/tax-rules/275cd27c-ca97-41ae-aeaa-5caa5355" \
-H "Authorization: Bearer $GIEP_API_KEY"// JSON object. The OpenAPI document does not list its fields.{
"error": {
"code": "unauthorized",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "forbidden",
"message": "Human-readable explanation"
}
}{
"error": {
"code": "rate_limited",
"message": "Human-readable explanation"
}
}