Skip to main content

API Endpoints

Every endpoint an API integration can call, on one page. Each row links to the API Reference, where you find the parameters, the request body and example responses.

The basics​

  • Base URL: https://api.sitepack.eu
  • Paths: /api/public/v1/... for site data, /api/authentication/oauth/... for tokens.
  • Authentication: X-SitePack-Access-Token: <access_token> on every request. Authorization: Bearer <access_token> works too.
  • Format: JSON in and out. Send Content-Type: application/json with a body.
  • One site per token: the site is never part of the URL. An app on ten sites holds ten tokens.

You get the access token through the OAuth flow. It lasts an hour; refresh it with the refresh token.

GET https://api.sitepack.eu/api/public/v1/leads/0192c560-3e91-7c25-86ab-1d47f0b93e58
X-SitePack-Access-Token: YOUR_ACCESS_TOKEN
{
"status": "success",
"lead": {
"uuid": "0192c560-3e91-7c25-86ab-1d47f0b93e58",
"email": "emma@example.com",
"first_name": "Emma",
"last_name": "Clarke",
"company_name": null,
"phone": "+44 20 7946 0958",
"city": "London",
"country": "GB",
"source": "Contact form",
"status": 1,
"created": "2026-06-12T10:58:03+00:00"
}
}

Lists and pagination​

A list endpoint takes page (from 1) and limit (25 by default, at most 100) and answers with items and pagination:

{
"status": "success",
"items": [ { "uuid": "..." } ],
"pagination": { "page": 1, "limit": 25, "totalRecords": 87, "totalPages": 4 }
}

A page past the end comes back empty, not as an error.

Errors​

An error has "status": "error" and an error object. Switch on error.code, never on the message:

{
"status": "error",
"error": { "code": "scope_required", "message": "...", "scope": "leads:read" }
}
StatusMeaningWhat to do
400Malformed request.Check the JSON body.
401No token, or the token is invalid or expired.Refresh the token. If refreshing fails, the merchant removed your app.
403Your app lacks the scope, or the installation is no longer active.Add the scope to auth.scopes in app.json; the merchant approves it on the next consent.
404Not found on this site.A uuid from another site is always not found.
409Conflict, such as a slug that is taken.The message says what conflicts.
422Validation failed.error.field names the field.
429Too many requests.Wait the number of seconds in Retry-After.
500Failed on our side (internal_error).Retry later; contact us if it keeps failing.

Rate limits​

Every response carries your budget:

X-SitePack-RateLimit: 600
X-SitePack-RateLimit-Tokens: 574
X-SitePack-RateLimit-Reset: 1750000060
BucketLimitCounted per
Everything600 per minuteinstallation (your app on one site)
Endpoints behind an :order scope20 per hourinstallation
The OAuth endpoints120 per minuteIP address

Because the main budget is per installation, serving many merchants from one server does not slow you down.

From a webhook to the data​

Webhooks tell you that something happened, not what. The payload holds the uuid of the record in arguments.uuid; you read the record with the matching endpoint. That way your scopes are checked when you read, and you always get the current version.

For example, a new lead:

{
"uuid": "019f4a1c-5e2b-7d10-8a3e-2f6c9b1d0e47",
"test_mode": false,
"topic": "lead.created",
"site": "019eca47-21a4-7935-8636-641e7370897b",
"created_at": "2026-10-07T09:12:44Z",
"arguments": { "uuid": "0192c560-3e91-7c25-86ab-1d47f0b93e58" }
}
  1. Verify the signature, see Webhooks.
  2. Look up the access token you stored for site.
  3. Call GET /api/public/v1/leads/{arguments.uuid} with the leads:read scope.
const event = JSON.parse(rawBody);

if (event.topic === 'lead.created') {
const token = await tokenForSite(event.site);
const response = await fetch(`https://api.sitepack.eu/api/public/v1/leads/${event.arguments.uuid}`, {
headers: { 'X-SitePack-Access-Token': token },
});
const { lead } = await response.json();
// lead.email, lead.first_name, lead.phone, ...
}

Which endpoint belongs to which topic is in the topic table. The Example Integration shows the same flow for paid orders, with token storage and refresh.

Every endpoint​

The scope column is what the merchant must have granted. A write scope includes its read scope. "Any token" means every valid app token may call it.

Getting started​

OAuth​

EndpointWhat it doesScope
GET /api/authentication/oauth/authorizeAsk a merchant for consentnone
POST /api/authentication/oauth/authorizeAsk a merchant for consentnone
POST /api/authentication/oauth/device/codeStart device authorizationnone
POST /api/authentication/oauth/introspectInspect a tokenany token
POST /api/authentication/oauth/registerRegister an MCP connector clientnone
POST /api/authentication/oauth/revokeRevoke a tokennone
POST /api/authentication/oauth/tokenExchange a code for a tokennone
GET /api/authentication/oauth/whoamiIdentify a tokenany token

Meta​

EndpointWhat it doesScope
GET /api/public/v1/meWho am Iany token
GET /api/public/v1/scopesList every scopeany token

App settings​

EndpointWhat it doesScope
GET /api/public/v1/app/settingsRead app settingsapp:settings:read
PUT /api/public/v1/app/settingsReplace app settingsapp:settings:write

Webhooks​

EndpointWhat it doesScope
GET /api/public/v1/webhooksList webhook subscriptionswebhooks:read

Leads & customers​

Leads​

EndpointWhat it doesScope
GET /api/public/v1/leadsList leadsleads:read
GET /api/public/v1/leads/{uuid}Get a leadleads:read
PATCH /api/public/v1/leads/{uuid}Update a leadleads:write
DELETE /api/public/v1/leads/{uuid}Delete a leadleads:write
GET /api/public/v1/leads/{uuid}/notesList lead notesleads:read
POST /api/public/v1/leads/{uuid}/notesAdd a lead noteleads:write

Customers​

EndpointWhat it doesScope
GET /api/public/v1/customersList customerscustomers:read
POST /api/public/v1/customersCreate a customercustomers:write
GET /api/public/v1/customers/{uuid}Get a customercustomers:read
PATCH /api/public/v1/customers/{uuid}Update a customercustomers:write

Comments​

EndpointWhat it doesScope
GET /api/public/v1/commentsList commentscomments:read
PATCH /api/public/v1/comments/{uuid}Moderate a commentcomments:write
DELETE /api/public/v1/comments/{uuid}Delete a commentcomments:write

Webshop​

Products​

EndpointWhat it doesScope
GET /api/public/v1/productsList productsproducts:read
POST /api/public/v1/productsCreate a productproducts:write
GET /api/public/v1/products/{uuid}Get a productproducts:read
PATCH /api/public/v1/products/{uuid}Update a productproducts:write
DELETE /api/public/v1/products/{uuid}Delete a productproducts:write
GET /api/public/v1/products/{uuid}/imagesList product imagesproducts:read
PUT /api/public/v1/products/{uuid}/imagesReplace product imagesproducts:write
GET /api/public/v1/products/{uuid}/optionsList product optionsproducts:read
PUT /api/public/v1/products/{uuid}/optionsReplace product optionsproducts:write
GET /api/public/v1/products/{uuid}/stockRead product stockinventory:read
POST /api/public/v1/products/{uuid}/stock/adjustAdjust product stockinventory:write
GET /api/public/v1/products/{uuid}/stock/transactionsList stock changesinventory:read
GET /api/public/v1/products/{uuid}/variantsList product variantsproducts:read
POST /api/public/v1/products/{uuid}/variantsUpsert product variantsproducts:write
DELETE /api/public/v1/products/{uuid}/variants/{variantUuid}Delete a product variantproducts:write
PUT /api/public/v1/products/{uuid}/variants/{variantUuid}/metafieldsReplace variant metafieldsproducts:write
PATCH /api/public/v1/products/{uuid}/variants/{variantUuid}/stockSet variant stockinventory:write

Collections​

EndpointWhat it doesScope
GET /api/public/v1/collectionsList collectionscollections:read
POST /api/public/v1/collectionsCreate a collectioncollections:write
GET /api/public/v1/collections/{uuid}Get a collectioncollections:read
PATCH /api/public/v1/collections/{uuid}Update a collectioncollections:write
DELETE /api/public/v1/collections/{uuid}Delete a collectioncollections:write
GET /api/public/v1/collections/{uuid}/rulesList collection rulescollections:read
PUT /api/public/v1/collections/{uuid}/rulesReplace collection rulescollections:write

Orders​

EndpointWhat it doesScope
GET /api/public/v1/ordersList ordersorders:read
POST /api/public/v1/ordersCreate an orderorders:write
GET /api/public/v1/orders/{uuid}Get an orderorders:read
PATCH /api/public/v1/orders/{uuid}Change an order statusorders:write
GET /api/public/v1/orders/{uuid}/paymentsList order paymentsorders:read

Discounts​

EndpointWhat it doesScope
GET /api/public/v1/discount-codesList discount codesdiscounts:read
POST /api/public/v1/discount-codesCreate a discount codediscounts:write
GET /api/public/v1/discount-codes/{uuid}Get a discount codediscounts:read
DELETE /api/public/v1/discount-codes/{uuid}Archive a discount codediscounts:write

Shipping​

EndpointWhat it doesScope
GET /api/public/v1/shipping-labelsList shipping labelsshipping:read
GET /api/public/v1/shipping-labels/{uuid}Get a shipping labelshipping:read

Content​

Content​

EndpointWhat it doesScope
GET /api/public/v1/contentList pagescontent:read
POST /api/public/v1/contentCreate a pagecontent:write
GET /api/public/v1/content/validate-slugCheck a slug is freecontent:read
GET /api/public/v1/content/{uuid}Get a pagecontent:read
PATCH /api/public/v1/content/{uuid}Update a pagecontent:write
DELETE /api/public/v1/content/{uuid}Delete a pagecontent:write
GET /api/public/v1/content/{uuid}/elementsGet page elementscontent:read
PUT /api/public/v1/content/{uuid}/elementsReplace page elementscontent:write
POST /api/public/v1/content/{uuid}/publishPublish a pagecontent:write
GET /api/public/v1/content/{uuid}/revisionsList page revisionscontent:read
POST /api/public/v1/content/{uuid}/revisions/{revisionUuid}/restoreRestore a page revisioncontent:write
POST /api/public/v1/content/{uuid}/unpublishUnpublish a pagecontent:write

Blogs​

EndpointWhat it doesScope
GET /api/public/v1/blogsList blog postsblogs:read
POST /api/public/v1/blogsCreate a blog postblogs:write
GET /api/public/v1/blogs/{uuid}Get a blog postblogs:read
PATCH /api/public/v1/blogs/{uuid}Update a blog postblogs:write
DELETE /api/public/v1/blogs/{uuid}Delete a blog postblogs:write
POST /api/public/v1/blogs/{uuid}/publishPublish a blog postblogs:write
POST /api/public/v1/blogs/{uuid}/unpublishUnpublish a blog postblogs:write

Post types​

EndpointWhat it doesScope
GET /api/public/v1/post-typesList post typesposts:read
GET /api/public/v1/post-types/{postType}Get a post typeposts:read
GET /api/public/v1/post-types/{postType}/archiveGet a post type overview pageposts:read
PATCH /api/public/v1/post-types/{postType}/archiveUpdate a post type overview pageposts:write
GET /api/public/v1/post-types/{postType}/entriesList post entriesposts:read
POST /api/public/v1/post-types/{postType}/entriesCreate a post entryposts:write
GET /api/public/v1/post-types/{postType}/entries/{uuid}Get a post entryposts:read
PATCH /api/public/v1/post-types/{postType}/entries/{uuid}Update a post entryposts:write
DELETE /api/public/v1/post-types/{postType}/entries/{uuid}Delete a post entryposts:write

Elements​

EndpointWhat it doesScope
GET /api/public/v1/elementsList element areaselements:read
GET /api/public/v1/elements/{area}Get an element areaelements:read
PUT /api/public/v1/elements/{area}Replace an element areaelements:write
EndpointWhat it doesScope
GET /api/public/v1/navigationsList navigationsnavigation:read
PATCH /api/public/v1/navigations/items/{uuid}Update a navigation itemnavigation:write
DELETE /api/public/v1/navigations/items/{uuid}Delete a navigation itemnavigation:write
GET /api/public/v1/navigations/{section}/itemsList navigation itemsnavigation:read
POST /api/public/v1/navigations/{section}/itemsAdd a navigation itemnavigation:write
PUT /api/public/v1/navigations/{section}/itemsReorder a navigationnavigation:write

Translations​

EndpointWhat it doesScope
GET /api/public/v1/translations/coverageRead translation coveragetranslations:read
GET /api/public/v1/translations/localesList site localestranslations:read
GET /api/public/v1/translations/review/{locale}List what needs translatingtranslations:read
GET /api/public/v1/translations/{type}/{uuid}List an item's translationstranslations:read
GET /api/public/v1/translations/{type}/{uuid}/{locale}Get one locale's translationtranslations:read
PUT /api/public/v1/translations/{type}/{uuid}/{locale}Save a translationtranslations:write
PATCH /api/public/v1/translations/{type}/{uuid}/{locale}Save a translationtranslations:write
DELETE /api/public/v1/translations/{type}/{uuid}/{locale}Delete a translationtranslations:write

Media​

EndpointWhat it doesScope
GET /api/public/v1/mediaList mediamedia:read
GET /api/public/v1/media/{uuid}Get a media itemmedia:read
PATCH /api/public/v1/media/{uuid}Update a media itemmedia:write
DELETE /api/public/v1/media/{uuid}Delete a media itemmedia:write

Categories​

EndpointWhat it doesScope
GET /api/public/v1/categoriesList categoriescategories:read
POST /api/public/v1/categoriesCreate a categorycategories:write
GET /api/public/v1/categories/{uuid}Get a categorycategories:read
PATCH /api/public/v1/categories/{uuid}Update a categorycategories:write
DELETE /api/public/v1/categories/{uuid}Delete a categorycategories:write

Tags​

EndpointWhat it doesScope
GET /api/public/v1/tagsList tagstags:read
POST /api/public/v1/tagsCreate a tagtags:write
GET /api/public/v1/tags/{uuid}Get a tagtags:read
PATCH /api/public/v1/tags/{uuid}Update a tagtags:write
DELETE /api/public/v1/tags/{uuid}Delete a tagtags:write

Redirects​

EndpointWhat it doesScope
GET /api/public/v1/redirectsList redirectsredirects:read
POST /api/public/v1/redirectsCreate a redirectredirects:write
GET /api/public/v1/redirects/{uuid}Get a redirectredirects:read
PATCH /api/public/v1/redirects/{uuid}Update a redirectredirects:write
DELETE /api/public/v1/redirects/{uuid}Delete a redirectredirects:write

USPs​

EndpointWhat it doesScope
GET /api/public/v1/uspsList USPsusp:read
POST /api/public/v1/uspsCreate a USPusp:write
PUT /api/public/v1/uspsReorder USPsusp:write
GET /api/public/v1/usps/{uuid}Get a USPusp:read
PATCH /api/public/v1/usps/{uuid}Update a USPusp:write
DELETE /api/public/v1/usps/{uuid}Delete a USPusp:write

Theme​

EndpointWhat it doesScope
GET /api/public/v1/themeRead the active themethemes:read
GET /api/public/v1/theme/layoutsList theme layoutsthemes:read
GET /api/public/v1/theme/settingsRead theme design settingsthemes:read
PATCH /api/public/v1/theme/settingsChange theme design settingsthemes:write

Site​

Site​

EndpointWhat it doesScope
GET /api/public/v1/siteRead the site settingssites:read
PATCH /api/public/v1/siteUpdate the site settingssites:write
GET /api/public/v1/site/social-mediaRead the social media profilessites:read
PATCH /api/public/v1/site/social-mediaUpdate the social media profilessites:write
GET /api/public/v1/statisticsRead site statisticsstatistics:read

Modules​

EndpointWhat it doesScope
GET /api/public/v1/modulesList active modulesmodules:read
GET /api/public/v1/modules/{key}/settingsRead module settingsmodules:read
PATCH /api/public/v1/modules/{key}/settingsUpdate module settingsmodules:write

Billing​

EndpointWhat it doesScope
GET /api/public/v1/billing/invoicesList invoicesbilling:read
GET /api/public/v1/billing/subscriptionsList subscriptionsbilling:read

Domains​

EndpointWhat it doesScope
GET /api/public/v1/domainsList domainsdomains:read
GET /api/public/v1/domains/checkCheck domain availabilitydomains:read
GET /api/public/v1/domains/holdersList domain holdersdomains:read
POST /api/public/v1/domains/orderOrder a domaindomains:order
GET /api/public/v1/domains/suggestSuggest domain namesdomains:read
GET /api/public/v1/domains/{uuid}Get a domaindomains:read
GET /api/public/v1/domains/{uuid}/dnsList DNS recordsdomains:read
PUT /api/public/v1/domains/{uuid}/dnsReplace DNS recordsdomains:write

Mail​

EndpointWhat it doesScope
GET /api/public/v1/mail/accountsList mailboxesmail:read
POST /api/public/v1/mail/accountsCreate a mailboxmail:write
GET /api/public/v1/mail/accounts/{uuid}Get a mailboxmail:read
DELETE /api/public/v1/mail/accounts/{uuid}Delete a mailboxmail:write
POST /api/public/v1/mail/accounts/{uuid}/change-passwordChange a mailbox passwordmail:write
GET /api/public/v1/mail/accounts/{uuid}/quotaRead mailbox usagemail:read
GET /api/public/v1/mail/slotsRead free mailbox slotsmail:read