API reference
Customer and Serial Management API
Current developer customer tables, serial inventory, imports, purchase history and manual access grants.
Use the current developer-scoped serial routes
For new integrations, use /api/developer/serials rather than the deprecated /api/serials table handlers. Account identity, workspace permissions and assigned products determine access. Supplying another developer ID or broadening a filter does not grant their records.
Lists use page, limit, search, dateRange and supported product filters. Serial inventory distinguishes available and redeemed. Purchases additionally accept channel, productIds, resellerId, provider, refundStatus, recordType, dateFrom and dateTo. IDs in historical or external purchase rows are not automatically refundable managed-checkout order IDs.
Generate and import deliberately
Serial generation requires an owned product and current billing eligibility. Prefix and expiry are inventory settings, not proof of a customer purchase. Reseller serial pools belong in Partners > Licenses; ordinary developer generation rejects reseller assignment.
Download the current CSV template before importing. Upload file as multipart data or send the named customers, serials or purchases JSON array. Product mappings must resolve to allowed products. A 207 result contains row errors and successful rows; correct the failures rather than replaying every row. Purchase imports do not collect payment, transfer billing authority or send purchase marketing messages.
SoundSync
Illustrative owned-product serial generation
curl --fail-with-body -sS -X POST "$SOUNDSYNC_API_BASE/api/developer/serials/generate" \
-H "Authorization: Bearer $DEVELOPER_TOKEN" \
-H "Content-Type: application/json" \
--data '{"productId":123,"quantity":5,"prefix":"DEMO"}'
Access, history and payment are separate
Activate, reactivate, deactivate, suspend, unsuspend and revoke are administrative serial actions. Hiding an order only changes its supported history presentation. Neither action refunds a payment.
Manual grants give the selected customer access to explicit products. Existing-serial assignment and subscription access grants have single-product restrictions. An access grant does not authorize billing; use the separate supported customer-confirmed payment setup when needed. Keep the reason and grant request reference for reconciliation.
Customer removal is not global account deletion
Removal requires customers.manage and confirm:true or confirmation:"yes". It removes the developer customer relationship and supported associated marketing records. Required purchases, financial history and global account identity are separate. Use the verified privacy-request procedure for broader deletion requests.
SoundSync
Related customer operations
SoundSync
Requests and responses
/api/developer/customers
Search developer-scoped customers
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- query page: integer
- query limit: integer
- query search: string
- query dateRange: string
- query productId: integer
- Returns
- HTTP 200: rows, total, page, pageSize.
- Notes
- Account permissions and assigned products determine scope; query filters cannot expand it. Purchase identifiers can include external/manual references; they are not all eligible managed-payment refund IDs.
Request, response and error reference
Query and header parameters
[
{
"name": "page",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "search",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "dateRange",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "productId",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
}
]
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"customer_id": {
"type": "integer",
"minimum": 1
},
"email": {
"type": "string",
"format": "email"
},
"first_name": {
"type": [
"string",
"null"
]
},
"last_name": {
"type": [
"string",
"null"
]
},
"status": {
"type": "string"
},
"email_verification_status": {
"type": "string"
}
},
"additionalProperties": true
}
},
"total": {
"type": "integer"
},
"page": {
"type": "integer"
},
"pageSize": {
"type": "integer"
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/customers/export
Export authorized customers as CSV
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- query page: integer
- query limit: integer
- query search: string
- query dateRange: string
- query productId: integer
- Returns
- HTTP 200: text/csv.
Request, response and error reference
Query and header parameters
[
{
"name": "page",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "search",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "dateRange",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "productId",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
}
]
No request body fields are read by this operation.
HTTP 200 response (text/csv)
{
"type": "string",
"format": "binary"
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/customers/demo-csv
Download the customers import template
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Returns
- HTTP 200: text/csv.
Request, response and error reference
No request body fields are read by this operation.
HTTP 200 response (text/csv)
{
"type": "string",
"format": "binary"
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/customers/import
Import reviewed customers rows
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- file: string
- customers: array
- productMappings: object. Operation-specific extension data; do not put credentials or unnecessary personal information here.
- Returns
- HTTP 201: success, importedCount, insertedCount, errors.
- Notes
- Send a CSV file under file or the named JSON row array. Inspect row errors on 207; do not blindly replay already imported rows. Product mappings do not bypass ownership. Purchase import does not collect payment or transfer provider billing authority and disables purchase marketing/email activity.
Request, response and error reference
Request (application/json or multipart/form-data)
{
"type": "object",
"properties": {
"file": {
"type": "string",
"format": "binary"
},
"customers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"productId": {
"type": "integer",
"minimum": 1
},
"productName": {
"type": "string"
},
"serialCode": {
"type": "string"
},
"price": {
"type": "number"
},
"salePrice": {
"type": "number"
},
"date": {
"type": "string"
}
},
"additionalProperties": true
}
},
"productMappings": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"additionalProperties": true
}
HTTP 201 response (application/json)
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"importedCount": {
"type": "integer"
},
"insertedCount": {
"type": "integer"
},
"errors": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials
Search serial inventory and device counts
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- query page: integer
- query limit: integer
- query search: string
- query dateRange: string
- query productId: integer
- query status: string
- Returns
- HTTP 200: rows, total, page, pageSize.
- Notes
- Account permissions and assigned products determine scope; query filters cannot expand it. Purchase identifiers can include external/manual references; they are not all eligible managed-payment refund IDs.
Request, response and error reference
Query and header parameters
[
{
"name": "page",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "search",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "dateRange",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "productId",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "status",
"in": "query",
"schema": {
"type": "string",
"enum": [
"available",
"redeemed"
]
},
"required": false,
"description": ""
}
]
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"serial": {
"type": "string"
},
"product_id": {
"type": "integer",
"minimum": 1
},
"product": {
"type": "string"
},
"customer_id": {
"type": [
"integer",
"null"
]
},
"status": {
"type": "string"
},
"redeemed": {
"type": "boolean"
},
"revoked": {
"type": "boolean"
},
"active_activation_count": {
"type": "integer"
},
"max_activations": {
"type": "integer"
},
"remaining_activations": {
"type": "integer"
}
},
"additionalProperties": true
}
},
"total": {
"type": "integer"
},
"page": {
"type": "integer"
},
"pageSize": {
"type": "integer"
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials/export
Export authorized serials as CSV
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- query page: integer
- query limit: integer
- query search: string
- query dateRange: string
- query productId: integer
- Returns
- HTTP 200: text/csv.
Request, response and error reference
Query and header parameters
[
{
"name": "page",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "search",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "dateRange",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "productId",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
}
]
No request body fields are read by this operation.
HTTP 200 response (text/csv)
{
"type": "string",
"format": "binary"
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials/demo-csv
Download the serials import template
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Returns
- HTTP 200: text/csv.
Request, response and error reference
No request body fields are read by this operation.
HTTP 200 response (text/csv)
{
"type": "string",
"format": "binary"
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials/import
Import reviewed serials rows
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- file: string
- serials: array
- productMappings: object. Operation-specific extension data; do not put credentials or unnecessary personal information here.
- Returns
- HTTP 201: success, importedCount, insertedCount, errors.
- Notes
- Send a CSV file under file or the named JSON row array. Inspect row errors on 207; do not blindly replay already imported rows. Product mappings do not bypass ownership. Purchase import does not collect payment or transfer provider billing authority and disables purchase marketing/email activity.
Request, response and error reference
Request (application/json or multipart/form-data)
{
"type": "object",
"properties": {
"file": {
"type": "string",
"format": "binary"
},
"serials": {
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"productId": {
"type": "integer",
"minimum": 1
},
"productName": {
"type": "string"
},
"serialCode": {
"type": "string"
},
"price": {
"type": "number"
},
"salePrice": {
"type": "number"
},
"date": {
"type": "string"
}
},
"additionalProperties": true
}
},
"productMappings": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"additionalProperties": true
}
HTTP 201 response (application/json)
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"importedCount": {
"type": "integer"
},
"insertedCount": {
"type": "integer"
},
"errors": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/purchases
Search purchases with order grouping and refund availability
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- query page: integer
- query limit: integer
- query search: string
- query dateRange: string
- query productId: integer
- query channel: string
- query productIds: string
- query resellerId: string
- query provider: string
- query refundStatus: string
- query recordType: string
- query dateFrom: string
- query dateTo: string
- Returns
- HTTP 200: rows, total, page, pageSize, canRefund.
- Notes
- Account permissions and assigned products determine scope; query filters cannot expand it. Purchase identifiers can include external/manual references; they are not all eligible managed-payment refund IDs.
Request, response and error reference
Query and header parameters
[
{
"name": "page",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "search",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "dateRange",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "productId",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "channel",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "productIds",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "resellerId",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "provider",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "refundStatus",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "recordType",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "dateFrom",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "dateTo",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
}
]
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"order_id": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"order_item_id": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"product_id": {
"type": "integer",
"minimum": 1
},
"product": {
"type": "string"
},
"customer_id": {
"type": "integer",
"minimum": 1
},
"status": {
"type": "string"
},
"invoice_available": {
"type": "boolean"
}
},
"additionalProperties": true
}
},
"total": {
"type": "integer"
},
"page": {
"type": "integer"
},
"pageSize": {
"type": "integer"
},
"canRefund": {
"type": "boolean"
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/purchases/export
Export authorized purchases as CSV
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- query page: integer
- query limit: integer
- query search: string
- query dateRange: string
- query productId: integer
- Returns
- HTTP 200: text/csv.
Request, response and error reference
Query and header parameters
[
{
"name": "page",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "search",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "dateRange",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "productId",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
}
]
No request body fields are read by this operation.
HTTP 200 response (text/csv)
{
"type": "string",
"format": "binary"
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/purchases/demo-csv
Download the purchases import template
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Returns
- HTTP 200: text/csv.
Request, response and error reference
No request body fields are read by this operation.
HTTP 200 response (text/csv)
{
"type": "string",
"format": "binary"
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/purchases/import
Import reviewed purchases rows
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- file: string
- purchases: array
- productMappings: object. Operation-specific extension data; do not put credentials or unnecessary personal information here.
- Returns
- HTTP 201: success, importedCount, insertedCount, errors.
- Notes
- Send a CSV file under file or the named JSON row array. Inspect row errors on 207; do not blindly replay already imported rows. Product mappings do not bypass ownership. Purchase import does not collect payment or transfer provider billing authority and disables purchase marketing/email activity.
Request, response and error reference
Request (application/json or multipart/form-data)
{
"type": "object",
"properties": {
"file": {
"type": "string",
"format": "binary"
},
"purchases": {
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"productId": {
"type": "integer",
"minimum": 1
},
"productName": {
"type": "string"
},
"serialCode": {
"type": "string"
},
"price": {
"type": "number"
},
"salePrice": {
"type": "number"
},
"date": {
"type": "string"
}
},
"additionalProperties": true
}
},
"productMappings": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"additionalProperties": true
}
HTTP 201 response (application/json)
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"importedCount": {
"type": "integer"
},
"insertedCount": {
"type": "integer"
},
"errors": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/customers/{customerId}
Remove supported developer customer information
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- confirm: boolean
- confirmation: string
- reason: string
- Returns
- HTTP 200: ok, alreadyRemoved, already_removed, customer_id, developer_customer_id, message.
- Notes
- Requires customers.manage and confirm:true or confirmation:"yes". This removes the developer contact relationship and supported marketing records, not the global account, purchases or required financial records. Review the account-closure and privacy-request guides.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"confirm": {
"type": "boolean"
},
"confirmation": {
"type": "string"
},
"reason": {
"type": "string"
}
},
"additionalProperties": true,
"anyOf": [
{
"properties": {
"confirm": {
"const": true
}
},
"required": [
"confirm"
]
},
{
"properties": {
"confirmation": {
"type": "string",
"pattern": "^\\s*[Yy][Ee][Ss]\\s*$"
}
},
"required": [
"confirmation"
]
}
]
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"alreadyRemoved": {
"type": "boolean"
},
"already_removed": {
"type": "boolean"
},
"customer_id": {
"type": "integer",
"minimum": 1
},
"developer_customer_id": {
"type": [
"integer",
"string",
"null"
]
},
"message": {
"type": "string"
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials/available-by-product
Group available serials by product and promotion
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- query page: integer
- query limit: integer
- query search: string
- query dateRange: string
- query productId: integer
- Returns
- HTTP 200: products, promos, rows, total, page, pageSize.
Request, response and error reference
Query and header parameters
[
{
"name": "page",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "search",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "dateRange",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "productId",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
}
]
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"products": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"promos": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"serial": {
"type": "string"
},
"product_id": {
"type": "integer",
"minimum": 1
},
"product": {
"type": "string"
},
"customer_id": {
"type": [
"integer",
"null"
]
},
"status": {
"type": "string"
},
"redeemed": {
"type": "boolean"
},
"revoked": {
"type": "boolean"
},
"active_activation_count": {
"type": "integer"
},
"max_activations": {
"type": "integer"
},
"remaining_activations": {
"type": "integer"
}
},
"additionalProperties": true
}
},
"total": {
"type": "integer"
},
"page": {
"type": "integer"
},
"pageSize": {
"type": "integer"
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials/resellers
List eligible relationship and legacy reseller references
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Returns
- HTTP 200: resellers.
Request, response and error reference
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"resellers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"name": {
"type": "string"
},
"kind": {
"type": "string"
},
"relationship_id": {
"type": "integer",
"minimum": 1
},
"developer_share_bps": {
"type": [
"integer",
"null"
]
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials/generate
Generate unique serials for an owned product
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- productId: integer (required)
- quantity: integer
- prefix: string
- expiresAt: string,null
- promoPrice: number
- promoStart: string,null
- promoExpires: string,null
- activeFrom: string,null
- activeTo: string,null
- batchTag: string
- notes: string
- Returns
- HTTP 201: message, count, product, serials.
- Notes
- product_id and corresponding snake_case date/price aliases remain accepted. Use Partners > Licenses for reseller serial pools; reseller assignment on this route returns PARTNER_POOL_REQUIRED. Existing billing and product-scope checks apply.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"productId": {
"type": "integer",
"minimum": 1
},
"quantity": {
"type": "integer",
"minimum": 1
},
"prefix": {
"type": "string"
},
"expiresAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"promoPrice": {
"type": "number"
},
"promoStart": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"promoExpires": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"activeFrom": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"activeTo": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"batchTag": {
"type": "string"
},
"notes": {
"type": "string"
}
},
"required": [
"productId"
],
"additionalProperties": true
}
HTTP 201 response (application/json)
{
"type": "object",
"properties": {
"message": {
"type": "string"
},
"count": {
"type": "integer"
},
"product": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string"
}
},
"additionalProperties": true
},
"serials": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"serial": {
"type": "string"
},
"product_id": {
"type": "integer",
"minimum": 1
},
"product": {
"type": "string"
},
"customer_id": {
"type": [
"integer",
"null"
]
},
"status": {
"type": "string"
},
"redeemed": {
"type": "boolean"
},
"revoked": {
"type": "boolean"
},
"active_activation_count": {
"type": "integer"
},
"max_activations": {
"type": "integer"
},
"remaining_activations": {
"type": "integer"
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials/{serialId}/activate
Apply the activate serial-access action
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- reason: string
- note: string
- Returns
- HTTP 200: serial, deactivatedActivations.
- Notes
- Changes developer-controlled serial access. It is not a provider refund, customer identity transfer or checkout payment. Revocation/suspension/deactivation can affect existing devices.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"reason": {
"type": "string"
},
"note": {
"type": "string"
}
},
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"serial": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"serial": {
"type": "string"
},
"product_id": {
"type": "integer",
"minimum": 1
},
"product": {
"type": "string"
},
"customer_id": {
"type": [
"integer",
"null"
]
},
"status": {
"type": "string"
},
"redeemed": {
"type": "boolean"
},
"revoked": {
"type": "boolean"
},
"active_activation_count": {
"type": "integer"
},
"max_activations": {
"type": "integer"
},
"remaining_activations": {
"type": "integer"
}
},
"additionalProperties": true
},
"deactivatedActivations": {
"type": "integer"
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials/{serialId}/reactivate
Apply the reactivate serial-access action
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- reason: string
- note: string
- Returns
- HTTP 200: serial, deactivatedActivations.
- Notes
- Changes developer-controlled serial access. It is not a provider refund, customer identity transfer or checkout payment. Revocation/suspension/deactivation can affect existing devices.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"reason": {
"type": "string"
},
"note": {
"type": "string"
}
},
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"serial": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"serial": {
"type": "string"
},
"product_id": {
"type": "integer",
"minimum": 1
},
"product": {
"type": "string"
},
"customer_id": {
"type": [
"integer",
"null"
]
},
"status": {
"type": "string"
},
"redeemed": {
"type": "boolean"
},
"revoked": {
"type": "boolean"
},
"active_activation_count": {
"type": "integer"
},
"max_activations": {
"type": "integer"
},
"remaining_activations": {
"type": "integer"
}
},
"additionalProperties": true
},
"deactivatedActivations": {
"type": "integer"
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials/{serialId}/deactivate
Apply the deactivate serial-access action
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- reason: string
- note: string
- Returns
- HTTP 200: serial, deactivatedActivations.
- Notes
- Changes developer-controlled serial access. It is not a provider refund, customer identity transfer or checkout payment. Revocation/suspension/deactivation can affect existing devices.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"reason": {
"type": "string"
},
"note": {
"type": "string"
}
},
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"serial": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"serial": {
"type": "string"
},
"product_id": {
"type": "integer",
"minimum": 1
},
"product": {
"type": "string"
},
"customer_id": {
"type": [
"integer",
"null"
]
},
"status": {
"type": "string"
},
"redeemed": {
"type": "boolean"
},
"revoked": {
"type": "boolean"
},
"active_activation_count": {
"type": "integer"
},
"max_activations": {
"type": "integer"
},
"remaining_activations": {
"type": "integer"
}
},
"additionalProperties": true
},
"deactivatedActivations": {
"type": "integer"
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials/{serialId}/suspend
Apply the suspend serial-access action
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- reason: string
- note: string
- Returns
- HTTP 200: serial, deactivatedActivations.
- Notes
- Changes developer-controlled serial access. It is not a provider refund, customer identity transfer or checkout payment. Revocation/suspension/deactivation can affect existing devices.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"reason": {
"type": "string"
},
"note": {
"type": "string"
}
},
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"serial": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"serial": {
"type": "string"
},
"product_id": {
"type": "integer",
"minimum": 1
},
"product": {
"type": "string"
},
"customer_id": {
"type": [
"integer",
"null"
]
},
"status": {
"type": "string"
},
"redeemed": {
"type": "boolean"
},
"revoked": {
"type": "boolean"
},
"active_activation_count": {
"type": "integer"
},
"max_activations": {
"type": "integer"
},
"remaining_activations": {
"type": "integer"
}
},
"additionalProperties": true
},
"deactivatedActivations": {
"type": "integer"
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials/{serialId}/unsuspend
Apply the unsuspend serial-access action
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- reason: string
- note: string
- Returns
- HTTP 200: serial, deactivatedActivations.
- Notes
- Changes developer-controlled serial access. It is not a provider refund, customer identity transfer or checkout payment. Revocation/suspension/deactivation can affect existing devices.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"reason": {
"type": "string"
},
"note": {
"type": "string"
}
},
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"serial": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"serial": {
"type": "string"
},
"product_id": {
"type": "integer",
"minimum": 1
},
"product": {
"type": "string"
},
"customer_id": {
"type": [
"integer",
"null"
]
},
"status": {
"type": "string"
},
"redeemed": {
"type": "boolean"
},
"revoked": {
"type": "boolean"
},
"active_activation_count": {
"type": "integer"
},
"max_activations": {
"type": "integer"
},
"remaining_activations": {
"type": "integer"
}
},
"additionalProperties": true
},
"deactivatedActivations": {
"type": "integer"
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials/{serialId}/revoke
Apply the revoke serial-access action
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- reason: string
- note: string
- Returns
- HTTP 200: serial, deactivatedActivations.
- Notes
- Changes developer-controlled serial access. It is not a provider refund, customer identity transfer or checkout payment. Revocation/suspension/deactivation can affect existing devices.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"reason": {
"type": "string"
},
"note": {
"type": "string"
}
},
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"serial": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"serial": {
"type": "string"
},
"product_id": {
"type": "integer",
"minimum": 1
},
"product": {
"type": "string"
},
"customer_id": {
"type": [
"integer",
"null"
]
},
"status": {
"type": "string"
},
"redeemed": {
"type": "boolean"
},
"revoked": {
"type": "boolean"
},
"active_activation_count": {
"type": "integer"
},
"max_activations": {
"type": "integer"
},
"remaining_activations": {
"type": "integer"
}
},
"additionalProperties": true
},
"deactivatedActivations": {
"type": "integer"
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials/{serialId}/customer-portal-order/hide
Hide the supported order from customer history
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- reason: string
- note: string
- Returns
- HTTP 200: serialId, serial, orderId, customerPortalHidden.
- Notes
- Changes history presentation, not product ownership or payment/refund state.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"reason": {
"type": "string"
},
"note": {
"type": "string"
}
},
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"serialId": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"serial": {
"type": "string"
},
"orderId": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"customerPortalHidden": {
"type": "boolean"
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/serials/{serialId}/customer-portal-order/show
Show the supported order in customer history
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- reason: string
- note: string
- Returns
- HTTP 200: serialId, serial, orderId, customerPortalHidden.
- Notes
- Changes history presentation, not product ownership or payment/refund state.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"reason": {
"type": "string"
},
"note": {
"type": "string"
}
},
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"serialId": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"serial": {
"type": "string"
},
"orderId": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"customerPortalHidden": {
"type": "boolean"
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/purchases/filter-options
Read permitted purchase product and reseller filters
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Returns
- HTTP 200: products, resellers.
Request, response and error reference
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"products": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string"
}
},
"additionalProperties": true
}
},
"resellers": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
/api/developer/purchases/manual-grant
Grant authorized product access without collecting payment
- Auth
- Account Bearer JWT
- Scope
- Authenticated account, effective developer workspace, applicable permissions and product ownership. Read the operation notes for legacy or owner-only restrictions.
- Request fields
- productId: integer
- productIds: array
- email: string
- firstName: string
- lastName: string
- customerId: integer
- grantType: string
- grantRequestId: string
- reason: string
- note: string
- serialId: integer
- sendProductPurchaseEmails: boolean
- Returns
- HTTP 201: success, grantType, count, createdCount, skippedCount, created, grants, products, purchases, items, entitlements, serials.
- Notes
- Choose explicit products and customer identity. Existing-serial assignment and subscription grants are single-product operations. Reuse grantRequestId only for the same intended grant. A subscription access grant does not authorize recurring charges; manual billing setup and confirmation are separate.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"productId": {
"type": "integer",
"minimum": 1
},
"productIds": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
}
},
"email": {
"type": "string",
"format": "email"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"customerId": {
"type": "integer",
"minimum": 1
},
"grantType": {
"type": "string"
},
"grantRequestId": {
"type": "string"
},
"reason": {
"type": "string"
},
"note": {
"type": "string"
},
"serialId": {
"type": "integer",
"minimum": 1
},
"sendProductPurchaseEmails": {
"type": "boolean"
}
},
"additionalProperties": true
}
HTTP 201 response (application/json)
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"grantType": {
"type": "string"
},
"count": {
"type": "integer"
},
"createdCount": {
"type": "integer"
},
"skippedCount": {
"type": "integer"
},
"created": {
"type": "boolean"
},
"grants": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"products": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string"
},
"title": {
"type": "string"
},
"slug": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"shortDescription": {
"type": [
"string",
"null"
]
},
"price": {
"type": "number"
},
"salePrice": {
"type": [
"number",
"null"
]
},
"regularPrice": {
"type": "number"
},
"displayPrice": {
"type": "number"
},
"priceDisplay": {
"type": "string"
},
"regularPriceDisplay": {
"type": "string"
},
"salePriceDisplay": {
"type": [
"string",
"null"
]
},
"isOnSale": {
"type": "boolean"
},
"currency": {
"type": "string"
},
"imageUrl": {
"type": [
"string",
"null"
]
},
"coverImage": {
"type": [
"string",
"null"
]
},
"developerId": {
"type": "integer",
"minimum": 1
},
"developerName": {
"type": "string"
},
"developer": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string"
},
"slug": {
"type": [
"string",
"null"
]
},
"profileUrl": {
"type": [
"string",
"null"
]
},
"verified": {
"type": "boolean"
}
},
"additionalProperties": true
},
"productType": {
"type": "string"
},
"productTypes": {
"type": "array",
"items": {
"type": "string"
}
},
"categories": {
"type": "array",
"items": {
"type": "string"
}
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"url": {
"type": "string"
},
"subscriptionEnabled": {
"type": "boolean"
},
"billingInterval": {
"type": [
"string",
"null"
]
},
"checkoutEligible": {
"type": "boolean"
},
"capabilities": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"requiresActivation": {
"type": "boolean"
},
"supportsSerials": {
"type": "boolean"
},
"supportsDownloads": {
"type": "boolean"
},
"marketplaceAsset": {
"type": [
"object",
"null"
],
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"additionalProperties": true
}
},
"purchases": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"items": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"entitlements": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"serials": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
],
"minLength": 1
},
"serial": {
"type": "string"
},
"product_id": {
"type": "integer",
"minimum": 1
},
"product": {
"type": "string"
},
"customer_id": {
"type": [
"integer",
"null"
]
},
"status": {
"type": "string"
},
"redeemed": {
"type": "boolean"
},
"revoked": {
"type": "boolean"
},
"active_activation_count": {
"type": "integer"
},
"max_activations": {
"type": "integer"
},
"remaining_activations": {
"type": "integer"
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 409, 500.
