The Consent Studio Reseller API
The Reseller API allows approved partners to manage customer sites, assign plans, and automate onboarding.
All endpoints are authenticated using a reseller API token and scoped to the reseller that owns the token.
You’ll need a reseller API token (request one via your account manager or support team).
Authentication
You can authenticate via a Bearer Token in the HTTP header or a token parameter in the query string.
Example (HTTP header)
Authorization: Bearer YOUR_RESELLER_TOKEN
Example (query)
?token=YOUR_RESELLER_TOKEN
If the token is missing or invalid, the API will return a 401 Unauthorized error.
Workflow examples
Create + Invite + Link (Reseller Sends Invoices Externally and Manually)
Make sure that your reseller holds at least one site that has a manually activated subscription for a specific type plan.
POST
/sites — register the new domain with Consent StudioPATCH
/sites/{domain_or_uuid}/link — link it to the a top level site with an active subscriptionPOST
/users/invite/{domain_or_uuid} — invite the customer to manage their site
Recommended: Create + Invite (Automatic Payouts to Reseller)
Make sure that you have completed your Reseller Onboarding to be eligible to get automatic payouts to your bank account (!)
POST
/sites — register the new domain with Consent StudioPOST
/users/invite/{domain_or_uuid} — invite the customer to manage their site and set-up billing
Cancelling a site
Either...
Unlink it from a parent subscription (API) and contact Consent Studio support (manually) to detach it from the reseller account
Delete the site completely using the API
Endpoint: Get Reseller Info & Available Plans
Returns metadata about the reseller and a list of subscription plans the reseller can assign to sites.
Endpoint
GET /api/v1/reseller/about
Response
{
"reseller": {
"name": string,
},
"prices": [
{
"uuid": string,
"plan": string,
"price": string,
"amount_customer": int,
"amount_reseller": int,
"cycle": "monthly"|"yearly",
}
]
}
Remarks
A plan can have various prices for end customers. These are listed in the
prices
array.Prices vary based on how much the customer is charged, how much the reseller earns and the invoicing cycle.
Price amounts (
amount_customer
,amount_reseller
) are returned in eurocents.
Endpoint: List All Sites
Returns all sites linked to your reseller account.
Endpoint
GET /api/v1/reseller/sites
Request
{
"page": int,
}
Response
{
"items": [
{
"uuid": string,
"domain": string,
"parent_site": string,
"is_active": true|false,
"is_trialing": true|false,
"is_subscribed": true|false,
"subscribed_plan": string|null,
"subscribed_price": string|null,
"access_to_prices": array<string>|null,
"is_top_level_domain": true|false,
"is_subdomain": true|false,
"has_http_consent_cookies_enabled": true|false,
"has_http_consent_cookies_enabled_via_worker": true|false,
}
],
"meta": {
"current_page": int,
"last_page": int,
"per_page": int,
"total": int,
}
}
Endpoint: Create A Site
Creates a new site under your reseller account. If it is not linked to a parent site with an active subscription, the site starts on a trial.
Endpoint
POST /api/v1/reseller/sites
Request
{
"domain": string,
"languages": array|null,
"enable_http_cookies": true|false|null,
"enable_http_cookies_via_worker": true|false|null,
"link_to_domain": string|null,
"link_to_uuid": string|null,
"primary_color": string|null,
"access_to_prices": array<string>|null,
}
Remarks
link_to_domain
andlink_to_uuid
are used to link this site to another domain for simplified/combined invoicing.link_to_domain
andlink_to_uuid
cannot both be present at the same time.primary_color
must be a color hex when present.access_to_prices
is a single-dimensional array of strings. Each string represents the UUID of a price. A price is a rate that the end customer pays and by which the reseller earns.When
access_to_prices
is empty, the customer can subscribe to Consent Studio pricing directly at rates advertised on https://consent.studio/pricing.
Response
{
"items": [
{
"uuid": string,
"domain": string,
"parent_site": string|null
"aliases": null|array<string>,
"languages": array<string>,
"last_health_check_at": null|string,
"primary_color": string,
"is_active": true|false,
"is_trialing": true|false,
"is_subscribed": true|false,
"subscribed_plan": string|null,
"subscribed_price": string|null,
"access_to_prices": array<string>|null,
"is_top_level_domain": true|false,
"is_subdomain": true|false,
"has_http_consent_cookies_enabled": true|false,
"has_http_consent_cookies_enabled_via_worker": true|false,
"has_functional_cookies": true|false,
"has_analytics_cookies": true|false,
"has_marketing_cookies": true|false,
"has_analytics_reprompting_enabled": true|false,
"has_marketing_reprompting_enabled": true|false,
}
]
}
Endpoint: View A Site
Get detailed information about a specific site using its UUID or domain.
Endpoint
GET /api/v1/reseller/sites/{uuid_or_domain}
Response
{
"items": [
{
"uuid": string,
"domain": string,
"parent_site": string|null
"aliases": null|array<string>,
"languages": array<string>,
"last_health_check_at": null|string,
"primary_color": string,
"is_active": true|false,
"is_trialing": true|false,
"is_subscribed": true|false,
"subscribed_plan": string|null,
"subscribed_price": string|null,
"access_to_prices": array<string>|null,
"is_top_level_domain": true|false,
"is_subdomain": true|false,
"has_http_consent_cookies_enabled": true|false,
"has_http_consent_cookies_enabled_via_worker": true|false,
"has_functional_cookies": true|false,
"has_analytics_cookies": true|false,
"has_marketing_cookies": true|false,
"has_analytics_reprompting_enabled": true|false,
"has_marketing_reprompting_enabled": true|false,
}
]
}
Endpoint: Update A Site
Update settings for a site, including language options, cookie settings, or linking it to a parent site by UUID or domain.
Endpoint
PATCH /api/v1/reseller/sites/{uuid_or_domain}
Request
{
"languages": array|null,
"enable_http_cookies": true|false|null,
"enable_http_cookies_via_worker": true|false|null,
"link_to_domain": string|null,
"link_to_uuid": string|null,
"primary_color": string|null,
}
Remarks
link_to_domain
andlink_to_uuid
are used to link this site to another domain for simplified/combined invoicing.link_to_domain
andlink_to_uuid
cannot both be present at the same time.primary_color
must be a color hex when present.
Response
{
"items": [
{
"uuid": string,
"domain": string,
"parent_site": string|null
"aliases": null|array<string>,
"languages": array<string>,
"last_health_check_at": null|string,
"primary_color": string,
"is_active": true|false,
"is_trialing": true|false,
"is_subscribed": true|false,
"subscribed_plan": string|null,
"subscribed_price": string|null,
"access_to_prices": array<string>|null,
"is_top_level_domain": true|false,
"is_subdomain": true|false,
"has_http_consent_cookies_enabled": true|false,
"has_http_consent_cookies_enabled_via_worker": true|false,
"has_functional_cookies": true|false,
"has_analytics_cookies": true|false,
"has_marketing_cookies": true|false,
"has_analytics_reprompting_enabled": true|false,
"has_marketing_reprompting_enabled": true|false,
}
]
}
Endpoint: Delete A Site
Permanently deletes a site from our systems and your reseller account.
When deleting a site/domain, all its information and consent action records will be deleted instantly. This action is irreversible.
Endpoint
DELETE /api/v1/reseller/sites/{uuid_or_domain}
Response
{
"message": "Site deleted"
}
Endpoint: Link a Site to a Subscribed Site
Link a site to a subscribed parent site, allowing the child site to share the parent’s plan. This updates the site’s subscription state and the quantity of on the parent's subscription plan.
PATCH /api/v1/reseller/sites/{uuid_or_domain}/link
Request
{
"target": string,
}
Remarks
target
can both be an UUID or a domain name.A top level site cannot become a child site of another child site.
Upon connecting new child sites to a top level site, the top level site's subscription quantities will be updated shortly.
Endpoint: Unlink A Site From Its Parent
Unlink a site from its parent site. This removes it from the parent site’s subscription and starts a new trial.
Endpoint
PATCH /api/v1/reseller/sites/{uuid_or_domain}/link
Response
{
"message": "Site deleted"
}
Remarks
Upon disconnecting a child site from a top level site, it will be considered a top level site again. However, it will not be subscribed anymore and a new trial will start. Please refer to our product website to see the standard length of any new trial.
Endpoint: Invite Users To Manage A Site
Endpoint
POST /api/v1/reseller/users/invite/{uuid_or_domain}
Request
{
"invite": array<string>|string,
}
Remarks
invite
will hold the e-mail addresses of the users that are to be invited. You are responsible yourself for retrieving consent for sharing personal identifiable information.
Response
{
"message": "Process completed",
"successful": array<string>,
"failed": array<string>,
}