Guide
Affiliate and Collaborator API
Agreement management, invitation acceptance, live consent, referral links, accounting, and recipient payout setup.
Payouts on the 1st and 15th
Developer, affiliate, and collaborator payouts are available twice monthly, on the 1st and 15th, on the same schedule. Each payout covers eligible earnings from the previous period, plus any older unpaid eligible balance, after a minimum 14-day hold. Earnings still within the hold carry forward to the next eligible payout date. Accepted revenue shares, refund or dispute adjustments, and verified payout details determine the eligible balance. An invitation or calculator estimate alone is not a paid balance or proof of a completed payout. External reseller payments are not funds collected by SoundSync.
SoundSync
Program operations
Current route and service contracts. Examples below are illustrative; live provider outcomes and client-host testing are separate checks.
/api/developer/partners/programs
List developer agreements and proposals.
- Auth
- Account Bearer JWT
- Scope
- Effective developer workspace with partner permissions and all-products scope; live consent is owner-only.
- Returns
- Workspace program records.
- Side effects
- Retrieves the authorized resource. Operation-specific notes identify preparation or referral recording where applicable.
- Notes
- Requires partners.view and all-products scope. Agreement setup/preview flags and live accounting availability are separate signals; use the accounting endpoint for funded earnings.
Request, response and error reference
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"agreements": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
]
},
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"status": {
"type": "string"
},
"recipient_email": {
"type": "string",
"format": "email"
},
"terms_version": {
"type": "integer"
},
"products": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string"
},
"rate_bps": {
"type": "integer"
}
},
"additionalProperties": true
}
},
"aggregate_clicks": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": true
}
},
"products": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string"
}
},
"additionalProperties": true
}
},
"live_accounting_available": {
"type": "boolean"
},
"summary": {
"type": "object",
"properties": {
"agreement_count": {
"type": "integer"
},
"active_count": {
"type": "integer"
},
"pending_acceptance_count": {
"type": "integer"
},
"aggregate_clicks": {
"type": [
"string",
"null"
]
},
"referral_counts_available": {
"type": "boolean"
}
},
"additionalProperties": true
},
"permissions": {
"type": "object",
"properties": {
"can_manage": {
"type": "boolean"
}
},
"additionalProperties": true
},
"migration_required": {
"type": "boolean"
},
"preview_notice": {
"type": "string"
}
},
"additionalProperties": true
}
Documented failures: 400, 500, 503.
/api/developer/partners/programs
Create an affiliate or collaborator proposal and invitation.
- Auth
- Account Bearer JWT
- Scope
- Effective developer workspace with partner permissions and all-products scope; live consent is owner-only.
- Request fields
- kind: affiliate | collaborator (required)
- recipient_email: string (required)
- name: string (required)
- rate_bps: integer (required)
- product_rates: array (required)
- attribution_window_days: integer
- include_reseller_sales: boolean
- effective_from: string
- send_email: boolean
- Returns
- 201 agreement and invitation result.
- Side effects
- Create an affiliate or collaborator proposal and invitation. Review the confirmation and retry requirements before repeating the request.
- Notes
- Rates are integer basis points from 0 to 10000. Effective terms cannot be backdated. Products must belong to the workspace and pass eligibility/capacity checks.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"kind": {
"enum": [
"affiliate",
"collaborator"
]
},
"recipient_email": {
"type": "string",
"format": "email"
},
"name": {
"type": "string"
},
"rate_bps": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"product_rates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"product_id": {
"type": "integer",
"minimum": 1
},
"rate_bps": {
"type": "integer",
"minimum": 0,
"maximum": 10000
}
},
"required": [
"product_id",
"rate_bps"
],
"additionalProperties": true
}
},
"attribution_window_days": {
"type": "integer",
"minimum": 1,
"maximum": 365
},
"include_reseller_sales": {
"type": "boolean"
},
"effective_from": {
"type": "string",
"format": "date-time"
},
"send_email": {
"type": "boolean"
}
},
"additionalProperties": true,
"required": [
"kind",
"recipient_email",
"name",
"rate_bps",
"product_rates"
]
}
HTTP 201 response (application/json)
{
"type": "object",
"properties": {
"agreement": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"invitation": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
Documented failures: 400, 403, 404, 409, 503.
/api/developer/partners/programs/:id
Propose revised versioned terms.
- Auth
- Account Bearer JWT
- Scope
- Effective developer workspace with partner permissions and all-products scope; live consent is owner-only.
- Request fields
- kind: affiliate | collaborator
- recipient_email: string
- name: string
- rate_bps: integer
- product_rates: array
- attribution_window_days: integer
- include_reseller_sales: boolean
- effective_from: string
- send_email: boolean
- Returns
- Revised proposal; accepted prior terms are retained.
- Side effects
- Propose revised versioned terms. Review the confirmation and retry requirements before repeating the request.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"kind": {
"enum": [
"affiliate",
"collaborator"
]
},
"recipient_email": {
"type": "string",
"format": "email"
},
"name": {
"type": "string"
},
"rate_bps": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"product_rates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"product_id": {
"type": "integer",
"minimum": 1
},
"rate_bps": {
"type": "integer",
"minimum": 0,
"maximum": 10000
}
},
"required": [
"product_id",
"rate_bps"
],
"additionalProperties": true
}
},
"attribution_window_days": {
"type": "integer",
"minimum": 1,
"maximum": 365
},
"include_reseller_sales": {
"type": "boolean"
},
"effective_from": {
"type": "string",
"format": "date-time"
},
"send_email": {
"type": "boolean"
}
},
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"agreement": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
Documented failures: 400, 403, 404, 409, 503.
/api/developer/partners/programs/:id/status
Pause, resume, or end an accepted agreement.
- Auth
- Account Bearer JWT
- Scope
- Effective developer workspace with partner permissions and all-products scope; live consent is owner-only.
- Request fields
- status: active | paused | ended (required)
- Returns
- Updated agreement status.
- Side effects
- Pause, resume, or end an accepted agreement. Review the confirmation and retry requirements before repeating the request.
- Notes
- An ended agreement cannot be resumed; acceptance is required before activation.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"status": {
"enum": [
"active",
"paused",
"ended"
]
}
},
"required": [
"status"
],
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"agreement": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
Documented failures: 400, 403, 404, 409, 503.
/api/developer/partners/programs/:id/invite
Replace or resend a pending invitation.
- Auth
- Account Bearer JWT
- Scope
- Effective developer workspace with partner permissions and all-products scope; live consent is owner-only.
- Request fields
- send_email: boolean
- Returns
- Invitation and delivery result.
- Side effects
- Replace or resend a pending invitation. Review the confirmation and retry requirements before repeating the request.
- Notes
- Invitation limits and resend cooldown apply; replacement revokes older pending links.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"send_email": {
"type": "boolean"
}
},
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"agreement": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"invitation": {
"type": "object",
"properties": {
"delivery_status": {
"type": "string"
}
},
"additionalProperties": true
},
"invite_url": {
"type": "string"
},
"delivery_status": {
"type": "string"
}
},
"additionalProperties": true
}
Documented failures: 400, 403, 404, 409, 503.
/api/developer/partners/programs/preview
Calculate a nonpayable split preview.
- Auth
- Account Bearer JWT
- Scope
- Effective developer workspace with partner permissions and all-products scope; live consent is owner-only.
- Request fields
- product_id: integer (required)
- subtotal_cents: integer
- discount_cents: integer
- platform_fee_cents: integer
- processing_fee_cents: integer
- affiliate_agreement_id: integer
- currency: string
- collection_provider: stripe | paypal
- cumulative_refund_product_cents: integer
- Returns
- mode:preview; payable:false; projected allocation and payout plan.
- Side effects
- Calculate a nonpayable split preview. Review the confirmation and retry requirements before repeating the request.
- Notes
- This calculator is not the captured-sale ledger. Use zero processing_fee_cents for the current managed-checkout policy; historical projections can have a different supplied basis. Illustrative calculation only, not a funded balance, accrual, transfer or change to execution flags. Uses accepted active eligible product agreements; recurring products are rejected by this preview.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"product_id": {
"type": "integer",
"minimum": 1
},
"subtotal_cents": {
"type": "integer",
"minimum": 0
},
"discount_cents": {
"type": "integer",
"minimum": 0
},
"platform_fee_cents": {
"type": "integer",
"minimum": 0
},
"processing_fee_cents": {
"type": "integer",
"minimum": 0
},
"affiliate_agreement_id": {
"type": "integer",
"minimum": 1
},
"currency": {
"type": "string"
},
"collection_provider": {
"type": "string",
"enum": [
"stripe",
"paypal"
]
},
"cumulative_refund_product_cents": {
"type": "integer",
"minimum": 0
}
},
"required": [
"product_id"
],
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"mode": {
"const": "preview"
},
"payable": {
"const": false
},
"live_accrual_enabled": {
"const": false
},
"automatic_payouts_enabled": {
"const": false
},
"allocation": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"refund": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"payout_plan": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"product": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string"
}
},
"additionalProperties": true
},
"participants": {
"type": "array",
"items": {
"type": "object",
"properties": {
"agreement_id": {
"type": "string"
},
"kind": {
"type": "string"
},
"name": {
"type": "string"
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
Documented failures: 400, 500, 503.
/api/developer/partners/programs/accounting
Read allocations, reversals, destinations, transfers, and funded versus external balances.
- Auth
- Account Bearer JWT
- Scope
- Effective developer workspace with partner permissions and all-products scope; live consent is owner-only.
- Returns
- Accounting summary including balance_details and unfunded_earnings.
- Side effects
- Retrieves the authorized resource. Operation-specific notes identify preparation or referral recording where applicable.
Request, response and error reference
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"rollout_enabled": {
"type": "boolean"
},
"balances": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"balance_details": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"reversals": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"transfers": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"developer_earnings": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"unfunded_earnings": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"consents": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"destinations": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"payout_schedule": {
"type": "object",
"properties": {
"hold_days": {
"type": "integer",
"minimum": 0
},
"next_run_date": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
Documented failures: 503.
/api/developer/partners/programs/:id/live-consent
Developer owner explicitly authorizes the current live terms.
- Auth
- Account Bearer JWT
- Scope
- Effective developer workspace with partner permissions and all-products scope; live consent is owner-only.
- Request fields
- accept: true (required)
- terms_version: integer (required)
- policy_version: "soundsync-managed-live-v1" (required)
- Returns
- Accepted party, version, and policy.
- Side effects
- Developer owner explicitly authorizes the current live terms. Review the confirmation and retry requirements before repeating the request.
- Notes
- Owner authorization cannot be inherited from a teammate; both parties must consent.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"accept": {
"const": true
},
"terms_version": {
"type": "integer",
"minimum": 1
},
"policy_version": {
"const": "soundsync-managed-live-v1"
}
},
"required": [
"accept",
"terms_version",
"policy_version"
],
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"accepted": {
"type": "boolean"
},
"party": {
"enum": [
"developer",
"recipient"
]
},
"terms_version": {
"type": "integer",
"minimum": 1
},
"policy_version": {
"type": "string"
}
},
"additionalProperties": true
}
Documented failures: 400, 403, 404, 409, 503.
/api/partner-portal/programs
List agreements for the signed-in recipient.
- Auth
- Account Bearer JWT
- Scope
- Only the signed-in recipient's agreements, acceptance, balances and payout destination.
- Returns
- Recipient-scoped agreements.
- Side effects
- Retrieves the authorized resource. Operation-specific notes identify preparation or referral recording where applicable.
- Notes
- Recipient-scoped programs only. Participation does not grant developer workspace or reseller access.
Request, response and error reference
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"agreements": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
]
},
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"status": {
"type": "string"
},
"recipient_email": {
"type": "string",
"format": "email"
},
"terms_version": {
"type": "integer"
},
"products": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string"
},
"rate_bps": {
"type": "integer"
}
},
"additionalProperties": true
}
},
"aggregate_clicks": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": true
}
},
"products": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string"
}
},
"additionalProperties": true
}
},
"live_accounting_available": {
"type": "boolean"
},
"summary": {
"type": "object",
"properties": {
"agreement_count": {
"type": "integer"
},
"active_count": {
"type": "integer"
},
"pending_acceptance_count": {
"type": "integer"
},
"aggregate_clicks": {
"type": [
"string",
"null"
]
},
"referral_counts_available": {
"type": "boolean"
}
},
"additionalProperties": true
},
"permissions": {
"type": "object",
"properties": {
"can_manage": {
"type": "boolean"
}
},
"additionalProperties": true
},
"migration_required": {
"type": "boolean"
},
"preview_notice": {
"type": "string"
}
},
"additionalProperties": true
}
Documented failures: 400, 500, 503.
/api/partner-portal/programs/invitations/:token
Read a private invitation for its intended recipient.
- Auth
- Account Bearer JWT
- Scope
- Only the signed-in recipient's agreements, acceptance, balances and payout destination.
- Returns
- Invitation and displayed terms.
- Side effects
- Retrieves the authorized resource. Operation-specific notes identify preparation or referral recording where applicable.
- Notes
- Never expose invitation tokens in public URLs or screenshots. Requires the signed-in intended recipient. Inspect the current version before accepting; a displayed invitation is not accepted terms or earnings.
Request, response and error reference
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"agreement": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
]
},
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"status": {
"type": "string"
},
"recipient_email": {
"type": "string",
"format": "email"
},
"terms_version": {
"type": "integer"
},
"products": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string"
},
"rate_bps": {
"type": "integer"
}
},
"additionalProperties": true
}
},
"aggregate_clicks": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": true
},
"products": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string"
}
},
"additionalProperties": true
}
},
"terms": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"invitation": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"expires_at": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"terms_version": {
"type": "integer"
}
},
"additionalProperties": true
},
"preview_terms_version": {
"type": "integer"
},
"preview_notice": {
"type": "string"
}
},
"additionalProperties": true
}
Documented failures: 400, 500, 503.
/api/partner-portal/programs/invitations/accept
Accept the displayed invitation terms.
- Auth
- Account Bearer JWT
- Scope
- Only the signed-in recipient's agreements, acceptance, balances and payout destination.
- Request fields
- token: string (required)
- accept_preview_terms: true (required)
- preview_terms_version: string (required)
- payout_policy_version: string (required)
- Returns
- Accepted version.
- Side effects
- Accept the displayed invitation terms. Review the confirmation and retry requirements before repeating the request.
- Notes
- These field names describe invitation acceptance, not live payment consent. The verified invited identity is required.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"token": {
"type": "string"
},
"accept_preview_terms": {
"const": true
},
"preview_terms_version": {
"type": "string"
},
"payout_policy_version": {
"type": "string"
}
},
"required": [
"token",
"accept_preview_terms",
"preview_terms_version",
"payout_policy_version"
],
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"agreement": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"additionalProperties": true
}
Documented failures: 400, 403, 404, 409, 503.
/api/partner-portal/programs/:id/live-consent
Recipient authorizes the applicable live terms.
- Auth
- Account Bearer JWT
- Scope
- Only the signed-in recipient's agreements, acceptance, balances and payout destination.
- Request fields
- accept: true (required)
- terms_version: integer (required)
- policy_version: "soundsync-managed-live-v1" (required)
- Returns
- Accepted recipient consent.
- Side effects
- Recipient authorizes the applicable live terms. Review the confirmation and retry requirements before repeating the request.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"accept": {
"const": true
},
"terms_version": {
"type": "integer",
"minimum": 1
},
"policy_version": {
"const": "soundsync-managed-live-v1"
}
},
"required": [
"accept",
"terms_version",
"policy_version"
],
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"accepted": {
"type": "boolean"
},
"party": {
"enum": [
"developer",
"recipient"
]
},
"terms_version": {
"type": "integer",
"minimum": 1
},
"policy_version": {
"type": "string"
}
},
"additionalProperties": true
}
Documented failures: 400, 403, 404, 409, 503.
/api/partner-portal/programs/accounting
Read the recipient's own balances and transfer history.
- Auth
- Account Bearer JWT
- Scope
- Only the signed-in recipient's agreements, acceptance, balances and payout destination.
- Returns
- Accounting summary; external amounts remain separately unfunded.
- Side effects
- Retrieves the authorized resource. Operation-specific notes identify preparation or referral recording where applicable.
Request, response and error reference
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"rollout_enabled": {
"type": "boolean"
},
"balances": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"balance_details": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"reversals": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"transfers": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"developer_earnings": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"unfunded_earnings": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"consents": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"destinations": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
}
},
"payout_schedule": {
"type": "object",
"properties": {
"hold_days": {
"type": "integer",
"minimum": 0
},
"next_run_date": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
Documented failures: 503.
/api/partner-portal/programs/payouts/stripe
Start or inspect recipient Stripe Connect onboarding.
- Auth
- Account Bearer JWT
- Scope
- Only the signed-in recipient's agreements, acceptance, balances and payout destination.
- Request fields
- livemode: boolean (required)
- program: affiliate | collaborator
- confirm_verified_email: true
- Returns
- ready:true or an onboarding url.
- Side effects
- Start or inspect recipient Stripe Connect onboarding. Review the confirmation and retry requirements before repeating the request.
- Notes
- Onboarding is not a payout request. Use the returned URL privately.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"livemode": {
"type": "boolean"
},
"program": {
"enum": [
"affiliate",
"collaborator"
]
},
"confirm_verified_email": {
"const": true
}
},
"required": [
"livemode"
],
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"ready": {
"type": "boolean"
},
"url": {
"type": "string"
},
"provider": {
"type": "string"
},
"available_at": {
"type": "string"
}
},
"additionalProperties": true
}
Documented failures: 400, 403, 404, 409, 503.
/api/partner-portal/programs/payouts/stripe/refresh
Refresh the recipient Stripe destination readiness.
- Auth
- Account Bearer JWT
- Scope
- Only the signed-in recipient's agreements, acceptance, balances and payout destination.
- Request fields
- livemode: boolean (required)
- program: affiliate | collaborator
- confirm_verified_email: true
- Returns
- Current Stripe destination readiness.
- Side effects
- Refresh the recipient Stripe destination readiness. Review the confirmation and retry requirements before repeating the request.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"livemode": {
"type": "boolean"
},
"program": {
"enum": [
"affiliate",
"collaborator"
]
},
"confirm_verified_email": {
"const": true
}
},
"required": [
"livemode"
],
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"ready": {
"type": "boolean"
},
"url": {
"type": "string"
},
"provider": {
"type": "string"
},
"available_at": {
"type": "string"
}
},
"additionalProperties": true
}
Documented failures: 400, 403, 404, 409, 503.
/api/partner-portal/programs/payouts/paypal
Confirm the verified recipient email as the PayPal destination.
- Auth
- Account Bearer JWT
- Scope
- Only the signed-in recipient's agreements, acceptance, balances and payout destination.
- Request fields
- livemode: boolean (required)
- program: affiliate | collaborator
- confirm_verified_email: true (required)
- Returns
- Destination readiness and availability time.
- Side effects
- Confirm the verified recipient email as the PayPal destination. Review the confirmation and retry requirements before repeating the request.
- Notes
- A destination change can impose a security hold; no arbitrary third-party email is accepted.
Request, response and error reference
Request (application/json)
{
"type": "object",
"properties": {
"livemode": {
"type": "boolean"
},
"program": {
"enum": [
"affiliate",
"collaborator"
]
},
"confirm_verified_email": {
"const": true
}
},
"required": [
"livemode",
"confirm_verified_email"
],
"additionalProperties": true
}
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"ready": {
"type": "boolean"
},
"url": {
"type": "string"
},
"provider": {
"type": "string"
},
"available_at": {
"type": "string"
}
},
"additionalProperties": true
}
Documented failures: 400, 403, 404, 409, 503.
/api/partner-referrals/:code
Resolve an eligible referral to its storefront/product.
- Auth
- Public request; operation-specific verification still applies
- Scope
- The operation-specific account permissions and resource ownership described below.
- Request fields
- query product: string
- Returns
- 303 redirect with supported referral context.
- Side effects
- Retrieves the authorized resource. Operation-specific notes identify preparation or referral recording where applicable.
- Notes
- Public, rate-limited; records visit activity except HEAD. A click is not proof of a sale. Records supported aggregate referral activity and redirects. A click is not a conversion or commission; do not use this as a health probe.
Request, response and error reference
Query and header parameters
[
{
"name": "product",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
}
]
No request body fields are read by this operation.
HTTP 303 response headers
{
"Location": {
"schema": {
"type": "string",
"format": "uri"
},
"description": "Eligible storefront/product redirect with scoped referral context."
}
}
Documented failures: 400, 500.
Permissions and live availability
Developer program access requires partners.view and all-products workspace scope; mutations also require partners.manage. Live consent separately checks developer-owner or recipient identity, verified email, active account, current accepted terms, and agreement eligibility. A live endpoint existing does not authorize an arbitrary caller or enable every account.
Keep product credentials, partner external API keys, developer JWTs, recipient sessions, and private invitation tokens separate. An affiliate agreement grants neither team membership nor reseller authority.
Funding and recovery
Current managed checkout allocates the post-10% proceeds without a second deduction for ordinary processing. External collections are unfunded estimates and their fees remain the external seller's responsibility. Refunds reverse original saved shares; outstanding recovery reduces future eligible earnings. A reserved, submitted, or reconciliation-required transfer is not confirmed arrival.
Live accounting and agreement approval
Live accounting is available for eligible one-time products. Both the owner and recipient approve the current agreement version before future sales accrue shares. Accepted invitation terms are not a substitute for that financial approval. Review the saved sale allocation and any original-share reversal in your accounting view.
SoundSync-managed Stripe and PayPal checkout processing is covered by SoundSync. External reseller proceeds remain separately unfunded, and their processing fees are the external seller's responsibility. Recurring-product commissions are not part of this native program allocation path.
