Create signed media upload
Stage 1 of OnlyFans' media upload. Returns pre-signed S3 URL(s) that you then PUT the bytes to.
Stage 1 of OnlyFans' media upload. Returns pre-signed S3 URL(s) that you then PUT the bytes to.
Body (verified live 2026-08-06):
{ "key": "upload/{uuid4}/{nonce}/{url-encoded-lowercased-filename}", "parts": 1, "contentType": "image/jpeg", "secure": false }The key prefix comes from GET /api2/v2/init → upload.s3.uploadPath (upload/, or upload/secure/ when secure is true). parts is floor(size / 5242880) + 1 for files ≥ 5 MiB, else 1.
A wrong or missing key is what produces 400 {"error":{"message":"Bad key"}} — the field really is named key, and it must be a path under the account's upload prefix.
Response: { keys: [{putUrl}], uploadId, putUrl, getUrl }. Multipart when keys[] is populated and the file is ≥ 5 MiB; otherwise PUT the whole file to putUrl.
You normally don't call this directly — POST /accounts/{of_user_id}/media runs all four stages for you.
OnlyFans only — Fansly accounts are rejected on /api2/v2/*.
Guide: The two surfaces
Authorization
apiKey Your CRM panel API key
In: header
Header Parameters
Creator account ID of the account to act as (e.g. 509955039). Required — omitting it returns 400 user-id header is required. Use GET /accounts to list your connected accounts. On /api2/v2/* the account must be an OnlyFans account; Fansly accounts are rejected there.
Proxy URL — HTTP or SOCKS5 (e.g. http://user:pass@host:port or socks5://user:pass@host:port). Optional on post-connection routes, where it overrides the proxy saved at login time. Required on the connection routes (POST /accounts/login, POST /accounts/login/cookies, POST /accounts/login/verify-otp) for OnlyFans accounts; optional for Fansly.
Request Body
application/json
Upload descriptor. Prefer POST /accounts/{of_user_id}/media, which runs all four stages for you.
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X POST "https://example.com/api2/v2/upload/signed/create" \ -H "user-id: 509955039" \ -H "Content-Type: application/json" \ -d '{ "key": "upload/0e683d4d-1726-4506-a04d-2a5d05f5b9e1/1031326954680/photo.jpg", "parts": 1, "contentType": "image/jpeg", "secure": false }'{ "success": true, "status_code": 0, "data": null, "relogin": true}