Finish signed upload
Stage 3 of OnlyFans' media upload — completes an S3 multipart upload after every part has been PUT.
Stage 3 of OnlyFans' media upload — completes an S3 multipart upload after every part has been PUT.
Body (verified live 2026-08-06):
{ "key": "<same key as create>", "parts": [{ "ETag": "\"abc…\"", "PartNumber": 1 }], "uploadId": "<from create>", "secure": false }Returns { "ETag": "…" } for the assembled object.
Single-part uploads (< 5 MiB) skip this call — the ETag comes straight off the S3 PUT response.
Note that neither this nor create puts anything in the vault; a fourth stage hands the S3 descriptor to OnlyFans' converter host (GET /api2/v2/init → upload.geoUploadHosts). POST /accounts/{of_user_id}/media does all of it 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
Multipart completion. Single-part uploads (< 5 MiB) skip this call entirely — the ETag comes off the PUT response. Prefer POST /accounts/{of_user_id}/media.
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X POST "https://example.com/api2/v2/upload/signed/finish" \ -H "user-id: 509955039" \ -H "Content-Type: application/json" \ -d '{ "key": "upload/0e683d4d-1726-4506-a04d-2a5d05f5b9e1/1031326954680/photo.jpg", "parts": [ { "ETag": "\\"5623a10f3404a04d201a8e38aea195d6\\"", "PartNumber": 1 } ], "uploadId": "2~abc123", "secure": false }'{ "success": true, "status_code": 0, "data": null, "relogin": true}