Skip to content
Connect an agent

Billing

The workspace's plan

Which plan this credential's workspace is on, its limits, and what counts against them now.

GET/v1/billing

TL;DR

QuestionAnswer
What does it do?The workspace's plan.
What does it need?An API key or an OAuth access token.
What does it take?Nothing.
What does it return?Status 200 with a body of type Billing.
In the SDK?flung.billing.get()
As an MCP tool?get_billing
What can go wrong?401 Missing, unknown, revoked or expired API key; 422 The request failed validation; 429 Too many requests for this credential; wait for retry-after seconds. Every failure has the same error shape.

What it does

Which plan this credential's workspace is on, its limits, and what counts against them now. Every API key, OAuth app and connect token of a workspace shares its plan. Upgrading happens on the portal, at upgradeUrl.

Example

curl
curl -X GET 'https://api.flung.dev/v1/billing' \  --header "Authorization: Bearer $FLUNG_API_KEY"

A successful answer looks like this:

json
{  "plan": "free",  "source": "free",  "status": "string",  "currentPeriodEnd": "2026-11-01T09:00:00.000Z",  "cancelAtPeriodEnd": true,  "limits": {    "accounts": 1,    "postsPerMonth": 1,    "profiles": 1,    "requestsPerMinute": 1,    "mediaBytes": 1,    "webhookEndpoints": 1,    "accountsPerPlatformPerProfile": 1  },  "usage": {    "accounts": 1,    "postsThisMonth": 1,    "profiles": 1,    "mediaBytes": 1,    "webhookEndpoints": 1  },  "upgradeUrl": "https://example.com"}

Responses

StatusMeaningBody
200The plan.Billing
401Missing, unknown, revoked or expired API key.Error
422The request failed validation.Error
429Too many requests for this credential; wait for retry-after seconds.Error

Response body

A 200 answer has the type Billing.

FieldTypeRequiredDescription
plan"free" | "pro" | "business"yesThe plan: free, pro ($19 a month) or business ($59 a month).
source"free" | "subscription" | "override"yesWhere the plan comes from: no subscription, a paying Stripe subscription, or set by Flung.
statusstringyesThe subscription's Stripe status, or none.
currentPeriodEndstring | nullyes
cancelAtPeriodEndbooleanyes
limitsPlanLimitsyes
limits.accountsintegeryesConnected social accounts that are not disconnected.
limits.postsPerMonthintegeryesPosts created in one UTC calendar month; a post counts once however many accounts it goes to.
limits.profilesinteger | nullyesProfiles; null is no limit.
limits.requestsPerMinuteintegeryesRequests a minute for each API key, OAuth app or connect token.
limits.mediaBytesintegeryesStored media, in bytes.
limits.webhookEndpointsintegeryes
limits.accountsPerPlatformPerProfileinteger | nullyesLive accounts of one platform in one profile, the accounts outside every profile counting as one profile; a LinkedIn page counts apart from a LinkedIn profile. Across the workspace a platform also has at most this times profiles. A second is refused with platform_limit_reached. null is no limit.
usageobjectyesWhat counts against each limit now.
usage.accountsintegeryes
usage.postsThisMonthintegeryes
usage.profilesintegeryes
usage.mediaBytesintegeryes
usage.webhookEndpointsintegeryes
upgradeUrlstring | nullyesThe workspace's Plan page on the Flung portal, where an owner upgrades.

See also

DocWhy
API referenceEvery endpoint
SchemasEvery request and response type
ErrorsEvery error code and what to do about it
get_billingThe same operation as an MCP tool