API reference
Revenue and Activity Reporting API
Read sale results, recorded payment issues, current charges and marketplace/share records without moving funds.
Choose the report that answers the question
/api/developer/revenue/summary wraps its result in summary. analytics-summary returns a multi-section overview directly. products groups results by product; timeline groups by day, week or month; transactions returns paginated product-level sale rows. All of these /revenue routes require analytics.view and all-products workspace scope.
Use shares for sale-share records and marketplace for the marketplace-attributed subset. These reports do not replace the affiliate/collaborator recipient settlement ledger, authorize a transfer, or prove bank receipt. Imported/external records and managed-payment records have different collection and accounting meanings. SoundSync covers ordinary processing only for SoundSync-managed checkout, not external reseller sales.
SoundSync
Illustrative reporting request
curl --fail-with-body -sS "$SOUNDSYNC_API_BASE/api/developer/revenue/transactions?range=30d¤cy=usd&environment=live&page=1&limit=25" \
-H "Authorization: Bearer $DEVELOPER_TOKEN"
Read the returned scope and availability
Revenue ranges support today, 7d, 30d, 90d, current_month and previous_month, or an explicit startDate/endDate. Check the returned start_date, end_date, currency and environment. Monetary fields ending in _cents are integer minor units, not displayed dollars; USD values are cents. Reporting accepts a three-letter currency filter for recorded data and does not convert currencies or enable non-USD checkout. Net sales, tax collected, fees, recipient allocations and estimated developer earnings are different figures; none is a provider transfer confirmation.
Current-month charges use the current UTC calendar month. The multi-section overview can return unavailable_sections; an unavailable section is not zero revenue or zero activity. Some figures depend on recorded events. Keep live and test reports distinct. Filters and product IDs cannot expand the authorized workspace.
Investigate refunds without initiating one
GET refunds-disputes returns rows with pagination and normalized filters. Detail uses /refunds-disputes/{type}/{orderId}, where type is refund or dispute and orderId identifies the owned order. Read its order, products, access impact, ledger and timeline. A missing permitted issue returns 404.
These calls are read-only. They do not preview current refund eligibility, reserve the 14-day deadline or refund a product. Use the purchase Refund API for preview and confirmed initiation. Do not expose private customer, order or ledger data in public dashboards.
Keep the three activity feeds distinct
/api/developer/revenue/activity reports recorded revenue/access activity. /api/developer/analytics/activity combines recorded website, plugin, email, download and usage events with assigned-product filtering. /api/developer/activity is the private platform-event feed. They do not have interchangeable schemas or retention guarantees.
The /analytics/overview route supports selected-product teammates only when one assigned product is resolved; a selected scope spanning several products must select one. Older /analytics/revenue compatibility routes have their own scope checks. Do not assume that every analytics route grants a workspace-wide report.
SoundSync
Related financial references
SoundSync
Requests and responses
/api/developer/revenue/summary
Read the current developer revenue summary
- Auth
- Account Bearer JWT
- Scope
- analytics.view and all-products workspace scope. Filters never expand the effective developer workspace.
- Request fields
- query range: value
- query startDate: string
- query endDate: string
- query currency: string
- query environment: value
- query productId: integer
- Returns
- HTTP 200: summary.
- Notes
- Read-only report, not payment execution or a refund action. Monetary *_cents fields are integer cents; estimated earnings are not a bank transfer. Follow returned availability and scope. Current-month charges use the current UTC calendar month, not an arbitrary requested historical range. Summary/products/activity/charges have compatible /analytics/revenue routes with their own access guards.
Request, response and error reference
Query and header parameters
[
{
"name": "range",
"in": "query",
"schema": {
"enum": [
"today",
"7d",
"30d",
"90d",
"current_month",
"previous_month"
]
},
"required": false,
"description": ""
},
{
"name": "startDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "endDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "currency",
"in": "query",
"schema": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "usd"
},
"required": false,
"description": ""
},
{
"name": "environment",
"in": "query",
"schema": {
"enum": [
"live",
"test"
]
},
"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": {
"summary": {
"type": "object",
"properties": {
"range": {
"type": "string"
},
"start_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"end_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currency": {
"type": "string"
},
"environment": {
"type": "string"
},
"gross_revenue_cents": {
"type": "integer"
},
"discount_total_cents": {
"type": "integer"
},
"tax_collected_cents": {
"type": "integer"
},
"refund_total_cents": {
"type": "integer"
},
"chargeback_total_cents": {
"type": "integer"
},
"disputed_total_cents": {
"type": "integer"
},
"platform_fees_cents": {
"type": "integer"
},
"marketplace_fees_cents": {
"type": "integer"
},
"net_revenue_cents": {
"type": "integer"
},
"estimated_net_revenue_cents": {
"type": "integer"
},
"developer_earnings_cents": {
"type": "integer"
},
"affiliate_share_cents": {
"type": "integer"
},
"collaborator_share_cents": {
"type": "integer"
},
"total_orders": {
"type": "integer"
},
"unique_customers": {
"type": "integer"
},
"revenue_breakdown": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 500, 503.
/api/developer/revenue/analytics-summary
Read the multi-section revenue overview
- Auth
- Account Bearer JWT
- Scope
- analytics.view and all-products workspace scope. Filters never expand the effective developer workspace.
- Request fields
- query range: value
- query startDate: string
- query endDate: string
- query currency: string
- query environment: value
- query productId: integer
- Returns
- HTTP 200: currency, environment, unavailable_sections, summary, windows, dashboard_metrics, current_month_charges, timeline, products, product_performance, customer_behavior, storefront_traffic, email_marketing, subscription_analytics, refunds_disputes, licensing_analytics, activity, customer_locations, calculation_rules.
- Notes
- Read-only report, not payment execution or a refund action. Monetary *_cents fields are integer cents; estimated earnings are not a bank transfer. Follow returned availability and scope. Current-month charges use the current UTC calendar month, not an arbitrary requested historical range. Summary/products/activity/charges have compatible /analytics/revenue routes with their own access guards.
Request, response and error reference
Query and header parameters
[
{
"name": "range",
"in": "query",
"schema": {
"enum": [
"today",
"7d",
"30d",
"90d",
"current_month",
"previous_month"
]
},
"required": false,
"description": ""
},
{
"name": "startDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "endDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "currency",
"in": "query",
"schema": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "usd"
},
"required": false,
"description": ""
},
{
"name": "environment",
"in": "query",
"schema": {
"enum": [
"live",
"test"
]
},
"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": {
"currency": {
"type": "string"
},
"environment": {
"type": "string"
},
"unavailable_sections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"message": {
"type": "string"
}
},
"additionalProperties": true
}
},
"summary": {
"type": "object",
"properties": {
"range": {
"type": "string"
},
"start_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"end_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currency": {
"type": "string"
},
"environment": {
"type": "string"
},
"gross_revenue_cents": {
"type": "integer"
},
"discount_total_cents": {
"type": "integer"
},
"tax_collected_cents": {
"type": "integer"
},
"refund_total_cents": {
"type": "integer"
},
"chargeback_total_cents": {
"type": "integer"
},
"disputed_total_cents": {
"type": "integer"
},
"platform_fees_cents": {
"type": "integer"
},
"marketplace_fees_cents": {
"type": "integer"
},
"net_revenue_cents": {
"type": "integer"
},
"estimated_net_revenue_cents": {
"type": "integer"
},
"developer_earnings_cents": {
"type": "integer"
},
"affiliate_share_cents": {
"type": "integer"
},
"collaborator_share_cents": {
"type": "integer"
},
"total_orders": {
"type": "integer"
},
"unique_customers": {
"type": "integer"
},
"revenue_breakdown": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"additionalProperties": true
},
"windows": {
"type": "object",
"properties": {
"current_or_selected": {
"type": "object",
"properties": {
"range": {
"type": "string"
},
"start_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"end_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currency": {
"type": "string"
},
"environment": {
"type": "string"
},
"gross_revenue_cents": {
"type": "integer"
},
"discount_total_cents": {
"type": "integer"
},
"tax_collected_cents": {
"type": "integer"
},
"refund_total_cents": {
"type": "integer"
},
"chargeback_total_cents": {
"type": "integer"
},
"disputed_total_cents": {
"type": "integer"
},
"platform_fees_cents": {
"type": "integer"
},
"marketplace_fees_cents": {
"type": "integer"
},
"net_revenue_cents": {
"type": "integer"
},
"estimated_net_revenue_cents": {
"type": "integer"
},
"developer_earnings_cents": {
"type": "integer"
},
"affiliate_share_cents": {
"type": "integer"
},
"collaborator_share_cents": {
"type": "integer"
},
"total_orders": {
"type": "integer"
},
"unique_customers": {
"type": "integer"
},
"revenue_breakdown": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"additionalProperties": true
},
"last_30_days": {
"type": "object",
"properties": {
"range": {
"type": "string"
},
"start_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"end_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currency": {
"type": "string"
},
"environment": {
"type": "string"
},
"gross_revenue_cents": {
"type": "integer"
},
"discount_total_cents": {
"type": "integer"
},
"tax_collected_cents": {
"type": "integer"
},
"refund_total_cents": {
"type": "integer"
},
"chargeback_total_cents": {
"type": "integer"
},
"disputed_total_cents": {
"type": "integer"
},
"platform_fees_cents": {
"type": "integer"
},
"marketplace_fees_cents": {
"type": "integer"
},
"net_revenue_cents": {
"type": "integer"
},
"estimated_net_revenue_cents": {
"type": "integer"
},
"developer_earnings_cents": {
"type": "integer"
},
"affiliate_share_cents": {
"type": "integer"
},
"collaborator_share_cents": {
"type": "integer"
},
"total_orders": {
"type": "integer"
},
"unique_customers": {
"type": "integer"
},
"revenue_breakdown": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"additionalProperties": true
},
"previous_month": {
"type": "object",
"properties": {
"range": {
"type": "string"
},
"start_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"end_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currency": {
"type": "string"
},
"environment": {
"type": "string"
},
"gross_revenue_cents": {
"type": "integer"
},
"discount_total_cents": {
"type": "integer"
},
"tax_collected_cents": {
"type": "integer"
},
"refund_total_cents": {
"type": "integer"
},
"chargeback_total_cents": {
"type": "integer"
},
"disputed_total_cents": {
"type": "integer"
},
"platform_fees_cents": {
"type": "integer"
},
"marketplace_fees_cents": {
"type": "integer"
},
"net_revenue_cents": {
"type": "integer"
},
"estimated_net_revenue_cents": {
"type": "integer"
},
"developer_earnings_cents": {
"type": "integer"
},
"affiliate_share_cents": {
"type": "integer"
},
"collaborator_share_cents": {
"type": "integer"
},
"total_orders": {
"type": "integer"
},
"unique_customers": {
"type": "integer"
},
"revenue_breakdown": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"dashboard_metrics": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"current_month_charges": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"timeline": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"products": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"product_performance": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"customer_behavior": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"storefront_traffic": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"email_marketing": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"subscription_analytics": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"refunds_disputes": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"licensing_analytics": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"activity": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"customer_locations": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"calculation_rules": {
"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, 500, 503.
/api/developer/revenue/products
Read revenue grouped by product
- Auth
- Account Bearer JWT
- Scope
- analytics.view and all-products workspace scope. Filters never expand the effective developer workspace.
- Request fields
- query range: value
- query startDate: string
- query endDate: string
- query currency: string
- query environment: value
- query productId: integer
- query sort: string
- Returns
- HTTP 200: range, start_date, end_date, currency, environment, sort, products.
- Notes
- Read-only report, not payment execution or a refund action. Monetary *_cents fields are integer cents; estimated earnings are not a bank transfer. Follow returned availability and scope. Current-month charges use the current UTC calendar month, not an arbitrary requested historical range. Summary/products/activity/charges have compatible /analytics/revenue routes with their own access guards.
Request, response and error reference
Query and header parameters
[
{
"name": "range",
"in": "query",
"schema": {
"enum": [
"today",
"7d",
"30d",
"90d",
"current_month",
"previous_month"
]
},
"required": false,
"description": ""
},
{
"name": "startDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "endDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "currency",
"in": "query",
"schema": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "usd"
},
"required": false,
"description": ""
},
{
"name": "environment",
"in": "query",
"schema": {
"enum": [
"live",
"test"
]
},
"required": false,
"description": ""
},
{
"name": "productId",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "sort",
"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": {
"range": {
"type": "string"
},
"start_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"end_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currency": {
"type": "string"
},
"environment": {
"type": "string"
},
"sort": {
"type": "string"
},
"products": {
"type": "array",
"items": {
"type": "object",
"properties": {
"product_id": {
"type": "integer",
"minimum": 1
},
"product_name": {
"type": "string"
},
"gross_revenue_cents": {
"type": "integer"
},
"net_revenue_cents": {
"type": "integer"
},
"estimated_net_revenue_cents": {
"type": "integer"
},
"order_count": {
"type": "integer"
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 500, 503.
/api/developer/revenue/timeline
Read revenue grouped by day, week or month
- Auth
- Account Bearer JWT
- Scope
- analytics.view and all-products workspace scope. Filters never expand the effective developer workspace.
- Request fields
- query range: value
- query startDate: string
- query endDate: string
- query currency: string
- query environment: value
- query productId: integer
- query group: value
- Returns
- HTTP 200: range, start_date, end_date, currency, environment, group, timeline.
- Notes
- Read-only report, not payment execution or a refund action. Monetary *_cents fields are integer cents; estimated earnings are not a bank transfer. Follow returned availability and scope. Current-month charges use the current UTC calendar month, not an arbitrary requested historical range. Summary/products/activity/charges have compatible /analytics/revenue routes with their own access guards.
Request, response and error reference
Query and header parameters
[
{
"name": "range",
"in": "query",
"schema": {
"enum": [
"today",
"7d",
"30d",
"90d",
"current_month",
"previous_month"
]
},
"required": false,
"description": ""
},
{
"name": "startDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "endDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "currency",
"in": "query",
"schema": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "usd"
},
"required": false,
"description": ""
},
{
"name": "environment",
"in": "query",
"schema": {
"enum": [
"live",
"test"
]
},
"required": false,
"description": ""
},
{
"name": "productId",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "group",
"in": "query",
"schema": {
"enum": [
"day",
"week",
"month"
]
},
"required": false,
"description": ""
}
]
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"range": {
"type": "string"
},
"start_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"end_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currency": {
"type": "string"
},
"environment": {
"type": "string"
},
"group": {
"type": "string"
},
"timeline": {
"type": "array",
"items": {
"type": "object",
"properties": {
"period": {
"type": "string"
},
"gross_revenue_cents": {
"type": "integer"
},
"net_revenue_cents": {
"type": "integer"
},
"estimated_net_revenue_cents": {
"type": "integer"
},
"orders": {
"type": "integer"
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 500, 503.
/api/developer/revenue/transactions
Read paginated product-level sale rows
- Auth
- Account Bearer JWT
- Scope
- analytics.view and all-products workspace scope. Filters never expand the effective developer workspace.
- Request fields
- query range: value
- query startDate: string
- query endDate: string
- query currency: string
- query environment: value
- query productId: integer
- query page: integer
- query limit: integer
- query offset: integer
- Returns
- HTTP 200: range, start_date, end_date, currency, environment, page, limit, offset, total, has_more, transactions.
- Notes
- Read-only report, not payment execution or a refund action. Monetary *_cents fields are integer cents; estimated earnings are not a bank transfer. Follow returned availability and scope. Current-month charges use the current UTC calendar month, not an arbitrary requested historical range. Summary/products/activity/charges have compatible /analytics/revenue routes with their own access guards.
Request, response and error reference
Query and header parameters
[
{
"name": "range",
"in": "query",
"schema": {
"enum": [
"today",
"7d",
"30d",
"90d",
"current_month",
"previous_month"
]
},
"required": false,
"description": ""
},
{
"name": "startDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "endDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "currency",
"in": "query",
"schema": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "usd"
},
"required": false,
"description": ""
},
{
"name": "environment",
"in": "query",
"schema": {
"enum": [
"live",
"test"
]
},
"required": false,
"description": ""
},
{
"name": "productId",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"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": "offset",
"in": "query",
"schema": {
"type": "integer"
},
"required": false,
"description": ""
}
]
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"range": {
"type": "string"
},
"start_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"end_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currency": {
"type": "string"
},
"environment": {
"type": "string"
},
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"offset": {
"type": "integer"
},
"total": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"transactions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"order_id": {
"type": "integer",
"minimum": 1
},
"order_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"product": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string"
}
},
"additionalProperties": true
},
"customer": {
"type": [
"object",
"null"
]
},
"gross_amount_cents": {
"type": "integer"
},
"refund_amount_cents": {
"type": "integer"
},
"net_amount_cents": {
"type": "integer"
},
"estimated_net_amount_cents": {
"type": "integer"
},
"order_source": {
"type": "string"
},
"sale_channel": {
"type": "string"
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 500, 503.
/api/developer/revenue/activity
Read recorded revenue and access activity
- Auth
- Account Bearer JWT
- Scope
- analytics.view and all-products workspace scope. Filters never expand the effective developer workspace.
- Request fields
- query range: value
- query startDate: string
- query endDate: string
- query currency: string
- query environment: value
- query productId: integer
- query limit: integer
- Returns
- HTTP 200: range, start_date, end_date, currency, environment, limit, activity, backend_gaps.
- Notes
- Read-only report, not payment execution or a refund action. Monetary *_cents fields are integer cents; estimated earnings are not a bank transfer. Follow returned availability and scope. Current-month charges use the current UTC calendar month, not an arbitrary requested historical range. Summary/products/activity/charges have compatible /analytics/revenue routes with their own access guards.
Request, response and error reference
Query and header parameters
[
{
"name": "range",
"in": "query",
"schema": {
"enum": [
"today",
"7d",
"30d",
"90d",
"current_month",
"previous_month"
]
},
"required": false,
"description": ""
},
{
"name": "startDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "endDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "currency",
"in": "query",
"schema": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "usd"
},
"required": false,
"description": ""
},
{
"name": "environment",
"in": "query",
"schema": {
"enum": [
"live",
"test"
]
},
"required": false,
"description": ""
},
{
"name": "productId",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "limit",
"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": {
"range": {
"type": "string"
},
"start_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"end_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currency": {
"type": "string"
},
"environment": {
"type": "string"
},
"limit": {
"type": "integer"
},
"activity": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"source": {
"type": "string"
},
"source_id": {
"type": [
"string",
"number"
]
},
"occurred_at": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"amount_cents": {
"type": [
"integer",
"null"
]
},
"currency": {
"type": [
"string",
"null"
]
},
"product": {
"type": [
"object",
"null"
]
},
"status": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": true
}
},
"backend_gaps": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 500, 503.
/api/developer/revenue/current-month-charges
Read current-month billed and usage charge estimates
- Auth
- Account Bearer JWT
- Scope
- analytics.view and all-products workspace scope. Filters never expand the effective developer workspace.
- Request fields
- query range: value
- query startDate: string
- query endDate: string
- query currency: string
- query environment: value
- query productId: integer
- Returns
- HTTP 200: charges.
- Notes
- Read-only report, not payment execution or a refund action. Monetary *_cents fields are integer cents; estimated earnings are not a bank transfer. Follow returned availability and scope. Current-month charges use the current UTC calendar month, not an arbitrary requested historical range. Summary/products/activity/charges have compatible /analytics/revenue routes with their own access guards.
Request, response and error reference
Query and header parameters
[
{
"name": "range",
"in": "query",
"schema": {
"enum": [
"today",
"7d",
"30d",
"90d",
"current_month",
"previous_month"
]
},
"required": false,
"description": ""
},
{
"name": "startDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "endDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "currency",
"in": "query",
"schema": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "usd"
},
"required": false,
"description": ""
},
{
"name": "environment",
"in": "query",
"schema": {
"enum": [
"live",
"test"
]
},
"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": {
"charges": {
"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, 500, 503.
/api/developer/revenue/shares
Read developer sale-share records
- Auth
- Account Bearer JWT
- Scope
- analytics.view and all-products workspace scope. Filters never expand the effective developer workspace.
- Request fields
- query range: value
- query startDate: string
- query endDate: string
- query currency: string
- query environment: value
- query productId: integer
- query page: integer
- query limit: integer
- query offset: integer
- Returns
- HTTP 200: range, start_date, end_date, currency, environment, summary, page, limit, offset, total, has_more, shares.
- Notes
- Read-only report, not payment execution or a refund action. Monetary *_cents fields are integer cents; estimated earnings are not a bank transfer. Follow returned availability and scope. Current-month charges use the current UTC calendar month, not an arbitrary requested historical range. Summary/products/activity/charges have compatible /analytics/revenue routes with their own access guards.
Request, response and error reference
Query and header parameters
[
{
"name": "range",
"in": "query",
"schema": {
"enum": [
"today",
"7d",
"30d",
"90d",
"current_month",
"previous_month"
]
},
"required": false,
"description": ""
},
{
"name": "startDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "endDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "currency",
"in": "query",
"schema": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "usd"
},
"required": false,
"description": ""
},
{
"name": "environment",
"in": "query",
"schema": {
"enum": [
"live",
"test"
]
},
"required": false,
"description": ""
},
{
"name": "productId",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"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": "offset",
"in": "query",
"schema": {
"type": "integer"
},
"required": false,
"description": ""
}
]
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"range": {
"type": "string"
},
"start_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"end_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currency": {
"type": "string"
},
"environment": {
"type": "string"
},
"summary": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"offset": {
"type": "integer"
},
"total": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"shares": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"order_id": {
"type": "integer",
"minimum": 1
},
"order_item_id": {
"type": "integer",
"minimum": 1
},
"occurred_at": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"sale_source": {
"type": "string"
},
"payment_state": {
"type": [
"string",
"null"
]
},
"product": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string"
}
},
"additionalProperties": true
},
"gross_amount_cents": {
"type": "integer"
},
"platform_fee_cents": {
"type": "integer"
},
"developer_share_cents": {
"type": "integer"
},
"reseller_share_cents": {
"type": "integer"
},
"currency": {
"type": "string"
},
"fee_model": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 500, 503.
/api/developer/revenue/marketplace
Read marketplace-attributed developer sale shares
- Auth
- Account Bearer JWT
- Scope
- analytics.view and all-products workspace scope. Filters never expand the effective developer workspace.
- Request fields
- query range: value
- query startDate: string
- query endDate: string
- query currency: string
- query environment: value
- query productId: integer
- Returns
- HTTP 200: range, start_date, end_date, currency, environment, summary, page, limit, offset, total, has_more, shares.
- Notes
- Uses the share-report shape with marketplace-only filtering. Attribution is not a second SoundSync fee or proof of a completed recipient payout.
Request, response and error reference
Query and header parameters
[
{
"name": "range",
"in": "query",
"schema": {
"enum": [
"today",
"7d",
"30d",
"90d",
"current_month",
"previous_month"
]
},
"required": false,
"description": ""
},
{
"name": "startDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "endDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "currency",
"in": "query",
"schema": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "usd"
},
"required": false,
"description": ""
},
{
"name": "environment",
"in": "query",
"schema": {
"enum": [
"live",
"test"
]
},
"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": {
"range": {
"type": "string"
},
"start_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"end_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currency": {
"type": "string"
},
"environment": {
"type": "string"
},
"summary": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"offset": {
"type": "integer"
},
"total": {
"type": "integer"
},
"has_more": {
"type": "boolean"
},
"shares": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"order_id": {
"type": "integer",
"minimum": 1
},
"order_item_id": {
"type": "integer",
"minimum": 1
},
"occurred_at": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"sale_source": {
"type": "string"
},
"payment_state": {
"type": [
"string",
"null"
]
},
"product": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string"
}
},
"additionalProperties": true
},
"gross_amount_cents": {
"type": "integer"
},
"platform_fee_cents": {
"type": "integer"
},
"developer_share_cents": {
"type": "integer"
},
"reseller_share_cents": {
"type": "integer"
},
"currency": {
"type": "string"
},
"fee_model": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 500, 503.
/api/developer/revenue/refunds-disputes
Read recorded refunds and disputes
- Auth
- Account Bearer JWT
- Scope
- analytics.view and all-products workspace scope. Filters never expand the effective developer workspace.
- Request fields
- query type: string
- query status: string
- query q: string
- query search: string
- query orderId: string
- query productId: string
- query startDate: string
- query endDate: string
- query dateBasis: string
- query minAmountCents: string
- query maxAmountCents: string
- query needsAttention: string
- query sort: string
- query limit: string
- query offset: string
- Returns
- HTTP 200: rows, pagination, filters.
- Notes
- This recorded-issue list is not a refund eligibility preview. limit defaults to 50 and caps at 100. Match issue type and owned order; records can contain private purchase and ledger details.
Request, response and error reference
Query and header parameters
[
{
"name": "type",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "status",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "q",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "search",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "orderId",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "productId",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "startDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "endDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "dateBasis",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "minAmountCents",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "maxAmountCents",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "needsAttention",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "sort",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "offset",
"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": {
"type": {
"enum": [
"refund",
"dispute"
]
},
"status": {
"type": "string"
},
"order": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "integer",
"minimum": 1
},
{
"type": "string",
"pattern": "^[1-9][0-9]*$"
}
]
}
},
"additionalProperties": true
},
"amount_cents": {
"type": "integer"
},
"reason": {
"type": [
"string",
"null"
]
},
"entitlements": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"ledger_entries": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"timeline": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurred_at": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"title": {
"type": "string"
},
"detail": {
"type": "string"
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
},
"pagination": {
"type": "object",
"properties": {
"limit": {
"type": "integer"
},
"offset": {
"type": "integer"
}
},
"additionalProperties": true
},
"filters": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"status": {
"type": "string"
},
"q": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 500, 503.
/api/developer/revenue/refunds-disputes/{type}/{orderId}
Read an owned order refund or dispute with its timeline
- Auth
- Account Bearer JWT
- Scope
- analytics.view and all-products workspace scope. Filters never expand the effective developer workspace.
- Returns
- HTTP 200: issue.
- Notes
- type must be refund or dispute; orderId is the order identifier, not a refund ID. Returns 404 when the permitted issue is not found. No funds or access are changed.
Request, response and error reference
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"issue": {
"type": "object",
"properties": {
"type": {
"enum": [
"refund",
"dispute"
]
},
"status": {
"type": "string"
},
"order": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "integer",
"minimum": 1
},
{
"type": "string",
"pattern": "^[1-9][0-9]*$"
}
]
}
},
"additionalProperties": true
},
"amount_cents": {
"type": "integer"
},
"reason": {
"type": [
"string",
"null"
]
},
"entitlements": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"ledger_entries": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"timeline": {
"type": "array",
"items": {
"type": "object",
"properties": {
"occurred_at": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"title": {
"type": "string"
},
"detail": {
"type": "string"
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 500, 503.
/api/developer/analytics/activity
Read the product-scoped combined activity feed
- Auth
- Account Bearer JWT
- Scope
- analytics.view and assigned-product scope.
- Request fields
- query range: value
- query startDate: string
- query endDate: string
- query currency: string
- query environment: value
- query productId: integer
- query source: string
- query type: string
- query search: string
- query customerId: string
- query limit: string
- Returns
- HTTP 200: range, start_date, end_date, currency, environment, limit, filters, summary, activity.
- Notes
- Distinct from /revenue/activity and /developer/activity. Combines recorded website, plugin, email, download and usage events. Private customer/device diagnostics are not a public analytics feed; missing telemetry does not mean zero activity.
Request, response and error reference
Query and header parameters
[
{
"name": "range",
"in": "query",
"schema": {
"enum": [
"today",
"7d",
"30d",
"90d",
"current_month",
"previous_month"
]
},
"required": false,
"description": ""
},
{
"name": "startDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "endDate",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "currency",
"in": "query",
"schema": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "usd"
},
"required": false,
"description": ""
},
{
"name": "environment",
"in": "query",
"schema": {
"enum": [
"live",
"test"
]
},
"required": false,
"description": ""
},
{
"name": "productId",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "source",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "type",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "search",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "customerId",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "limit",
"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": {
"range": {
"type": "string"
},
"start_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"end_date": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currency": {
"type": "string"
},
"environment": {
"type": "string"
},
"limit": {
"type": "integer"
},
"filters": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"summary": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"activity": {
"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, 500, 503.
