OnlyFans Agency Software
If you are comparing OnlyFans agency software — an all-in-one platform with its own inbox and dashboard against an API your own panel sits on top of — the choice is mostly one question: how much of the product is genuinely hard to build, and how much of it is a table with filters on it. Pay for the hard part, be sceptical about paying much for the rest, and never sign before you have run a few requests against the thing yourself. This page is the evaluation checklist, the probes to run during a trial, the build-versus-buy arithmetic and a migration plan that does not take a roster offline.
What you are actually buying
Agency tooling stacks into three layers, and they have wildly different costs to build. (If you are still drawing up a shortlist rather than evaluating one vendor, the roundup of automation tools is the wider survey.)
Session infrastructure. Keeping a creator's authenticated session alive, encrypted, and on a stable egress IP. This is the hard layer. Building it means running browser sessions, a proxy pool, re-auth handling and a ban-risk posture you own entirely. Almost nobody should build this.
The API surface. Messaging, lists, mailings, scheduling, media, webhooks — the verbs your workflows need, with consistent errors, metering and idempotency. Moderately hard, mostly tedious, and worth buying if it is complete.
The workflow layer. Unified inbox, campaign calendar, chatter assignment and shift handover, commission reporting. This is the layer where your agency's actual opinions live — the roles and handoffs those opinions encode are set out in the agency operations guide — it changes every quarter, and it is the one you will end up building regardless of what you buy. Which is why the question "does their UI do X" matters far less than "can I get at the data when their UI does not".
Ten questions to ask a vendor
- Show me a raw response — both shapes. Ask for the success shape and the failure shape, and ask how many failure shapes there are. On ofapis success is
{"data": …}everywhere, but failure is not one shape: the five gateway rejections —401UNAUTHENTICATED,402INSUFFICIENT_CREDITS,403NO_ACTIVE_SUBSCRIPTION,429RATE_LIMIT_EXCEEDEDand409IDEMPOTENCY_CONFLICT— come back as{"error":{"code","message"}}, while anything raised deeper (400,404,413,415,422,424) is a bare text message with no JSON envelope and nocodefield at all. So your client branches on the HTTP status and treatserror.codeas a bonus on those five, not as the contract. A vendor who cannot describe their own failure shapes has not looked at them. - What are the rate limits, in numbers? Per what, counted how? ofapis is per token per minute: 60 on Free, 100 on Starter, 500 on Pro. Treat suspiciously round four-figure numbers as marketing. The headers should be on every response, not just the failures.
- What happens if I send the same request twice? The answer should be a header name. Any POST that accepts an
Idempotency-Keyand replays the original response is safe to retry; anything else means your retry logic can double-charge a fan base. - Which webhook events exist? Exactly one event type exists on ofapis:
message.received, delivered at-least-once and signed — the mechanics are in webhook setup. A vendor listing a dozen event types should be asked to fire each of them into a test endpoint while you watch. - Is the proxy dedicated, and at which tier? "Dedicated residential proxy" is often true only on upper plans. Here it is tiered: Free uses a shared pool, Starter gives a dedicated proxy per account, Pro gives a dedicated proxy per creator. Get the tier in writing.
- How is a bulk send billed? This is the question that moves the invoice. A mass DM to 5,000 fans is one HTTP call and 5,000 credits — 1 per recipient, plus the 2 credits to create and preview the mailing. Pricing here is per call but not flat per call: a read is 1 credit, an account-scoped DM is 2, a scheduled post 3, a media upload 5. If a vendor quotes "per API call" without mentioning recipients or weights, model the worst case before you believe the quote.
- Can I see cost before committing? You want a preview step that returns a recipient count and an estimated cost you can gate on.
- How do I address multiple creators? The answer should be a path segment:
/accounts/{accountId}/…. If it is a different token per creator, your ops burden grows linearly with your roster — see multi-account management. - What does your API not do? There is no statistics endpoint, no tracking-link endpoint and no top-level posts feed here, which is why an earnings dashboard has to be derived from data you store yourself. A vendor who claims no gaps is describing a brochure.
- How do I get my data out? Ask for the export path on day one, not at churn.
Probes to run during the trial
Twenty minutes at a terminal with curl tells you more than a demo call. Run these against your own key.
BASE=https://api.ofapis.com/api/public/v1
AUTH="Authorization: Bearer $OFAPIS_TOKEN"
# 1. Are the rate-limit headers on a *successful* response, not just on 429s?
curl -sD- -o/dev/null "$BASE/me" -H "$AUTH" | grep -i 'x-ratelimit\|x-request-id'
# 2. Does a bad token fail closed, with the documented status?
curl -so/dev/null -w '%{http_code}\n' "$BASE/me" -H "Authorization: Bearer nonsense"
# -> 401, and free: 401/402/403/429 are rejected before any credit is debited.
# These five are also the only failures that carry a JSON error.code:
# 401 UNAUTHENTICATED, 402 INSUFFICIENT_CREDITS, 403 NO_ACTIVE_SUBSCRIPTION,
# 429 RATE_LIMIT_EXCEEDED, 409 IDEMPOTENCY_CONFLICT.
# 3. Is idempotency real? Fire the same POST twice with one key.
KEY="probe-$(date +%s)"
for i in 1 2; do
curl -sD- -o/dev/null -X POST "$BASE/accounts/$ACCOUNT_ID/lists" \
-H "$AUTH" -H "Content-Type: application/json" \
-H "Idempotency-Key: $KEY" \
-d '{"name":"probe-list"}' | grep -i 'HTTP/\|idempotency-replayed'
done
# The second response should carry: Idempotency-Replayed: true
If probe 3 creates two lists, you do not have idempotency, whatever the documentation says — and every retry you ever write will be a correctness bug. Probe 1 matters because without X-RateLimit-Remaining on successes you cannot pace a roster; you can only discover the ceiling by hitting it. Probe 3 is also worth running for what it teaches about billing: the two list creations are 1 credit each and the credit is taken before the handler runs, so anything your side got wrong — a malformed body (400), an account id that does not exist (404), an unsupported media type (415), an account that was never linked (422) — is charged and not refunded, while OnlyFans-side failures (5xx, 424) and conflicts (409) are given back. "You only pay for successful calls" is not true here and is worth disbelieving when a vendor says it. The same checks apply to authentication behaviour generally: one Bearer token, no request signing, nothing to rotate on every call.
Build versus buy, costed honestly
Buying the bottom two layers looks like $159/month on Pro with 120,000 credits and five linked creators, plus your own time on the workflow layer. Building the session layer instead means a proxy budget, a browser-automation fleet, somebody on call for re-auth, and the ban risk sitting on your balance sheet rather than a vendor's. The break-even is not about engineer salaries; it is that the failure mode of a home-built session farm is a creator's account, and that is not a cost you can amortise.
The sane split is: buy session infrastructure and the API, build the panel. Teams who try the reverse — buying a closed panel and wanting an API later — end up paying twice, because the data they need is behind someone else's UI. Be clear about what buying the bottom two layers does not give you, either: there is no inbox UI, no chatter seats, no commission reporting and no statistics endpoint, so an agency with no engineering capacity at all is buying a platform, not this. If you do have that capacity, the route reference is in the API documentation and the job-by-job patterns in agency automation.
Migrating a roster without downtime
Migration goes wrong when it is attempted as an event rather than a sequence. Do it per creator:
- Map ids first. Your tables are keyed by whatever the old vendor called a creator. Add an
account_idcolumn for the new one and backfill it before anything else moves. - Read-only shadow. Point your sync workers at the new API for one creator while the old system still owns sends. Compare inbox snapshots for a day; you are looking for missing threads and pagination gaps, not for an exact match.
- Move sends one creator at a time, starting with the lowest-volume one. Keep a kill switch that routes sends back to the old path per
account_id. - Cut broadcasts last. Campaigns are the highest-blast-radius operation; move them only after a week of clean conversational traffic.
- Keep the old export. Message history is not re-fetchable past whatever cursor depth you can afford in credits, so archive it before the contract ends.
Expect the credit ledger to look alarming during the shadow period — you are paying for two reads of everything. Budget for it rather than being surprised by a 402.
Four of the ten questions above you can answer without talking to anybody: the route, parameter and error reference covers the response shapes, the single webhook event, the account-scoped paths and the gaps. The three probes need nothing more than the Free tier — 250 credits, one linked account, 60 requests a minute — which is also the cheapest way to find out whether your own panel is a weekend or a quarter.
FAQ
What should OnlyFans agency software actually do for me?
It should keep creator sessions alive and safe, give you complete programmatic access to messaging, lists, mailings and scheduling, and get out of the way of the panel your team actually works in. Anything that owns your data but has no usable API is a liability once your workflow changes, which it will.
Is it cheaper to build our own OnlyFans tooling?
Building the workflow layer, usually yes. Building the session and proxy layer, almost never — the cost is not engineering hours but the ban risk you absorb. A reasonable split is to buy the infrastructure, pay per call, and spend your engineering on the inbox and reporting your agency competes on.
How do I verify a vendor's rate limits and billing before buying?
Run the curl probes above with a trial key: check that X-RateLimit-Limit and X-RateLimit-Remaining appear on successful responses, that a duplicate POST with the same Idempotency-Key replays rather than re-executes, and that a bulk send returns a cost estimate before it commits. Numbers that only appear in marketing copy are not numbers.
Can we switch providers without losing message history?
Only what you have already exported. Message history pages backwards by cursor, so re-pulling years of threads for a full roster is a real credit expense, and some of it may be beyond practical reach. Archive history while you still have a working contract, then migrate one creator at a time.
How many creators can we run on one plan?
Pro links five creators under a single token; above that you are on a custom plan. The account ceiling and the credit allowance are separate limits, and most agencies hit the credit ceiling first because broadcasts bill per recipient. Model both against pricing before you commit a roster.