ofapisv1
info

Updated

Free OnlyFans API

There is a genuine free tier here, and it is not a time-limited trial: $0, 250 credits a month, one linked account, 60 requests a minute, the shared proxy pool, and every endpoint the paid plans get. No card.

It is also small on purpose, and the useful version of this page is the arithmetic of where it runs out. The short form: 250 credits is enough to prove an integration and not enough to run one — one cron job firing hourly would need 720 credits a month.

"Free" and "unofficial" are two different questions

Only one has a price attached. Free is what you pay a provider. Unofficial is where the capability comes from, and that does not change at any price point: OnlyFans publishes no developer API, issues no keys and runs no sandbox, so a $159 plan is exactly as unofficial as a $0 one. A no-cost API from OnlyFans does not exist — whether there is an OnlyFans API at all covers the three real options. The other thing "free" sometimes means is self-built, where the cost moves to proxies, session upkeep and your hours: a different bill, not a cheaper version of this one.

What 250 credits actually buys

Credits are weighted by the work a call causes, so "250 calls" is wrong in both directions. Divide the allowance by the weight:

If every credit went on one thing Weight Fits in a 250-credit month
Reads — /me, /subscribers, /chats 1 250
POST /chats/{chatId}/messages (unscoped) 1 250
POST /accounts/{id}/chats/{chatId}/messages 2 125
POST /accounts/{id}/scheduled/posts 3 83
POST /accounts/{id}/media 5 50
A mailing run, one credit per recipient 1 each one 250-fan blast

Two rows matter on this plan specifically. The unscoped send costs 1 where its account-scoped twin costs 2, and Free links exactly one account, so the scoped route buys nothing you need yet — that is the difference between 125 DMs a month and 250. The full weight table and per-call cost model live on what the OnlyFans API costs.

The last row is the sharp one. A mailing is one HTTP request, but the run debits one credit per recipient, so a blast to 250 fans is the whole month gone in two minutes of dispatch. The debit is all-or-nothing rather than part-sending, so any creator with more than 250 active fans cannot be mass-DMed on Free at all. Call preview first regardless: it returns recipientCount and estimatedCost, and returns -1 for the count when you target all subscribers — not a figure you can budget against here (mass DM).

# On 250 credits a mailing is the one call that can eat the whole month.
# Preview first, and refuse to trigger what the balance cannot cover.
BUDGET = 250

def may_trigger(preview, spent_so_far):
    data = preview["data"]
    count = data["recipientCount"]
    if count < 0:
        # -1 means "all subscribers": the audience is not counted until the run starts.
        raise RuntimeError("all-subscriber target — no count to check a Free balance against")
    cost = data["estimatedCost"]
    left = BUDGET - spent_so_far
    if cost > left:
        raise RuntimeError(f"needs {cost} credits, {left} left this period")
    return True

Debugging is what bites at this size. Credits are taken before the handler runs, so a 400, 404, 413, 415 or 422 is charged at full weight — the request ran, the payload was the problem. Forty malformed bodies while you learn the schema is 16% of the month, and one oversized upload rejected with 413 burns all five credits because the size check sits inside the handler. The ones you actually retry are free: a 401, 402, 403 or 429 is refused before metering, a 409, 424 or 5xx refunded.

Three ceilings, and which binds first

Ceiling Free value How it fails
Monthly credits 250 402 INSUFFICIENT_CREDITS until the period resets
Requests per minute 60 429 with Retry-After, per token, fixed 60-second window
Linked accounts 1 No second creator to link, at any volume

At 60 rpm you can sustain 3,600 requests an hour — fourteen times the entire monthly allowance, in one hour. Put the other way: 250 single-credit reads fired flat out at the ceiling exhaust the month in four minutes and ten seconds. Credits bind long before the rate limit does, and the only realistic way to see a 429 on Free is a test script opening fifty sockets at once, which costs a slot but not a credit (rate limits).

Spread evenly, 250 credits over 30 days is one call every 2.9 hours. That is the real ceiling on anything scheduled: a 15-minute cron is 2,880 calls a month, eleven times the allowance, and even an hourly job is nearly three times over. Free does not run a schedule; it runs an experiment. The account ceiling, meanwhile, is the one money cannot move inside the plan at all.

What you can genuinely finish on Free

A complete evaluation, with credits left over:

Milestone Credits
Link the account, GET /me, confirm a rotated token works 5
First paginated read: GET /subscribers?limit=100, three pages 3
GET /chats, two thread pages via olderThanMessageId 3
One real DM to a real fan, unscoped send 1
Webhook receiver end to end: two DMs to yourself for deliveries 2
One scheduled post with media (upload 5 + create 3) 8
A mailing to a 50-member list: create, preview, trigger, run 52
Total 74

An auth flow, a paginated read, a live send, a verified webhook, a scheduled drop and a real campaign — with 176 credits left for the second pass, because the first will have been wrong somewhere.

Inbound deliveries are not metered at all, so the receiver — HMAC verification against t=<unix>,v1=<hex> over "<t>.<raw body>", dedupe on X-Ofapis-Delivery, correct behaviour across the 1m/5m/30m/2h/6h retry ladder — can be exercised repeatedly for zero credits. Prove the push path first: most integrations get it wrong, and it is the only part free to get right (webhooks).

What Free cannot tell you

It is not a like-for-like safety test. Free routes through a shared proxy pool, while Starter pins a dedicated static residential proxy to your account and Pro assigns a dedicated proxy per creator. Egress reputation is one of the signals that gets accounts flagged, so extrapolating from a shared pool to a paid tier compares two setups (is the OnlyFans API safe).

There is no sandbox, on any plan. Every Free call hits the live account: the DMs reach real people and the scheduled post goes out. Rehearse on a throwaway creator account.

An unused month is gone. Credits do not roll over: the balance is overwritten with the plan allowance at the boundary rather than added to, and the period runs from when the plan started, not the first of the calendar month.

One account hides the hard part. Routing inbound events on data.message.toUser.id, per-account rate budgeting and roster-wide error handling are where integrations break, and none of it reproduces against one linked account.

When to upgrade, and to which

What changed Plan Why that one
Anything needs to run on a schedule Starter, $39 30,000 credits — 120× Free
You want a real read on account behaviour Starter Dedicated proxy instead of the shared pool
A mailing audience over 250 fans Starter A 5,000-fan blast is 5,000 credits
A second creator Pro, $159 Five linked accounts and 500 rpm
A sixth creator Enterprise Roster size agreed on the quote

Free to Starter is almost never about price per credit: at $39 for 120× the allowance, the only question is whether anything you built needs to run unattended. Starter to Pro is not a credit decision at all — 30,000 covers a busy single creator with room — it is the linked-account count. Plan table on pricing, the rest of the reference in the guides. Start free and spend 75 credits proving the path end to end.

FAQ

Is there a free OnlyFans API?

There is a free tier on this API: $0 a month, 250 credits, one linked account, 60 requests a minute, the shared proxy pool and every endpoint, no card. What does not exist at any price is an API published by OnlyFans itself — no developer portal, no issued key, no sandbox — so every working integration is unofficial regardless of cost.

How long does 250 credits last?

That depends on what you spend them on, which is why the weights matter: 250 ordinary reads, 125 account-scoped DMs, 50 media uploads, or one mass DM to 250 fans. Spread across 30 days it is one call every 2.9 hours, so a 15-minute cron job would need eleven times the allowance.

Can I send a mass DM on the free plan?

Only to a small list. The trigger costs nothing, but the run debits one credit per recipient, so a 250-fan audience is the whole month and anything larger is refused outright rather than part-sent. Call preview first for recipientCount and estimatedCost; it returns -1 for the count when you target all subscribers.

Do unused free credits roll over?

No. At the end of each period the balance is overwritten with the plan allowance rather than topped up, and the period runs from when the plan started, not the first of the calendar month. An unused month is gone, so there is no value in sitting on a Free plan you are not using.

Is the free tier a fair test of account safety?

Not a like-for-like one. Free traffic leaves through a shared proxy pool, while Starter dedicates a static residential proxy to your account and Pro dedicates one per creator, and egress reputation is a signal that matters. Free proves your code works; it will not show you how the paid egress path behaves.

Related guides

All guides
Start free — 250 credits, no card
Generate a token and make your first call in minutes.
Get started