Custom API

Bring any billing data to Chartsy with the Custom API

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
    }
  ]
}
Any source

Works with whatever you bill with

If you can read your billing data, you can send it to Chartsy.

  • Polar
  • Lemon Squeezy
  • Chargebee
  • Gumroad
  • Your database
  • Manual invoices

Selling through Freemius? It has a native integration, no code needed.

How it works

From your billing data to plain-English answers in four steps

  1. Step 1

    Push your data over the API

    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/

  2. Step 2

    Ask your questions

    Type questions in plain English - about MRR, churn rate, LTV, growth trends or any metric that matters to you.

    “What was churn last quarter?”

  3. Step 3

    Get actionable insights

    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.

  4. Step 4

    Export & share

    Download reports as PDF or PNG and share them with your team or investors.

    PDF and PNG export.

Data model

Three objects get you to MRR

Send them in this order - each references the one before it. Records are matched by the ids you already use.

1 · Who pays

Customers

POST /api/v1/customers/
  • customer_idstringRequired

    Your own customer id.

  • emailemail

    Labels answers and exports.

  • countryISO 3166 code

    Drives MRR by country.

  • created_datedatetime

    Signup date - drives cohort reports.

2 · What they pay for

Prices

POST /api/v1/prices/
  • price_idstringRequired

    Your own price id. One per plan per interval.

  • productobjectRequired

    The plan, inline: product_id and plan_name. Or reference one with product_id.

  • amountdecimal stringRequired

    Major units, "49.00". Or amount_in_cents: 4900.

  • currencyISO 4217Required

    Each price carries its own currency.

  • intervalmonth · year · week · day

    Leave it out for a one-off price, which never counts as MRR.

3 · What they were billed

Invoices

POST /api/v1/invoices/
  • invoice_idstringRequired

    Your own invoice id.

  • statusstringRequired

    paid, open or past_due count toward MRR; draft and void don’t.

  • amount_due / _paid / _remainingdecimal stringRequired

    An invoice with nothing paid adds no MRR until it’s paid.

  • currency, created_dateISO 4217, datetimeRequired

    Dates are ISO 8601 with an offset.

  • line_items[]array

    MRR 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.

Try it

Send a request and watch your numbers move

Edit the example, press Send and see what Chartsy returns. Nothing leaves this page.

POST https://dashboard.chartsy.app/api/v1/invoices/
Send the same id twice to update a record instead of adding it again. Already on this sample account: cus_381, price_pro_monthly, price_pro_annual, prod_pro.
-Response
No response yetPress Send request to see what Chartsy returns.
Your dashboardSample data
MRR$12,480
Customers214
Net, 30 days$13,960
Built for developers

Send it once. Keep it in sync.

Upserts on your own ids

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.

Backfill in any order

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.

Same answers as native integrations

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.

Keys and security

One key per integration. You stay in control.

Scoped to one source

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.

Shown once, stored as a hash

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.

Revoke anytime

Issue one key per integration and revoke any of them from Data Sources → API access. Revocation takes effect on the next request.

FAQ

Questions about the Custom API

Do I need a developer to use it?

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.

Which billing tools does it work with?

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.

Can I send historical data?

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.

What happens if I send the same record twice?

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.

How should I format amounts?

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.

Why is my MRR zero after posting subscriptions?

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.

Can I combine the API with Stripe or Paddle?

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.

Your billing, your way. Chartsy’s answers.

Create a Custom Source, send your first record and ask your first question.

Get your API key

Third-party names and logos belong to their owners.

Ministry of Economy and Innovation
Startup Albania

The 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.