Custom API
Overview
The Custom API data source lets you push subscription data into GrowPanel from any billing system — a custom-built platform, an in-house database, or a service we don't natively integrate with. Once it's set up, your engineering team writes a small piece of code that sends customers, plans, and invoices to our REST API, and GrowPanel calculates MRR, churn, retention and everything else.
This page is the setup walkthrough. The actual code-writing happens in Building integrations — hand that link to your developer once you've created the data source.
When to use this
Use the Custom API data source when:
- Your billing system isn't one of our native connectors (Stripe, Chargebee, Recurly, Google Sheets).
- You want to combine billing data with internal data from your own product or database.
- You're on a platform that uses Stripe under the hood but generates one-off invoices instead of real Stripe subscriptions — your engineering team can model the subscription state correctly via the API.
You can run a Custom API data source alongside native connectors — for example, a Stripe data source for self-serve customers plus a Custom API source for enterprise customers billed by another system.
Setting up the data source
Step 1: Add the data source
- Navigate to Settings → Data sources.
- Click Add data source → select Custom API.
- Give it a descriptive name (e.g. "Internal billing platform" or "Enterprise contracts").
- Click Save.
Step 2: Save the API key
When the data source is created, GrowPanel shows an access_token once. This is the API key your code will use to authenticate. Copy it immediately and store it as a secret — the full value is never shown again.
If you lose it, you can generate a new key under Settings → API Keys, but that's a key rotation, not retrieval.
Step 3: Note the data source ID
Open the new data source from the list — the ID is shown on the detail page. Your engineer will need this ID; it tells GrowPanel which data source each customer, plan and invoice belongs to.
Hand it to your engineer
Send these to whoever's building the integration:
- The API key (the
access_tokenfrom setup) - The data source ID
- The link to Building integrations — the full engineering guide, including schemas, sync patterns, and skeleton code in JavaScript and Python
Once the integration is live, data appears on the data source detail page as it's imported. The same reports, dashboards and customer detail views that work with native connectors work with custom-pushed data.
What gets pushed
In short: three kinds of records.
| Type | What it represents |
|---|---|
| Customers | Who is paying you |
| Plans | What they're paying for — pricing, billing interval |
| Invoices | Records of what they actually paid |
GrowPanel reconstructs subscription state from the invoice history — your engineer doesn't need to send "subscription" objects, just invoices. New, expansion, contraction, churn and reactivation movements are detected automatically by diffing each new invoice against the customer's history.
The full data model, required fields, and code examples are in Building integrations.
Once data is flowing
After the first invoices land:
- Dashboards and reports show the data alongside any other data sources.
- The customer list and customer detail pages show every customer the integration has pushed.
- The data source detail page shows when the most recent data arrived.
If something looks off (a customer is missing, MRR doesn't match), the customer detail page shows every invoice GrowPanel received from your integration — usually enough for the developer to find the gap.
Need help?
For setup questions, use the support widget in-app or email [email protected]. For integration design help (schema questions, sync patterns, getting the numbers to match), point your engineer at Building integrations — and they're welcome to email us too if they want a design review before shipping.