Customers
POST /api/v1/customers/customer_idstringRequiredYour own customer id.
emailemailLabels answers and exports.
countryISO 3166 codeDrives MRR by country.
created_datedatetimeSignup date - drives cohort reports.
Not on Stripe or Paddle? Push your billing data over the API and get the same MRR, churn and AI answers.
JSON over HTTPS. Your own ids. Up to 500 records per request.
# cus_381 and price_pro_monthly were posted to /customers/ and /prices/ first
curl -X POST https://dashboard.chartsy.app/api/v1/invoices/ \
-H "Authorization: Bearer $CHARTSY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"invoice_id": "inv_1042",
"created_date": "2026-09-14T09:30:00Z",
"currency": "USD",
"status": "paid",
"amount_due": "49.00",
"amount_paid": "49.00",
"amount_remaining": "0.00",
"customer_id": "cus_381",
"line_items": [
{
"amount": "49.00",
"currency": "USD",
"price_id": "price_pro_monthly",
"period_start": "2026-09-14T09:30:00Z",
"period_end": "2026-10-14T09:30:00Z",
"subscription": {
"subscription_id": "sub_1042",
"status": "active"
}
}
]
}'Response · 201 Created{
"count": 1,
"results": [
{
"invoice_id": "inv_1042",
"id": 88213,
"created": true
}
]
}If you can read your billing data, you can send it to Chartsy.
Selling through Freemius? It has a native integration, no code needed.
Create a Custom Source, copy its key, and send customers, prices and invoices - or push into a Stripe or Paddle source you already have.
POST /api/v1/invoices/
Type questions in plain English - about MRR, churn rate, LTV, growth trends or any metric that matters to you.
“What was churn last quarter?”
Every answer comes with a chart and the numbers behind it, calculated the same way as for Stripe and Paddle.
MRR, churn, LTV, net revenue.
Download reports as PDF or PNG and share them with your team or investors.
PDF and PNG export.
Send them in this order - each references the one before it. Records are matched by the ids you already use.
POST /api/v1/customers/customer_idstringRequiredYour own customer id.
emailemailLabels answers and exports.
countryISO 3166 codeDrives MRR by country.
created_datedatetimeSignup date - drives cohort reports.
POST /api/v1/prices/price_idstringRequiredYour own price id. One per plan per interval.
productobjectRequiredThe plan, inline: product_id and plan_name. Or reference one with product_id.
amountdecimal stringRequiredMajor units, "49.00". Or amount_in_cents: 4900.
currencyISO 4217RequiredEach price carries its own currency.
intervalmonth · year · week · dayLeave it out for a one-off price, which never counts as MRR.
POST /api/v1/invoices/invoice_idstringRequiredYour own invoice id.
statusstringRequiredpaid, open or past_due count toward MRR; draft and void don’t.
amount_due / _paid / _remainingdecimal stringRequiredAn invoice with nothing paid adds no MRR until it’s paid.
currency, created_dateISO 4217, datetimeRequiredDates are ISO 8601 with an offset.
line_items[]arrayMRR comes from these. Each recurring line needs a price_id, a period_start/period_end, and a subscription block (or subscription_id).
Every request uses Authorization: Bearer csk_… against https://dashboard.chartsy.app/api/v1. Subscriptions, transactions, refunds and chargebacks (adjustments), discounts and B2B accounts have endpoints too - every field is in the Ingest API object reference, and the walkthrough is in the Custom Source guide.
Edit the example, press Send and see what Chartsy returns. Nothing leaves this page.
Every POST is an upsert keyed on your id - there’s no mapping table to keep. Re-send a record and it’s updated, not duplicated, so retries are always safe.
Pour years of history in, 500 records a request. Start dates only move earlier and only the newest invoice defines a subscription, so replaying old data can’t roll anything backwards.
MRR comes from invoice lines exactly as it does for Stripe, so charts, churn, LTV and AI answers work the same for pushed data as for synced data.
A key is bound to one source and no request carries a source id, so a key can only ever read and write its own source’s data.
Chartsy keeps only a hash of your csk_ key, so copy it when it’s shown. Keep it on your server, never in browser or mobile code.
Issue one key per integration and revoke any of them from Data Sources → API access. Revocation takes effect on the next request.
You need a short script that reads your billing data and posts it to Chartsy. If you use an AI coding agent, hand it the Chartsy ingest agent brief (chartsy.app/chartsy-ingest-agent-brief.md): it is written so Claude Code, Cursor or Codex can build the backfill and the ongoing sync from it alone.
Any of them: Polar, Lemon Squeezy, Chargebee, Gumroad, RevenueCat, your own billing code or invoices you raise by hand. If you can read the data, you can send it. Freemius has its own native integration, so you don’t need the API for it.
Yes. Send your catalog and customers first, then subscriptions, then one invoice per subscription per billing period across your whole history, then transactions and refunds. The order between those types matters; within the history it doesn’t. Send up to 500 records per request and 600 requests per minute.
Every record is keyed on your own id, and every POST is an upsert. Sending it again updates the existing record instead of adding a copy, so a retry after a timeout never double-counts revenue. The response says 201 when every record was new and 200 when any was an update.
In major units as strings ("49.00" means $49.00), or use the _in_cents twin of any money field with a whole number in the currency’s smallest unit (amount_in_cents: 4900). Every price, invoice and transaction carries its own ISO 4217 currency.
Chartsy computes MRR from invoice line items, the same way it measures a Stripe account. A subscription with no invoices adds nothing. Send one paid invoice per subscription per billing period, with a price_id and a service period on each recurring line.
Yes. Push revenue that belongs to the same business, like an invoiced customer, into your existing Stripe or Paddle source so the customer is counted once. Use a separate Custom Source for a genuinely different stream; it counts against your plan’s data source limit, and All Accounts adds every source up.
Create a Custom Source, send your first record and ask your first question.
Get your API keyThird-party names and logos belong to their owners.
Ministry of Economy and Innovation
Startup AlbaniaThe Chartsy program is realized with the financial support of the Albanian Government through the Ministry of Economy and Innovation, under the Grant 2026 scheme, and is implemented by the Innovation4Albania Agency.