API reference
Rent-to-Own Agreement API
Read installment agreements, paid progress, access state and earned ownership without initiating a charge.
Read the agreement, not only the payment count
Developer list and detail calls use orders.view and all-products workspace scope. The customer detail route resolves ownership from the signed-in account. Do not reuse a developer token for a customer action or expose another customer agreement.
The list supports productId, status and limit, with a default of 50 and a maximum of 200. Detail includes installment history. List results do not load every installment; an empty list-level installments array is not proof that no payments exist.
Amounts and access remain separate
Amounts with Cents suffixes are integer minor units in the returned currency. Compare paid and net-paid installment counts with refunded/disputed amounts, ownershipState, accessState and ownedAt. A scheduled date is not a captured payment, and a browser success page is not earned ownership.
These are read contracts, not authorization for collection, cancellation or adjustment. Current feature exposure, provider setup and the existing rent-to-own policy still govern the offer. No new payment method, payout behavior or universal production availability is implied.
SoundSync
Lifecycle and payment contracts
SoundSync
Requests and responses
/api/developer/rent-to-own/agreements
List developer rent-to-own agreements
- Auth
- Account Bearer JWT
- Scope
- orders.view and all-products workspace scope.
- Request fields
- query productId: integer
- query status: string
- query limit: integer
- Returns
- HTTP 200: agreements.
Request, response and error reference
Query and header parameters
[
{
"name": "productId",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1
},
"required": false,
"description": ""
},
{
"name": "status",
"in": "query",
"schema": {
"type": "string"
},
"required": false,
"description": ""
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 50
},
"required": false,
"description": ""
}
]
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",
"minimum": 1
},
"developerId": {
"type": "integer",
"minimum": 1
},
"customerUserId": {
"type": [
"integer",
"null"
]
},
"customerId": {
"type": "integer",
"minimum": 1
},
"productId": {
"type": "integer",
"minimum": 1
},
"productName": {
"type": [
"string",
"null"
]
},
"planVersionId": {
"type": "integer",
"minimum": 1
},
"checkoutId": {
"type": [
"integer",
"null"
]
},
"entitlementId": {
"type": [
"integer",
"null"
]
},
"provider": {
"type": "string"
},
"providerSubscriptionId": {
"type": [
"string",
"null"
]
},
"environment": {
"type": "string"
},
"status": {
"type": "string"
},
"accessState": {
"type": "string"
},
"ownershipState": {
"type": "string"
},
"currency": {
"type": "string"
},
"cashPriceCents": {
"type": "integer"
},
"installmentAmountCents": {
"type": "integer"
},
"installmentCount": {
"type": "integer"
},
"totalContractCents": {
"type": "integer"
},
"paidInstallmentCount": {
"type": "integer"
},
"netPaidInstallmentCount": {
"type": "integer"
},
"paidAmountCents": {
"type": "integer"
},
"refundedAmountCents": {
"type": "integer"
},
"disputedAmountCents": {
"type": "integer"
},
"currentPeriodStart": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currentPeriodEnd": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"nextPaymentAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"failedPaymentGraceUntil": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"cancelAtPeriodEnd": {
"type": "boolean"
},
"canceledAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"completedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"ownedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"revokedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"installments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"installmentNumber": {
"type": "integer"
},
"status": {
"type": "string"
},
"currency": {
"type": "string"
},
"amountDueCents": {
"type": "integer"
},
"amountPaidCents": {
"type": "integer"
},
"amountRefundedCents": {
"type": "integer"
},
"taxAmountCents": {
"type": "integer"
},
"discountAmountCents": {
"type": "integer"
},
"paidAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"refundedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"disputedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"orderId": {
"type": [
"integer",
"null"
]
}
},
"additionalProperties": true
}
},
"metadata": {
"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, 409, 500.
/api/developer/rent-to-own/agreements/{agreementId}
Read a developer agreement and installment history
- Auth
- Account Bearer JWT
- Scope
- orders.view and all-products workspace scope; developer ownership is checked.
- Returns
- HTTP 200: agreement.
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",
"minimum": 1
},
"developerId": {
"type": "integer",
"minimum": 1
},
"customerUserId": {
"type": [
"integer",
"null"
]
},
"customerId": {
"type": "integer",
"minimum": 1
},
"productId": {
"type": "integer",
"minimum": 1
},
"productName": {
"type": [
"string",
"null"
]
},
"planVersionId": {
"type": "integer",
"minimum": 1
},
"checkoutId": {
"type": [
"integer",
"null"
]
},
"entitlementId": {
"type": [
"integer",
"null"
]
},
"provider": {
"type": "string"
},
"providerSubscriptionId": {
"type": [
"string",
"null"
]
},
"environment": {
"type": "string"
},
"status": {
"type": "string"
},
"accessState": {
"type": "string"
},
"ownershipState": {
"type": "string"
},
"currency": {
"type": "string"
},
"cashPriceCents": {
"type": "integer"
},
"installmentAmountCents": {
"type": "integer"
},
"installmentCount": {
"type": "integer"
},
"totalContractCents": {
"type": "integer"
},
"paidInstallmentCount": {
"type": "integer"
},
"netPaidInstallmentCount": {
"type": "integer"
},
"paidAmountCents": {
"type": "integer"
},
"refundedAmountCents": {
"type": "integer"
},
"disputedAmountCents": {
"type": "integer"
},
"currentPeriodStart": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currentPeriodEnd": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"nextPaymentAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"failedPaymentGraceUntil": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"cancelAtPeriodEnd": {
"type": "boolean"
},
"canceledAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"completedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"ownedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"revokedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"installments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"installmentNumber": {
"type": "integer"
},
"status": {
"type": "string"
},
"currency": {
"type": "string"
},
"amountDueCents": {
"type": "integer"
},
"amountPaidCents": {
"type": "integer"
},
"amountRefundedCents": {
"type": "integer"
},
"taxAmountCents": {
"type": "integer"
},
"discountAmountCents": {
"type": "integer"
},
"paidAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"refundedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"disputedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"orderId": {
"type": [
"integer",
"null"
]
}
},
"additionalProperties": true
}
},
"metadata": {
"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, 409, 500.
/api/rent-to-own/customer/agreements/{agreementId}
Read an agreement owned by the signed-in customer
- Auth
- Account Bearer JWT
- Scope
- Signed-in customer; the saved account/customer identity must own the agreement.
- Returns
- HTTP 200: agreement.
- Notes
- Read-only accounting/access information. A visible agreement is not authorization to charge again or alter its installment count. Checkout, cancellation and provider payment events use their separate contracts.
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",
"minimum": 1
},
"developerId": {
"type": "integer",
"minimum": 1
},
"customerUserId": {
"type": [
"integer",
"null"
]
},
"customerId": {
"type": "integer",
"minimum": 1
},
"productId": {
"type": "integer",
"minimum": 1
},
"productName": {
"type": [
"string",
"null"
]
},
"planVersionId": {
"type": "integer",
"minimum": 1
},
"checkoutId": {
"type": [
"integer",
"null"
]
},
"entitlementId": {
"type": [
"integer",
"null"
]
},
"provider": {
"type": "string"
},
"providerSubscriptionId": {
"type": [
"string",
"null"
]
},
"environment": {
"type": "string"
},
"status": {
"type": "string"
},
"accessState": {
"type": "string"
},
"ownershipState": {
"type": "string"
},
"currency": {
"type": "string"
},
"cashPriceCents": {
"type": "integer"
},
"installmentAmountCents": {
"type": "integer"
},
"installmentCount": {
"type": "integer"
},
"totalContractCents": {
"type": "integer"
},
"paidInstallmentCount": {
"type": "integer"
},
"netPaidInstallmentCount": {
"type": "integer"
},
"paidAmountCents": {
"type": "integer"
},
"refundedAmountCents": {
"type": "integer"
},
"disputedAmountCents": {
"type": "integer"
},
"currentPeriodStart": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"currentPeriodEnd": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"nextPaymentAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"failedPaymentGraceUntil": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"cancelAtPeriodEnd": {
"type": "boolean"
},
"canceledAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"completedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"ownedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"revokedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"installments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"installmentNumber": {
"type": "integer"
},
"status": {
"type": "string"
},
"currency": {
"type": "string"
},
"amountDueCents": {
"type": "integer"
},
"amountPaidCents": {
"type": "integer"
},
"amountRefundedCents": {
"type": "integer"
},
"taxAmountCents": {
"type": "integer"
},
"discountAmountCents": {
"type": "integer"
},
"paidAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"refundedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"disputedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"orderId": {
"type": [
"integer",
"null"
]
}
},
"additionalProperties": true
}
},
"metadata": {
"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, 409, 500.
