Skip to content
SoundSyncAudio software platform

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.

GET /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.

POST /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.

PATCH /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.

POST /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.

POST /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.

POST /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.

GET /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.

POST /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.

GET /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.

GET /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.

POST /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.

POST /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.

GET /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.

POST /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.

POST /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.

POST /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.

GET /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.