- Docs
- Billing and usage
Billing and usage
MusicAPI bills by the request, in euros, once a month. There is no seat price and no per-user price.
What one request is
The meter counts one request for each of these:
| What | Counts as |
|---|---|
A library call: /api/{integrationUserUUID}/… | One request, failed calls included |
| A sign-in that connects an account (hosted sign-in or a pre-authorized session) | One request |
| A call that a managed transfer makes to a music service | One request per call. Retries of one call do not count again. |
Not billed:
- the Match Results API;
- the Usage API;
- anything on Demoify and the Sample library;
- the docs sandbox.
Calls from a signed-in docs session count like any other call of your account.
Core and Managed Transfers metering
A managed transfer reads the source service and writes the destination service. Your plan decides which side is billed:
| Plan | Transfer requests billed |
|---|---|
| MusicAPI Managed Transfers | Both sides: the source reads and the destination writes |
| MusicAPI Core | The source side only |
The destination is your own service, so on the Core plan the writes into it are not billed. Your library calls and sign-ins are billed on both plans.
As a guide, one transfer makes about 60 requests on the source side and about 120 on the destination side. The real number depends on the size of the library and on the services.
Price per 1,000 requests
The tiers are cumulative within one month: the first 5 million requests are billed at the first rate, the next 20 million at the second, everything above at the third.
| Monthly requests | Price per 1,000 requests |
|---|---|
| 0 – 5M | €0.60 |
| 5M – 25M | €0.45 |
| 25M + | €0.30 |
The monthly minimum
The €500 minimum applies to accounts that run on MusicAPI's managed integrations. Each month bills the greater of the metered charge and the minimum. When the metered charge is lower, the invoice adds a "Minimum monthly spend top-up" line.
An account that uses only its own developer apps has no minimum: it pays the metered charge alone. In the first and the last month of a plan, the minimum counts only the days of the plan, and only the usage after you went live is billed.
| Requests in the month | Metered charge | Invoice |
|---|---|---|
| 400,000 | 400 × €0.60 = €240 | €500 (with a €260 top-up) |
| 2,000,000 | 2,000 × €0.60 = €1,200 | €1,200 |
| 8,000,000 | 5,000 × €0.60 + 3,000 × €0.45 = €4,350 | €4,350 |
The pricing page has a calculator.
Where to see usage
- Analytics → API usage in the dashboard: requests over time, by endpoint, error rates and response times.
- The Usage API: the same numbers as JSON, for your own reports and alerts.
- The MCP server tool
get_usage_summary: the billed requests of this month and last month, from the same table as the invoices. The numbers lag a few hours.
Read your usage by API
The Usage API gives your backend the numbers of the Analytics pages. It needs Client Secret authentication (Authorization: Basic base64(clientId:clientSecret)), so call it only from your backend. It is not billed, and it counts against your rate limit like any other call.
| Endpoint | What it answers |
|---|---|
GET /public/analytics/api-requests | Requests per period: total, succeeded, failed |
GET /public/analytics/unique-users | Connected users with a request in each period (daily or monthly active users) |
GET /public/analytics/errors | Failed requests per period and HTTP status code |
GET /public/analytics/error-types | Failed requests per service and error name |
GET /public/analytics/auth-statuses | Sign-ins per service: started, connected, failed |
GET /public/analytics/users-per-type | Connected users with a request, per service |
GET /public/analytics/top-routes | Requests, error rate and response time per endpoint |
GET /public/analytics/response-times | Average, p50, p95 and p99 response time per period |
GET /public/analytics/geo-distribution | Requests and users per country |
GET /public/analytics/top-users | Requests and errors per connected user |
Every endpoint takes startDate and endDate (YYYY-MM-DD, UTC). Both days count. One call reads at most 366 days, or 31 days with granularity=hourly. The series also take granularity (hourly, daily, weekly or monthly), and most endpoints take integrationType to count one service only. Counts come back as decimal strings, so a large count stays exact.
curl 'https://api.musicapi.com/public/analytics/api-requests?startDate=2026-10-01&endDate=2026-10-31&granularity=daily' \
-u 'YOUR_CLIENT_ID:YOUR_CLIENT_SECRET'
{
"data": [
{ "period": "2026-10-01 00:00:00", "total_requests": "1250", "success_requests": "1231", "error_requests": "19" }
]
}
The numbers include every request the meter bills, failed requests too. The Usage API reads the raw request log, so today's numbers include the requests up to the moment of your call.
Invoices
Invoices come from Stripe once a month, after the month ends.
- Card. Stripe charges the card you added in the dashboard (Billing). If a charge fails, we email you; when the invoice is still unpaid 7 days later, the API answers
402until it is paid. Paying the invoice or adding a new card switches the API back on within a minute. - Invoice. For accounts on managed integrations that agree it with us: Stripe emails the invoice, payable in 30 days.
You can change the card or cancel the plan on the Billing page. A cancel charges what is due at once and switches the API off. A different cycle, a custom tier or a custom limit is part of your agreement with us. Contact us.
Keep the bill down
- Store what you read. A playlist list does not change every second.
- Use
limitParamwith the service's maximum, so a full read takes fewer pages. - Send at most 20 items per write, but do send 20, not one at a time.
- Use webhooks instead of polling.