Create an upload link
POST/v1/transcriptions/uploads0 credits
Get a link to put a file for transcription straight into our storage, for files up to 2 GB (a direct upload takes up to 99 MB). PUT the file to `upload_url` with the given headers, then call Transcribe a file or a Twitch VOD with the `upload_id`. Free. Our own route.
01Query parameters
| Name | Type | Description |
|---|---|---|
| sizerequired | integer | The file's exact size in bytes; the link takes exactly this many (at most 2 GB). Also accepted in a JSON or form body. |
| content_typeoptional | string | The file's media type (e.g. `audio/mpeg`, `video/mp4`); send the same `Content-Type` with the PUT. Also accepted in a JSON or form body.Default: application/octet-stream |
02Request
curl -X POST "https://api.scrapesocial.ai/v1/transcriptions/uploads?size=52428800&content_type=audio%2Fmpeg" \ -H "x-api-key: $SCRAPESOCIAL_KEY"
03Responses
Real answers from the API. Lists are shortened to 2 items.
POST /v1/transcriptions/uploads?size=105102102&content_type=audio%2Fwav
{
"success": true,
"credits_remaining": 4980,
"credits_charged": 0,
"upload_id": "b7fbc52fdc208861e08e944ae314700d",
"method": "PUT",
"upload_url": "https://7ff07f9ec021e94e148c0683772bfd57.eu.r2.cloudflarestorage.com/scrapesocial-cdn/uploads/2/b7fbc52fdc208861e08e944ae314700d?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=04874dc46851b52326b9130e9dee8b12%2F20261025%2Fauto%2Fs3%2Faws4_request&X-Amz-Date=20261025T225827Z&X-Amz-Expires=900&X-Amz-SignedHeaders=content-length%3Bcontent-type%3Bhost&x-id=PutObject&X-Amz-Signature=e826c1662913a439…",
"headers": {
"Content-Type": "audio/wav"
},
"size": 105102102,
"expires_at": "2026-10-25T23:13:27Z"
}Common to every endpoint
Any route can answer these: a missing or wrong key, no credits left, the platform not answering, or a failure on our side. None of them costs credits.
GET /v1/cosmos/profile?handle=design
{
"success": false,
"message": "Invalid API key"
}04Notes
Answer: `upload_id`, `method: PUT`, `upload_url`, `headers` (send them with the PUT), `size`, `expires_at`. The link lasts 15 minutes and takes exactly `size` bytes; storage refuses any other body. Then e.g. `curl -X PUT -H 'Content-Type: audio/mpeg' --data-binary @talk.mp3 "<upload_url>"`, and `POST /v1/transcriptions` with `{"upload_id": "…"}`: the price is set from the file's length then, as for a direct upload. An upload makes one job and is deleted from storage when the job is created; an upload never used is deleted after a day. Refusals, all free: 400 `missing_parameter` (no size), 400 `bad_request` (a size that is not a whole number above 0, a bad content_type), 413 `file_too_large` (over 2 GB).
05Errors & credits
Every error has success: false, a real HTTP status and costs no credits.
400missing_parameter
A required parameter is missing or invalid.
403private_account
The account is private or age-restricted.
404not_found
No such account.
503upstream_error
The platform did not answer; retry shortly.