Become a Paddle partner
Join the Paddle partner program to read this content. You'll also get access to our partner API and agent tooling. Let us know a few details about your business to get started. Already a partner? Log in to view this page.
Once a seller is live, you can present information from Paddle in your dashboard so they can see how their business is performing without leaving your app.
This guide covers the four things a seller dashboard typically shows: revenue metrics, transactions, adjustments, and their product catalog.
For the best experience, we recommend making this data available to your platform agent as well as presenting it in your dashboard. This means your user can ask natural language questions about their data, like "how much did I make last month?"
Overview
Build a seller dashboard in four steps:
- Present revenue metrics
Show revenue over time from the metrics endpoints. - List transactions
Show recent transactions and their status. - List adjustments
Show refunds and credits and their status. - List products
Show the products your integration created for the seller.
Present revenue metrics
- Layer
- Your platform, Your agent
- Authentication
- Seller API key
- Environment
- Sandbox, Live
Understanding how much money they're making is the most important task for a seller once an integration is live. We recommend presenting a seller's revenue over the last seven days, last month, and three months as both a figure and in a chart.
Send a request to the GET /metrics/revenue endpoint with a date range (to and from) to get net revenue over time. amount is a string in the smallest unit of currency_code (cents for USD), converted to the seller's primary balance currency.
If successful, Paddle responds with a 200 and timeseries data for the filter criteria you provided. Parse or pass to a charting library to present to the seller.
{ "data": { "timeseries": [ { "timestamp": "2025-09-01T00:00:00Z", "amount": "284500", "count": 12 }, { "timestamp": "2025-09-02T00:00:00Z", "amount": "312750", "count": 14 }, { "timestamp": "2025-09-03T00:00:00Z", "amount": "298000", "count": 13 }, { "timestamp": "2025-09-04T00:00:00Z", "amount": "341200", "count": 16 } ], "currency_code": "USD", "interval": "day", "starts_at": "2025-09-01T00:00:00Z", "ends_at": "2025-09-05T00:00:00Z", "updated_at": "2025-09-05T02:00:00Z" }}Present other metrics
The Paddle API also includes metrics endpoints for monthly recurring revenue (MRR), MRR change, active subscribers, and other data.
All metrics endpoints return timeseries data like /metrics/revenue and take the same from and to parameters.
Some metrics aren't available in sandbox. Check the API docs before implementing.
List transactions
- Layer
- Your platform, Your agent
- Authentication
- Seller API key
- Environment
- Sandbox, Live
Transactions include completed checkouts for new signups, subscription renewals, and upgrades or downgrades that result in a charge. We recommend showing sellers a list of recent transactions so they can see their sales and each one's status.
To list transactions, send a request to the GET /transactions endpoint to get the last 30 transactions.
By default, a transaction includes customer_id but not the customer's email. Add include=customer to include the customer entity for each transaction, so you can show who each belongs to.
{ "data": [ { "id": "txn_01hv8x2m9q4k7r3n5s6t8w0yza", "status": "completed", "customer_id": "ctm_01hv8x0f3e2d1c9b7a6m5k4j3h", "currency_code": "USD", "customer": { "id": "ctm_01hv8x0f3e2d1c9b7a6m5k4j3h", "name": "Sam Taylor", "email": "sam@example.com" }, "details": { "totals": { "subtotal": "100", "tax": "0", "total": "100", "grand_total": "100", "currency_code": "USD" } }, "billed_at": "2026-04-10T09:12:04.000Z", "created_at": "2026-04-10T09:11:58.000Z" }, { "id": "txn_01hv8w7c5b3a2z9y8x7w6v5u4t", "status": "canceled", "customer_id": "ctm_01hv8w5a4z3y2x1w9v8u7t6s5r", "currency_code": "USD", "customer": { "id": "ctm_01hv8w5a4z3y2x1w9v8u7t6s5r", "name": "Alex Kim", "email": "alex@example.com" }, "details": { "totals": { "subtotal": "0", "tax": "0", "total": "0", "grand_total": "0", "currency_code": "USD" } }, "billed_at": null, "created_at": "2026-04-10T08:03:22.000Z" } ], "meta": { "request_id": "d1f2a3b4-5c6d-47e8-9f0a-1b2c3d4e5f60", "pagination": { "per_page": 30, "next": "https://api.paddle.com/transactions?after=txn_01hv8w7c5b3a2z9y8x7w6v5u4t", "has_more": false, "estimated_total": 2 } }}Common fields to show in your platform:
details.totals.grand_totalfor the amount to display.items[]to present details about what a customer purchased.created_atto show the date a transaction was created, orcompleted_atwhen completed.statusto show the status of a transaction.
To map status fields:
| Status | Recommended label | What it means |
|---|---|---|
draft, ready | Draft | Created, but missing information or abandoned. |
billed | Billed | Transaction has an invoice number and is a legal record. Used in invoice workflows. Not common in partner integrations. |
paid, completed | Completed | Transaction is fully paid. This is a successful sale. |
canceled | Canceled | Transaction was canceled. If it was an invoice, it's no longer due. |
past_due | Past due | Payment is overdue. The subscription is in dunning. |
List adjustments
- Layer
- Your platform, Your agent
- Authentication
- Seller API key
- Environment
- Sandbox, Live
Adjustments are refunds and credits against a transaction, including chargebacks. We recommend presenting them to sellers in a list so sellers can see money going back to customers.
To list adjustments, send a request to the GET /adjustments endpoint.
{ "data": [ { "id": "adj_01hv9a2b3c4d5e6f7g8h9j0k1l", "action": "refund", "type": "full", "status": "pending_approval", "transaction_id": "txn_01hv8x2m9q4k7r3n5s6t8w0yza", "subscription_id": null, "customer_id": "ctm_01hv8x0f3e2d1c9b7a6m5k4j3h", "reason": "Customer requested a refund", "currency_code": "USD", "totals": { "subtotal": "100", "tax": "0", "total": "100", "currency_code": "USD" }, "created_at": "2026-04-11T10:00:00.000Z", "updated_at": "2026-04-11T10:00:00.000Z" }, { "id": "adj_01hv9b3c4d5e6f7g8h9j0k1l2m", "action": "credit", "type": "partial", "status": "approved", "transaction_id": "txn_01hv8w7c5b3a2z9y8x7w6v5u4t", "subscription_id": "sub_01hv8w9d8e7f6g5h4j3k2l1m0n", "customer_id": "ctm_01hv8w5a4z3y2x1w9v8u7t6s5r", "reason": "Goodwill credit for downtime", "currency_code": "USD", "totals": { "subtotal": "500", "tax": "0", "total": "500", "currency_code": "USD" }, "created_at": "2026-04-09T14:30:00.000Z", "updated_at": "2026-04-09T14:30:00.000Z" } ], "meta": { "request_id": "a9f12031-2435-46e7-92f9-135162738a9e", "pagination": { "per_page": 10, "next": "https://api.paddle.com/adjustments?after=adj_01hv9b3c4d5e6f7g8h9j0k1l2m", "has_more": false, "estimated_total": 2 } }}Common fields to show in your platform:
totals.totalfor the amount.actionto show the kind of adjustment it is, like a refund or credit.reasonwith details about why an adjustment happened.statusto show the status of an adjustment.created_atto show the date an adjustment was created.
To map action fields:
| Action | Recommended label | What it means |
|---|---|---|
refund | Refund | Some or all of a transaction was refunded to a customer. |
credit | Credit | Some or all of a transaction was credited to a customer |
chargeback, chargeback_warning | Chargeback | A customer raised a chargeback and it was refunded. |
chargeback_reverse, chargeback_warning_reverse | Chargeback reversal | Paddle successfully contested a chargeback and returned the amount to the seller. |
credit_reverse | Credit reverse | A previous credit was reversed. Not common in partner integrations. |
To map status fields:
| Status | Recommended label | What it means |
|---|---|---|
pending_approval | Pending | Awaiting approval by Paddle. Most refunds on live accounts start here. |
approved | Approved | Approved and applied. |
rejected | Rejected | Paddle rejected the adjustment. |
reversed | Reversed | Reversed by Paddle, for example when a chargeback or credit is reversed. |
List products
- Layer
- Your platform, Your agent
- Authentication
- Seller API key
- Environment
- Sandbox, Live
Sellers may create products in Paddle in the dashboard, but these aren't linked to your integration. We recommend showing the products your integration created for the seller, so they have a good understanding of what their product catalog looks like.
When you create products, you can set import_meta with your own external_id. You can then return only your integration's products by passing that value to the external_id query parameter on the GET /products endpoint.
Add include=prices to return each product's prices, so you can show pricing alongside each product. Filter with status[] (active or archived) to hide archived products.
If successful, Paddle returns a 200 with a list of products created by your integration.
{ "data": [ { "id": "pro_01hq7v9k2m4b7q3n5s6t8w0yza", "name": "Basic", "tax_category": "standard", "type": "standard", "description": "Create public and private code snippets", "image_url": null, "custom_data": null, "status": "active", "import_meta": { "imported_from": "your-platform-name", "external_id": "your-internal-id" }, "prices": [ { "id": "pri_01hq7v9k3n5s6t8w0yzab4c7d5", "product_id": "pro_01hq7v9k2m4b7q3n5s6t8w0yza", "description": "Basic monthly", "type": "standard", "billing_cycle": { "interval": "month", "frequency": 1 }, "unit_price": { "amount": "100", "currency_code": "USD" }, "status": "active" } ], "created_at": "2026-04-01T12:00:00.000Z", "updated_at": "2026-04-01T12:00:00.000Z" }, { "id": "pro_01hq7v9m5s6t8w0yzab3n5q7r8", "name": "Pro", "tax_category": "standard", "type": "standard", "description": "Unlimited snippets with private sharing", "image_url": null, "custom_data": null, "status": "active", "import_meta": { "imported_from": "your-platform-name", "external_id": "your-internal-id" }, "prices": [ { "id": "pri_01hq7v9n6t8w0yzab3n5q7r8s9", "product_id": "pro_01hq7v9m5s6t8w0yzab3n5q7r8", "description": "Pro monthly", "type": "standard", "billing_cycle": { "interval": "month", "frequency": 1 }, "unit_price": { "amount": "1500", "currency_code": "USD" }, "status": "active" } ], "created_at": "2026-04-01T12:00:00.000Z", "updated_at": "2026-04-01T12:00:00.000Z" } ], "meta": { "request_id": "87df0819-0213-44c5-90d7-f15162738a9c", "pagination": { "per_page": 50, "next": "https://api.paddle.com/products?after=pro_01hq7v9m5s6t8w0yzab3n5q7r8", "has_more": false, "estimated_total": 2 } }}