Substy Developers
Media and vault

Complete direct vault upload

Complete a provider-URL upload after external PUTs. For single PUT, etag is lowercase MD5(file) up to 5 MiB; for larger files, MD5 of concatenated raw MD5 digests of 5 MiB chunks, then '-' and chunk count. For multipart PUT, provide each response ETag with one-based PartNumber. Preserve key, uploadId and listId. OnlyFans confirmation runs unless skipConfirmation=true. MCP-managed uploads use complete_vault_upload instead.

POST/v1/agencies/{agencyId}/creators/{creatorId}/vault/direct-upload-completions

Complete a provider-URL upload after external PUTs. For single PUT, etag is lowercase MD5(file) up to 5 MiB; for larger files, MD5 of concatenated raw MD5 digests of 5 MiB chunks, then '-' and chunk count. For multipart PUT, provide each response ETag with one-based PartNumber. Preserve key, uploadId and listId. OnlyFans confirmation runs unless skipConfirmation=true. MCP-managed uploads use complete_vault_upload instead.

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

agencyId*string
Length1 <= length
creatorId*string

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/agencies/string/creators/string/vault/direct-upload-completions" \  -H "Authorization: Bearer YOUR_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "key": "string"  }'
{  "data": {    "processId": "string",    "host": "string",    "name": "string",    "extra": "string",    "thumbs": [      {        "id": 0,        "url": "string"      }    ],    "duration": 0,    "processedUrl": null,    "status": null,    "mediaId": null  },  "meta": {    "requestId": "string",    "operationId": "3051932a-fdd2-48fa-b330-7e7d41535969",    "status": "COMPLETED"  }}