OnlyFans Posts API
Publish to a creator's feed from your own tooling. The OnlyFans posts API in ofapis manages feed posts through the scheduled posts resource: you attach vault media and give it a timestamp for when it should go live. Every route is account-scoped, so an agency runs one feed per creator from a single key.
Endpoints
GET /api/public/v1/accounts/{accountId}/scheduled/posts
GET /api/public/v1/accounts/{accountId}/scheduled/posts/counters
POST /api/public/v1/accounts/{accountId}/scheduled/posts
DELETE /api/public/v1/accounts/{accountId}/scheduled/posts/{postId}
There is no separate "publish-now" route — the scheduled endpoint is how posts are created. To go live as soon as possible, set the timestamp to now (or the next minute).
Create a post
A scheduled feed post attaches vault media and a publish time:
curl -X POST \
https://api.ofapis.com/api/public/v1/accounts/42/scheduled/posts \
-H "Authorization: Bearer ofapis_sk_..." \
-H "Content-Type: application/json" \
-d '{"mediaFiles":[88123,88124],"scheduledAt":"2026-07-25T18:00:00Z"}'
mediaFiles reference files already in the account's vault — upload them first with the media upload API (POST /accounts/{accountId}/media), then pass the returned ids. The response is {"data":{"id":222333444}}. A successful create debits one credit; a rejected create (bad media id, expired session) is free.
Captions and pay-per-view pricing aren't parameters of the scheduled-posts endpoint — for a priced drop, send a PPV message instead.
List the queue
curl "https://api.ofapis.com/api/public/v1/accounts/42/scheduled/posts" \
-H "Authorization: Bearer ofapis_sk_..."
GET /scheduled/posts/counters returns how many posts are queued, so a dashboard can show the backlog without paging the full list.
Use cases
- Content pipeline. Push finished sets from your DAM into the feed automatically: upload to the vault, then create the post with those
mediaFiles. - Timed drops. Queue a media drop and pair it with a broadcast through the mass DM API so subscribers get pinged when it lands.
- Editorial calendar. Manage the whole queue through the scheduling API; delete and re-create to reschedule.
Gotchas
- Media must exist first.
mediaFilesare vault ids, not raw uploads — a post referencing a missing id is rejected. Confirm the upload finished before you create the post. - No in-place edit. To change a queued post, delete it (
DELETE /scheduled/posts/{postId}) and create a new one. - No caption or price here. The scheduled-posts body takes
mediaFilesandscheduledAtonly — for text or a paywall, send a PPV message instead. - Billing and rate limits. One credit per successful call; failures are free. Pace calls to your plan's requests-per-minute — see pricing.
FAQ
How do I publish a post immediately?
Create it on the scheduled endpoint with scheduledAt set to the current time — there is no separate instant-publish route, the scheduled queue is how every post is created.
How do I attach photos or video to a post?
Upload the files to the vault first with POST /accounts/{accountId}/media, then pass the returned ids as mediaFiles on the create call. The endpoint references existing vault media rather than accepting raw uploads inline.
Can I make a feed post pay-per-view?
Not through the scheduled-posts endpoint — it only takes mediaFiles and scheduledAt. For paid content, send a PPV message with a price instead.
Does listing the feed cost credits?
One credit per successful call, the same as any read. Failed calls — an expired session or upstream error — are never billed. See pricing.