Step 1 of uploading a file. Returns the pending asset with its upload:
send the file’s bytes with upload.method to upload.url, with
upload.headers, before upload.expires_at. The bytes go directly to
storage, not through this API. Then call
POST /v1/assets/{asset_id}/complete.
content_type and byte_size must be the file’s; storage refuses another
content type and completion refuses another size. A file larger than the
plan allows (10 MB on Free, 100 MB on paid plans) is refused with
402 plan_limit_exceeded, whose details give its size (usage) and
the limit (limit) for byte_size.
The file counts toward the organization’s storage from here on, while it
uploads too. On plans where storage is a hard limit (Free), a file that
would go over it is refused with 402 plan_limit_exceeded; on others,
Nohead-Usage-Warning reports going over.
A project can have at most 100 uploads in progress (started within the
upload’s lifetime, not yet completed or deleted); past that, 409 with
too_many_uploads. Uploads never completed are removed after a day.
A unique value (1-255 printable ASCII characters) that makes retrying
this request safe. The first response (below 500) is stored for 24
hours per user or API key; retries with the same key and the same
request get it again with an Idempotent-Replayed: true header. The
same key with a different request is refused with 400; a retry while
the first request is still running gets 409.
The URL of the whole image, for ready images (JPEG, PNG, GIF, WebP,
AVIF or SVG), deleted ones included until they are purged; null
otherwise. Image URLs are open and never expire. An SVG is served
as SVG without its scripts, unless a format such as @webp
rasterizes it. For a rendition,
write imgproxy processing options
before /plain/, and a format after @: for example
https://images.nohead.io/rs:fill:800:600/g:sm/plain/…@webp. Renditions
are at most 4096 pixels a side, from originals of at most 50
megapixels. Options that would return the file as stored (raw,
skip_processing, strip_metadata) are refused.
The URL of a small rendition (fits in 640×640, WebP), for ready images and SVGs (rasterized), deleted ones included until they are purged; null otherwise.
The URL of the file as uploaded, for ready assets of any type,
deleted ones included until they are purged; null otherwise. It
downloads the file under its filename (a rename applies within a
minute or so), is open and never expires, and is cached on a CDN.
The URL that plays a ready video or audio file inline, for
<video> and <audio> (with range requests, so players can seek),
deleted ones included until they are purged: MP4, QuickTime, M4A,
3GP, WebM, Matroska, MP3, AAC, FLAC, WAV and Ogg (whose content is
checked when the upload completes). Null for other types, which
file_url downloads.
Open, never expiring and cached on a CDN, like file_url.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Nohead","colors":{"primary":"#171717","light":"#fafafa","dark":"#171717"},"logo":{"light":"https://mintcdn.com/nohead/Zi4ShGp1nnXJjvN2/logo/light.svg?fit=max\u0026auto=format\u0026n=Zi4ShGp1nnXJjvN2\u0026q=85\u0026s=e431964df2c90a7efd8cf3839919156a","dark":"https://mintcdn.com/nohead/Zi4ShGp1nnXJjvN2/logo/dark.svg?fit=max\u0026auto=format\u0026n=Zi4ShGp1nnXJjvN2\u0026q=85\u0026s=0f1626c2856f0e98870466fde414c967","href":"https://nohead.io"},"favicon":"https://mintcdn.com/nohead/Zi4ShGp1nnXJjvN2/favicon.svg?fit=max\u0026auto=format\u0026n=Zi4ShGp1nnXJjvN2\u0026q=85\u0026s=73c7bf765c68dd3524dfa06a8e1a5c55","api":{"playground":{"display":"simple"},"examples":{"languages":["curl","typescript","python","ruby"]}},"footer":{"socials":{"x":"https://x.com/nohead_io","github":"https://github.com/nohead-io"},"links":[{"items":[{"label":"Status","href":"https://status.nohead.io"}]}]},"icons":{"library":"lucide"},"contextual":{"options":["copy","view","claude","chatgpt","download-spec"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"nohead","hasAudioNarration":false,"actualSubdomain":"nohead","customDomains":["docs.nohead.io"],"gitSource":{"type":"github","owner":"nohead-io","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":"","_id":"6ae7050e53ca202614c2eaad"},"chroma":{"latestBuiltDeploymentHistoryId":"6aec9780ada4d37850e32d2e","collectionId":"67023daf-3f94-446b-bf28-d982ad716b31","liveDeploymentHistoryId":"6aec9780ada4d37850e32d2e","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aee51a7f00d0b95d690fcbc","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API reference","count":82},{"language":"default","tag":"Endpoints","count":81},{"language":"default","tag":"Guides","count":22},{"language":"default","tag":"CLI","count":14},{"language":"default","tag":"Commands","count":13},{"language":"default","tag":"Assets","count":11},{"language":"default","tag":"Webhooks","count":10},{"language":"default","tag":"Drafts","count":9},{"language":"default","tag":"Fields","count":9},{"language":"default","tag":"Records","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"img[src$=\"/icons/typescript.svg\"]{--icon: url(\"/icons/typescript.svg\")}img[src$=\"/icons/python.svg\"]{--icon: url(\"/icons/python.svg\")}img[src$=\"/icons/ruby.svg\"]{--icon: url(\"/icons/ruby.svg\")}img:is([src$=\"/icons/typescript.svg\"],[src$=\"/icons/python.svg\"],[src$=\"/icons/ruby.svg\"]){box-sizing:border-box;padding-left:1rem;background-color:rgb(var(--gray-400))!important;-webkit-mask:var(--icon) center / contain no-repeat;mask:var(--icon) center / contain no-repeat}.dark img:is([src$=\"/icons/typescript.svg\"],[src$=\"/icons/python.svg\"],[src$=\"/icons/ruby.svg\"]){background-color:rgb(var(--gray-500))!important}[aria-current] img:is([src$=\"/icons/typescript.svg\"],[src$=\"/icons/python.svg\"],[src$=\"/icons/ruby.svg\"]){background-color:rgb(var(--primary))!important}.dark [aria-current] img:is([src$=\"/icons/typescript.svg\"],[src$=\"/icons/python.svg\"],[src$=\"/icons/ruby.svg\"]){background-color:rgb(var(--primary-light))!important}"}],"page":{"pagePath":"api-reference/assets/start-an-upload","slug":"/api-reference/assets/start-an-upload","pageMetadata":{"title":"Start an upload","description":"Step 1 of uploading a file. Returns the pending asset with its `upload`:\nsend the file's bytes with `upload.method` to `upload.url`, with\n`upload.headers`, before `upload.expires_at`. The bytes go directly to\nstorage, not through this API. Then call\n`POST /v1/assets/{asset_id}/complete`.\n\n`content_type` and `byte_size` must be the file's; storage refuses another\ncontent type and completion refuses another size. A file larger than the\nplan allows (10 MB on Free, 100 MB on paid plans) is refused with\n`402 plan_limit_exceeded`, whose details give its size (`usage`) and\nthe limit (`limit`) for `byte_size`.\n\nThe file counts toward the organization's storage from here on, while it\nuploads too. On plans where storage is a hard limit (Free), a file that\nwould go over it is refused with `402 plan_limit_exceeded`; on others,\n`Nohead-Usage-Warning` reports going over.\n\nA project can have at most 100 uploads in progress (started within the\nupload's lifetime, not yet completed or deleted); past that, `409` with\n`too_many_uploads`. Uploads never completed are removed after a day.\n","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/projects/{project_id}/assets","href":"/api-reference/assets/start-an-upload","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Step 1 of uploading a file. Returns the pending asset with its \", _jsx(_components.code, {\n children: \"upload\"\n }), \":\\nsend the file’s bytes with \", _jsx(_components.code, {\n children: \"upload.method\"\n }), \" to \", _jsx(_components.code, {\n children: \"upload.url\"\n }), \", with\\n\", _jsx(_components.code, {\n children: \"upload.headers\"\n }), \", before \", _jsx(_components.code, {\n children: \"upload.expires_at\"\n }), \". The bytes go directly to\\nstorage, not through this API. Then call\\n\", _jsx(_components.code, {\n children: \"POST /v1/assets/{asset_id}/complete\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"content_type\"\n }), \" and \", _jsx(_components.code, {\n children: \"byte_size\"\n }), \" must be the file’s; storage refuses another\\ncontent type and completion refuses another size. A file larger than the\\nplan allows (10 MB on Free, 100 MB on paid plans) is refused with\\n\", _jsx(_components.code, {\n children: \"402 plan_limit_exceeded\"\n }), \", whose details give its size (\", _jsx(_components.code, {\n children: \"usage\"\n }), \") and\\nthe limit (\", _jsx(_components.code, {\n children: \"limit\"\n }), \") for \", _jsx(_components.code, {\n children: \"byte_size\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The file counts toward the organization’s storage from here on, while it\\nuploads too. On plans where storage is a hard limit (Free), a file that\\nwould go over it is refused with \", _jsx(_components.code, {\n children: \"402 plan_limit_exceeded\"\n }), \"; on others,\\n\", _jsx(_components.code, {\n children: \"Nohead-Usage-Warning\"\n }), \" reports going over.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A project can have at most 100 uploads in progress (started within the\\nupload’s lifetime, not yet completed or deleted); past that, \", _jsx(_components.code, {\n children: \"409\"\n }), \" with\\n\", _jsx(_components.code, {\n children: \"too_many_uploads\"\n }), \". Uploads never completed are removed after a day.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Start an upload","description":"Step 1 of uploading a file. Returns the pending asset with its `upload`:\nsend the file's bytes with `upload.method` to `upload.url`, with\n`upload.headers`, before `upload.expires_at`. The bytes go directly to\nstorage, not through this API. Then call\n`POST /v1/assets/{asset_id}/complete`.\n\n`content_type` and `byte_size` must be the file's; storage refuses another\ncontent type and completion refuses another size. A file larger than the\nplan allows (10 MB on Free, 100 MB on paid plans) is refused with\n`402 plan_limit_exceeded`, whose details give its size (`usage`) and\nthe limit (`limit`) for `byte_size`.\n\nThe file counts toward the organization's storage from here on, while it\nuploads too. On plans where storage is a hard limit (Free), a file that\nwould go over it is refused with `402 plan_limit_exceeded`; on others,\n`Nohead-Usage-Warning` reports going over.\n\nA project can have at most 100 uploads in progress (started within the\nupload's lifetime, not yet completed or deleted); past that, `409` with\n`too_many_uploads`. Uploads never completed are removed after a day.\n","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/projects/{project_id}/assets","href":"/api-reference/assets/start-an-upload","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"assets_upload","summary":"Start an upload","description":"Step 1 of uploading a file. Returns the pending asset with its `upload`:\nsend the file's bytes with `upload.method` to `upload.url`, with\n`upload.headers`, before `upload.expires_at`. The bytes go directly to\nstorage, not through this API. Then call\n`POST /v1/assets/{asset_id}/complete`.\n\n`content_type` and `byte_size` must be the file's; storage refuses another\ncontent type and completion refuses another size. A file larger than the\nplan allows (10 MB on Free, 100 MB on paid plans) is refused with\n`402 plan_limit_exceeded`, whose details give its size (`usage`) and\nthe limit (`limit`) for `byte_size`.\n\nThe file counts toward the organization's storage from here on, while it\nuploads too. On plans where storage is a hard limit (Free), a file that\nwould go over it is refused with `402 plan_limit_exceeded`; on others,\n`Nohead-Usage-Warning` reports going over.\n\nA project can have at most 100 uploads in progress (started within the\nupload's lifetime, not yet completed or deleted); past that, `409` with\n`too_many_uploads`. Uploads never completed are removed after a day.\n","tags":["assets"],"parameters":["cc504f9e-67f6-4844-9986-9512bf550e96","7cc72cff-277a-40e7-8495-f580f4f77059"],"requestBody":"ca8c4349-bfb3-4875-a6d6-543167fe4183","responses":{"201":"00903198-a4b9-4506-ad8d-19f40c075698","400":"291b55b5-b6c7-4b64-8fd5-0616e98e11c4","401":"e93d2d62-d372-4d08-bb72-546a35bf975c","402":"a1377308-07ac-4100-b07c-61d0fec9980c","403":"594f1ae8-cda3-4376-93aa-fe25f156d9e7","404":"bb8cbe46-56c3-4448-8f7b-1f6aee600c89","409":"1e843f22-6790-4660-98b2-80b981217b83","422":"0d82508c-d5e1-4f1b-bbe7-6fe7f85858db","429":"2c6316a5-7619-4dac-9f05-698de22fb6ec"},"x-codeSamples":[{"lang":"typescript","label":"TypeScript","source":"import { Nohead } from \"@nohead/sdk\"\n\nconst nohead = new Nohead()\n\nconst result = await nohead.assets.upload(\n new Blob([\"Hello\"], { type: \"text/plain\" }),\n {\n filename: \"hello.txt\",\n }\n)\n"},{"lang":"python","label":"Python","source":"from nohead import Nohead\n\nnohead = Nohead()\n\nresult = nohead.assets.upload(b\"Hello\", filename=\"hello.txt\")\n"},{"lang":"ruby","label":"Ruby","source":"require \"nohead\"\nrequire \"stringio\"\n\nnohead = Nohead::Client.new\n\nresult = nohead.assets.upload(StringIO.new(\"Hello\"), filename: \"hello.txt\")\n"}],"method":"post","type":"path","servers":["8bbbb494-a028-4201-ac4c-27745b9572a7"],"security":["fdb003e5-f8f3-4ee7-b4f8-ee1029f9c030"],"path":"/v1/projects/{project_id}/assets","baseUrlOptions":["https://api.nohead.io"],"title":"Start an upload","codeSamples":[{"label":"TypeScript","lang":"typescript","source":"import { Nohead } from \"@nohead/sdk\"\n\nconst nohead = new Nohead()\n\nconst result = await nohead.assets.upload(\n new Blob([\"Hello\"], { type: \"text/plain\" }),\n {\n filename: \"hello.txt\",\n }\n)\n"},{"label":"Python","lang":"python","source":"from nohead import Nohead\n\nnohead = Nohead()\n\nresult = nohead.assets.upload(b\"Hello\", filename=\"hello.txt\")\n"},{"label":"Ruby","lang":"ruby","source":"require \"nohead\"\nrequire \"stringio\"\n\nnohead = Nohead::Client.new\n\nresult = nohead.assets.upload(StringIO.new(\"Hello\"), filename: \"hello.txt\")\n"}],"requestExampleLanguages":["bash","typescript","python","ruby"],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"cc504f9e-67f6-4844-9986-9512bf550e96":{"name":"Idempotency-Key","in":"header","required":false,"description":"A unique value (1-255 printable ASCII characters) that makes retrying\nthis request safe. The first response (below 500) is stored for 24\nhours per user or API key; retries with the same key and the same\nrequest get it again with an `Idempotent-Replayed: true` header. The\nsame key with a different request is refused with `400`; a retry while\nthe first request is still running gets `409`.\n","schema":{"type":"string","minLength":1,"maxLength":255,"isRequired":false,"description":"A unique value (1-255 printable ASCII characters) that makes retrying\nthis request safe. The first response (below 500) is stored for 24\nhours per user or API key; retries with the same key and the same\nrequest get it again with an `Idempotent-Replayed: true` header. The\nsame key with a different request is refused with `400`; a retry while\nthe first request is still running gets `409`.\n","uniqueKey":"","typeLabel":"string"},"example":"8f14e45f-ceea-467a-9575-0f1a3f2c1d2e"},"7cc72cff-277a-40e7-8495-f580f4f77059":{"name":"Nohead-Client","in":"header","description":"First-party client identifier recorded in history (e.g. `cli/0.3.1`). Informational only.","schema":{"type":"string","description":"First-party client identifier recorded in history (e.g. `cli/0.3.1`). Informational only.","uniqueKey":"","typeLabel":"string"}},"554c97a5-aa9e-4c37-8a49-abc32d557a3a":{"name":"project_id","in":"path","required":true,"schema":{"type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string"},"example":"prj_01J9ZQ3F8X5W2K7M4N6P0R1S2T"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["filename","content_type","byte_size"],"properties":{"filename":{"type":"string","maxLength":255,"isRequired":true,"uniqueKey":"filename","typeLabel":"string"},"content_type":{"type":"string","examples":["image/jpeg"],"isRequired":true,"uniqueKey":"content_type","typeLabel":"string"},"byte_size":{"type":"integer","minimum":1,"description":"Exact size of the file in bytes, at most the plan's largest upload (10 MB on Free, 100 MB on paid plans).","isRequired":true,"uniqueKey":"byte_size","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"filename":"\u003cstring>","content_type":"image/jpeg","byte_size":2}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"00903198-a4b9-4506-ad8d-19f40c075698":{"headers":{"Nohead-Usage-Warning":{"description":"Set when the organization is over a soft plan limit, as\n`\u003cmetric>=\u003cusage>/\u003climit>` (e.g. `api_requests=100234/100000`). Requests\nstill succeed. Any API-key request may carry it for `api_requests`.\n","schema":{"type":"string"}}},"description":"The pending asset, with where to upload it.","content":{"application/json":{"schema":{"type":"object","description":"A new asset with where to upload its file, returned only when it is created.","required":["upload","id","object","project_id","filename","alt","content_type","byte_size","width","height","status","deleted_at","purge_after","image_url","preview_url","file_url","media_url","uploaded_at","created_at","updated_at"],"properties":{"id":{"type":"string","examples":["ast_01J9ZQ3F8X5W2K7M4N6P0R1S2T"],"isRequired":true,"uniqueKey":"id","typeLabel":"string"},"object":{"const":"asset","isRequired":true,"uniqueKey":"object","typeLabel":"any"},"project_id":{"type":"string","isRequired":true,"uniqueKey":"project_id","typeLabel":"string"},"filename":{"type":"string","description":"The filename, any Unicode, as uploaded unless renamed since. Downloads use it.","isRequired":true,"uniqueKey":"filename","typeLabel":"string"},"alt":{"oneOf":[{"type":"string","maxLength":1000,"description":"Alternative text, saying what an image shows; null until set. The default wherever the asset is used.","isRequired":true,"uniqueKey":"alt.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":1000,"description":"Alternative text, saying what an image shows; null until set. The default wherever the asset is used.","isRequired":true,"uniqueKey":"alt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"alt","typeLabel":"string | null"},"content_type":{"type":"string","examples":["image/png"],"isRequired":true,"uniqueKey":"content_type","typeLabel":"string"},"byte_size":{"type":"integer","isRequired":true,"uniqueKey":"byte_size","typeLabel":"integer"},"width":{"oneOf":[{"type":"integer","description":"Pixel width, for images.","isRequired":true,"uniqueKey":"width.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Pixel width, for images.","isRequired":true,"uniqueKey":"width.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"width","typeLabel":"integer | null"},"height":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"height.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"height.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"height","typeLabel":"integer | null"},"status":{"type":"string","enum":["pending","ready","failed"],"description":"`pending` until the upload is completed; only `ready` assets can be used in records.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"deleted_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the asset was deleted; null unless it is.","isRequired":true,"uniqueKey":"deleted_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the asset was deleted; null unless it is.","isRequired":true,"uniqueKey":"deleted_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"deleted_at","typeLabel":"string\u003cdate-time> | null"},"purge_after":{"oneOf":[{"type":"string","format":"date-time","description":"When a deleted asset and its file are removed for good, unless restored or purged first.","isRequired":true,"uniqueKey":"purge_after.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When a deleted asset and its file are removed for good, unless restored or purged first.","isRequired":true,"uniqueKey":"purge_after.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"purge_after","typeLabel":"string\u003cdate-time> | null"},"image_url":{"oneOf":[{"type":"string","format":"uri","description":"The URL of the whole image, for ready images (JPEG, PNG, GIF, WebP,\nAVIF or SVG), deleted ones included until they are purged; null\notherwise. Image URLs are open and never expire. An SVG is served\nas SVG without its scripts, unless a format such as `@webp`\nrasterizes it. For a rendition,\nwrite [imgproxy processing options](https://docs.imgproxy.net/usage/processing)\nbefore `/plain/`, and a format after `@`: for example\n`https://images.nohead.io/rs:fill:800:600/g:sm/plain/…@webp`. Renditions\nare at most 4096 pixels a side, from originals of at most 50\nmegapixels. Options that would return the file as stored (`raw`,\n`skip_processing`, `strip_metadata`) are refused.\n","examples":["https://images.nohead.io/plain/0199f5c2-7b1e-7c3a-9d4f-2a6b8c0e1f3d/0199f5c2-8a2d-7e4b-b1c3-5d7e9f1a2b4c"],"isRequired":true,"uniqueKey":"image_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"The URL of the whole image, for ready images (JPEG, PNG, GIF, WebP,\nAVIF or SVG), deleted ones included until they are purged; null\notherwise. Image URLs are open and never expire. An SVG is served\nas SVG without its scripts, unless a format such as `@webp`\nrasterizes it. For a rendition,\nwrite [imgproxy processing options](https://docs.imgproxy.net/usage/processing)\nbefore `/plain/`, and a format after `@`: for example\n`https://images.nohead.io/rs:fill:800:600/g:sm/plain/…@webp`. Renditions\nare at most 4096 pixels a side, from originals of at most 50\nmegapixels. Options that would return the file as stored (`raw`,\n`skip_processing`, `strip_metadata`) are refused.\n","examples":["https://images.nohead.io/plain/0199f5c2-7b1e-7c3a-9d4f-2a6b8c0e1f3d/0199f5c2-8a2d-7e4b-b1c3-5d7e9f1a2b4c"],"isRequired":true,"uniqueKey":"image_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"image_url","typeLabel":"string\u003curi> | null"},"preview_url":{"oneOf":[{"type":"string","format":"uri","description":"The URL of a small rendition (fits in 640×640, WebP), for ready images and SVGs (rasterized), deleted ones included until they are purged; null otherwise.","isRequired":true,"uniqueKey":"preview_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"The URL of a small rendition (fits in 640×640, WebP), for ready images and SVGs (rasterized), deleted ones included until they are purged; null otherwise.","isRequired":true,"uniqueKey":"preview_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"preview_url","typeLabel":"string\u003curi> | null"},"file_url":{"oneOf":[{"type":"string","format":"uri","description":"The URL of the file as uploaded, for ready assets of any type,\ndeleted ones included until they are purged; null otherwise. It\ndownloads the file under its `filename` (a rename applies within a\nminute or so), is open and never expires, and is cached on a CDN.\n","examples":["https://files.nohead.io/0199f5c2-7b1e-7c3a-9d4f-2a6b8c0e1f3d/0199f5c2-8a2d-7e4b-b1c3-5d7e9f1a2b4c"],"isRequired":true,"uniqueKey":"file_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"The URL of the file as uploaded, for ready assets of any type,\ndeleted ones included until they are purged; null otherwise. It\ndownloads the file under its `filename` (a rename applies within a\nminute or so), is open and never expires, and is cached on a CDN.\n","examples":["https://files.nohead.io/0199f5c2-7b1e-7c3a-9d4f-2a6b8c0e1f3d/0199f5c2-8a2d-7e4b-b1c3-5d7e9f1a2b4c"],"isRequired":true,"uniqueKey":"file_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"file_url","typeLabel":"string\u003curi> | null"},"media_url":{"oneOf":[{"type":"string","format":"uri","description":"The URL that plays a ready video or audio file inline, for\n`\u003cvideo>` and `\u003caudio>` (with range requests, so players can seek),\ndeleted ones included until they are purged: MP4, QuickTime, M4A,\n3GP, WebM, Matroska, MP3, AAC, FLAC, WAV and Ogg (whose content is\nchecked when the upload completes). Null for other types, which\n`file_url` downloads.\nOpen, never expiring and cached on a CDN, like `file_url`.\n","examples":["https://media.nohead.io/0199f5c2-7b1e-7c3a-9d4f-2a6b8c0e1f3d/0199f5c2-8a2d-7e4b-b1c3-5d7e9f1a2b4c"],"isRequired":true,"uniqueKey":"media_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"The URL that plays a ready video or audio file inline, for\n`\u003cvideo>` and `\u003caudio>` (with range requests, so players can seek),\ndeleted ones included until they are purged: MP4, QuickTime, M4A,\n3GP, WebM, Matroska, MP3, AAC, FLAC, WAV and Ogg (whose content is\nchecked when the upload completes). Null for other types, which\n`file_url` downloads.\nOpen, never expiring and cached on a CDN, like `file_url`.\n","examples":["https://media.nohead.io/0199f5c2-7b1e-7c3a-9d4f-2a6b8c0e1f3d/0199f5c2-8a2d-7e4b-b1c3-5d7e9f1a2b4c"],"isRequired":true,"uniqueKey":"media_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"media_url","typeLabel":"string\u003curi> | null"},"uploaded_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"uploaded_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"uploaded_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"uploaded_at","typeLabel":"string\u003cdate-time> | null"},"created_at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp in UTC.","examples":["2026-09-27T12:00:00.000Z"],"isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp in UTC.","examples":["2026-09-27T12:00:00.000Z"],"isRequired":true,"uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"upload":{"type":"object","additionalProperties":false,"required":["method","url","headers","expires_at"],"properties":{"method":{"const":"PUT","isRequired":true,"uniqueKey":"upload.method","typeLabel":"any"},"url":{"type":"string","format":"uri","isRequired":true,"uniqueKey":"upload.url","typeLabel":"string\u003curi>"},"headers":{"type":"object","description":"Headers to send with the upload.","additionalProperties":{"type":"string","uniqueKey":"upload.headers.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"upload.headers","typeLabel":"object"},"expires_at":{"type":"string","format":"date-time","description":"ISO 8601 timestamp in UTC.","examples":["2026-09-27T12:00:00.000Z"],"isRequired":true,"uniqueKey":"upload.expires_at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"upload","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"ast_01J9ZQ3F8X5W2K7M4N6P0R1S2T","object":"asset","project_id":"\u003cstring>","filename":"\u003cstring>","alt":"\u003cstring>","content_type":"image/png","byte_size":123,"width":123,"height":123,"status":"pending","deleted_at":"2023-11-07T05:31:56Z","purge_after":"2023-11-07T05:31:56Z","image_url":"https://images.nohead.io/plain/0199f5c2-7b1e-7c3a-9d4f-2a6b8c0e1f3d/0199f5c2-8a2d-7e4b-b1c3-5d7e9f1a2b4c","preview_url":"\u003cstring>","file_url":"https://files.nohead.io/0199f5c2-7b1e-7c3a-9d4f-2a6b8c0e1f3d/0199f5c2-8a2d-7e4b-b1c3-5d7e9f1a2b4c","media_url":"https://media.nohead.io/0199f5c2-7b1e-7c3a-9d4f-2a6b8c0e1f3d/0199f5c2-8a2d-7e4b-b1c3-5d7e9f1a2b4c","uploaded_at":"2023-11-07T05:31:56Z","created_at":"2026-09-27T12:00:00.000Z","updated_at":"2026-09-27T12:00:00.000Z","upload":{"method":"PUT","url":"\u003cstring>","headers":{},"expires_at":"2026-09-27T12:00:00.000Z"}}}},"exampleType":"generated"}},"exampleType":"generated"},"291b55b5-b6c7-4b64-8fd5-0616e98e11c4":{"description":"The request was malformed: unparseable JSON, an invalid query parameter, or a body key the operation doesn't take (detail code `unknown_parameter`, naming the key).","headers":{"X-Request-Id":{"description":"Unique identifier for the request, also echoed in error bodies.","schema":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","plan_limit_exceeded","authorization_error","not_found","conflict","precondition_failed","validation_error","rate_limited","internal_error","service_unavailable"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"],"isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code, e.g. `required`.","isRequired":true,"uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"},"field":{"type":"string","description":"Key of the offending field or parameter, when applicable.","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"usage":{"type":"integer","description":"Current usage, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].usage","typeLabel":"integer"},"limit":{"type":"integer","description":"The plan's limit, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].limit","typeLabel":"integer"},"current_revision":{"type":"integer","description":"The resource's current revision, for `revision_mismatch` details.","uniqueKey":"error.details.items.[INDEX].current_revision","typeLabel":"integer"},"record_id":{"type":"string","description":"The record that already has the value, for `taken` details.","uniqueKey":"error.details.items.[INDEX].record_id","typeLabel":"string"},"draft_id":{"type":"string","description":"The record's draft, for `draft_exists` and `draft_pending` details.","uniqueKey":"error.details.items.[INDEX].draft_id","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","request_id":"req_01J9ZQ3F8X5W2K7M4N6P0R1S2T","details":[{"code":"\u003cstring>","message":"\u003cstring>","field":"\u003cstring>","usage":123,"limit":123,"current_revision":123,"record_id":"\u003cstring>","draft_id":"\u003cstring>"}]}}}},"exampleType":"generated"}},"exampleType":"generated"},"e93d2d62-d372-4d08-bb72-546a35bf975c":{"description":"Authentication is missing or invalid.","headers":{"X-Request-Id":{"description":"Unique identifier for the request, also echoed in error bodies.","schema":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","plan_limit_exceeded","authorization_error","not_found","conflict","precondition_failed","validation_error","rate_limited","internal_error","service_unavailable"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"],"isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code, e.g. `required`.","isRequired":true,"uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"},"field":{"type":"string","description":"Key of the offending field or parameter, when applicable.","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"usage":{"type":"integer","description":"Current usage, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].usage","typeLabel":"integer"},"limit":{"type":"integer","description":"The plan's limit, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].limit","typeLabel":"integer"},"current_revision":{"type":"integer","description":"The resource's current revision, for `revision_mismatch` details.","uniqueKey":"error.details.items.[INDEX].current_revision","typeLabel":"integer"},"record_id":{"type":"string","description":"The record that already has the value, for `taken` details.","uniqueKey":"error.details.items.[INDEX].record_id","typeLabel":"string"},"draft_id":{"type":"string","description":"The record's draft, for `draft_exists` and `draft_pending` details.","uniqueKey":"error.details.items.[INDEX].draft_id","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","request_id":"req_01J9ZQ3F8X5W2K7M4N6P0R1S2T","details":[{"code":"\u003cstring>","message":"\u003cstring>","field":"\u003cstring>","usage":123,"limit":123,"current_revision":123,"record_id":"\u003cstring>","draft_id":"\u003cstring>"}]}}}},"exampleType":"generated"}},"exampleType":"generated"},"a1377308-07ac-4100-b07c-61d0fec9980c":{"description":"The change would exceed a hard limit of the organization's plan. The\ndetail names the metric (`field`) with its `usage` and `limit`.\n","headers":{"X-Request-Id":{"description":"Unique identifier for the request, also echoed in error bodies.","schema":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","plan_limit_exceeded","authorization_error","not_found","conflict","precondition_failed","validation_error","rate_limited","internal_error","service_unavailable"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"],"isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code, e.g. `required`.","isRequired":true,"uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"},"field":{"type":"string","description":"Key of the offending field or parameter, when applicable.","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"usage":{"type":"integer","description":"Current usage, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].usage","typeLabel":"integer"},"limit":{"type":"integer","description":"The plan's limit, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].limit","typeLabel":"integer"},"current_revision":{"type":"integer","description":"The resource's current revision, for `revision_mismatch` details.","uniqueKey":"error.details.items.[INDEX].current_revision","typeLabel":"integer"},"record_id":{"type":"string","description":"The record that already has the value, for `taken` details.","uniqueKey":"error.details.items.[INDEX].record_id","typeLabel":"string"},"draft_id":{"type":"string","description":"The record's draft, for `draft_exists` and `draft_pending` details.","uniqueKey":"error.details.items.[INDEX].draft_id","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","request_id":"req_01J9ZQ3F8X5W2K7M4N6P0R1S2T","details":[{"code":"\u003cstring>","message":"\u003cstring>","field":"\u003cstring>","usage":123,"limit":123,"current_revision":123,"record_id":"\u003cstring>","draft_id":"\u003cstring>"}]}}}},"exampleType":"generated"}},"exampleType":"generated"},"594f1ae8-cda3-4376-93aa-fe25f156d9e7":{"description":"The caller is not allowed to perform this action.","headers":{"X-Request-Id":{"description":"Unique identifier for the request, also echoed in error bodies.","schema":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","plan_limit_exceeded","authorization_error","not_found","conflict","precondition_failed","validation_error","rate_limited","internal_error","service_unavailable"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"],"isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code, e.g. `required`.","isRequired":true,"uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"},"field":{"type":"string","description":"Key of the offending field or parameter, when applicable.","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"usage":{"type":"integer","description":"Current usage, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].usage","typeLabel":"integer"},"limit":{"type":"integer","description":"The plan's limit, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].limit","typeLabel":"integer"},"current_revision":{"type":"integer","description":"The resource's current revision, for `revision_mismatch` details.","uniqueKey":"error.details.items.[INDEX].current_revision","typeLabel":"integer"},"record_id":{"type":"string","description":"The record that already has the value, for `taken` details.","uniqueKey":"error.details.items.[INDEX].record_id","typeLabel":"string"},"draft_id":{"type":"string","description":"The record's draft, for `draft_exists` and `draft_pending` details.","uniqueKey":"error.details.items.[INDEX].draft_id","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","request_id":"req_01J9ZQ3F8X5W2K7M4N6P0R1S2T","details":[{"code":"\u003cstring>","message":"\u003cstring>","field":"\u003cstring>","usage":123,"limit":123,"current_revision":123,"record_id":"\u003cstring>","draft_id":"\u003cstring>"}]}}}},"exampleType":"generated"}},"exampleType":"generated"},"bb8cbe46-56c3-4448-8f7b-1f6aee600c89":{"description":"The resource does not exist or is not visible to the caller.","headers":{"X-Request-Id":{"description":"Unique identifier for the request, also echoed in error bodies.","schema":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","plan_limit_exceeded","authorization_error","not_found","conflict","precondition_failed","validation_error","rate_limited","internal_error","service_unavailable"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"],"isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code, e.g. `required`.","isRequired":true,"uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"},"field":{"type":"string","description":"Key of the offending field or parameter, when applicable.","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"usage":{"type":"integer","description":"Current usage, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].usage","typeLabel":"integer"},"limit":{"type":"integer","description":"The plan's limit, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].limit","typeLabel":"integer"},"current_revision":{"type":"integer","description":"The resource's current revision, for `revision_mismatch` details.","uniqueKey":"error.details.items.[INDEX].current_revision","typeLabel":"integer"},"record_id":{"type":"string","description":"The record that already has the value, for `taken` details.","uniqueKey":"error.details.items.[INDEX].record_id","typeLabel":"string"},"draft_id":{"type":"string","description":"The record's draft, for `draft_exists` and `draft_pending` details.","uniqueKey":"error.details.items.[INDEX].draft_id","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","request_id":"req_01J9ZQ3F8X5W2K7M4N6P0R1S2T","details":[{"code":"\u003cstring>","message":"\u003cstring>","field":"\u003cstring>","usage":123,"limit":123,"current_revision":123,"record_id":"\u003cstring>","draft_id":"\u003cstring>"}]}}}},"exampleType":"generated"}},"exampleType":"generated"},"1e843f22-6790-4660-98b2-80b981217b83":{"description":"The request conflicts with current state.","headers":{"X-Request-Id":{"description":"Unique identifier for the request, also echoed in error bodies.","schema":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","plan_limit_exceeded","authorization_error","not_found","conflict","precondition_failed","validation_error","rate_limited","internal_error","service_unavailable"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"],"isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code, e.g. `required`.","isRequired":true,"uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"},"field":{"type":"string","description":"Key of the offending field or parameter, when applicable.","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"usage":{"type":"integer","description":"Current usage, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].usage","typeLabel":"integer"},"limit":{"type":"integer","description":"The plan's limit, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].limit","typeLabel":"integer"},"current_revision":{"type":"integer","description":"The resource's current revision, for `revision_mismatch` details.","uniqueKey":"error.details.items.[INDEX].current_revision","typeLabel":"integer"},"record_id":{"type":"string","description":"The record that already has the value, for `taken` details.","uniqueKey":"error.details.items.[INDEX].record_id","typeLabel":"string"},"draft_id":{"type":"string","description":"The record's draft, for `draft_exists` and `draft_pending` details.","uniqueKey":"error.details.items.[INDEX].draft_id","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","request_id":"req_01J9ZQ3F8X5W2K7M4N6P0R1S2T","details":[{"code":"\u003cstring>","message":"\u003cstring>","field":"\u003cstring>","usage":123,"limit":123,"current_revision":123,"record_id":"\u003cstring>","draft_id":"\u003cstring>"}]}}}},"exampleType":"generated"}},"exampleType":"generated"},"0d82508c-d5e1-4f1b-bbe7-6fe7f85858db":{"description":"The request failed validation.","headers":{"X-Request-Id":{"description":"Unique identifier for the request, also echoed in error bodies.","schema":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","plan_limit_exceeded","authorization_error","not_found","conflict","precondition_failed","validation_error","rate_limited","internal_error","service_unavailable"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"],"isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code, e.g. `required`.","isRequired":true,"uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"},"field":{"type":"string","description":"Key of the offending field or parameter, when applicable.","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"usage":{"type":"integer","description":"Current usage, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].usage","typeLabel":"integer"},"limit":{"type":"integer","description":"The plan's limit, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].limit","typeLabel":"integer"},"current_revision":{"type":"integer","description":"The resource's current revision, for `revision_mismatch` details.","uniqueKey":"error.details.items.[INDEX].current_revision","typeLabel":"integer"},"record_id":{"type":"string","description":"The record that already has the value, for `taken` details.","uniqueKey":"error.details.items.[INDEX].record_id","typeLabel":"string"},"draft_id":{"type":"string","description":"The record's draft, for `draft_exists` and `draft_pending` details.","uniqueKey":"error.details.items.[INDEX].draft_id","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"type":"validation_error","message":"Record validation failed","request_id":"req_01J9ZQ3F8X5W2K7M4N6P0R1S2T","details":[{"field":"title","code":"required","message":"is required"}]}},"examples":{"Example":{"title":"Example","value":{"error":{"type":"validation_error","message":"Record validation failed","request_id":"req_01J9ZQ3F8X5W2K7M4N6P0R1S2T","details":[{"field":"title","code":"required","message":"is required"}]}}}},"exampleType":"examples"}},"exampleType":"examples"},"2c6316a5-7619-4dac-9f05-698de22fb6ec":{"description":"Too many requests for this API key or user (or, with failing\ncredentials, this IP address). A published-only key is counted per\nclient IP. Wait `Retry-After` seconds; retries with the same `Idempotency-Key`\nare safe. On the Free plan, an organization's API keys are also\nrefused once its API requests reach the month's limit, with a\n`plan_limit` detail (`field` `api_requests`, `usage` and `limit`),\nuntil the next month (UTC) or an upgrade.\n","headers":{"X-Request-Id":{"description":"Unique identifier for the request, also echoed in error bodies.","schema":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"]}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"RateLimit-Limit":{"description":"Requests allowed in the current window. Sent on every authenticated response.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["type","message","request_id"],"properties":{"type":{"type":"string","enum":["invalid_request","authentication_error","plan_limit_exceeded","authorization_error","not_found","conflict","precondition_failed","validation_error","rate_limited","internal_error","service_unavailable"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[A-Za-z0-9]+$","examples":["req_01J9ZQ3F8X5W2K7M4N6P0R1S2T"],"isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable error code, e.g. `required`.","isRequired":true,"uniqueKey":"error.details.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"},"field":{"type":"string","description":"Key of the offending field or parameter, when applicable.","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"usage":{"type":"integer","description":"Current usage, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].usage","typeLabel":"integer"},"limit":{"type":"integer","description":"The plan's limit, for `plan_limit` details.","uniqueKey":"error.details.items.[INDEX].limit","typeLabel":"integer"},"current_revision":{"type":"integer","description":"The resource's current revision, for `revision_mismatch` details.","uniqueKey":"error.details.items.[INDEX].current_revision","typeLabel":"integer"},"record_id":{"type":"string","description":"The record that already has the value, for `taken` details.","uniqueKey":"error.details.items.[INDEX].record_id","typeLabel":"string"},"draft_id":{"type":"string","description":"The record's draft, for `draft_exists` and `draft_pending` details.","uniqueKey":"error.details.items.[INDEX].draft_id","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"type":"invalid_request","message":"\u003cstring>","request_id":"req_01J9ZQ3F8X5W2K7M4N6P0R1S2T","details":[{"code":"\u003cstring>","message":"\u003cstring>","field":"\u003cstring>","usage":123,"limit":123,"current_revision":123,"record_id":"\u003cstring>","draft_id":"\u003cstring>"}]}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"fdb003e5-f8f3-4ee7-b4f8-ee1029f9c030":{"apiKey":{"type":"http","scheme":"bearer","description":"Project-scoped API key, e.g. `nohead_sk_k7fz0a9c3m2q_\u003csecret>`, or\n`nohead_pk_…` for a published-only key. Used by servers, CI, the CLI\nand coding agents.\n","scopes":[],"schemeName":"apiKey"}}},"servers":{"8bbbb494-a028-4201-ac4c-27745b9572a7":{"url":"https://api.nohead.io","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Project-scoped API key, e.g. `nohead_sk_k7fz0a9c3m2q_\u003csecret>`, or\n`nohead_pk_…` for a published-only key. Used by servers, CI, the CLI\nand coding agents.\n","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Project-scoped API key, e.g. `nohead_sk_k7fz0a9c3m2q_\u003csecret>`, or\n`nohead_pk_…` for a published-only key. Used by servers, CI, the CLI\nand coding agents.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"openapi.json"},"subdomain":"nohead","siteName":"Nohead","title":"Start an upload - Nohead","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T14:20:21.122Z","originalFileLocation":"api-reference/assets/start-an-upload.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Step 1 of uploading a file. Returns the pending asset with its upload: send the file\u0026#x27;s bytes with upload.method to upload.url, with upload.headers, before upload.expires_at. The bytes go directly to storage, not through this API. Then call POST /v1/assets/{asset_id}/complete. content_type and byte_size must be the file\u0026#x27;s; storage refuses another content type and completion refuses another size. A file larger than the plan allows (10 MB on Free, 100 MB on paid plans) is refused with 402 plan_limit_exceeded, whose details give its size (usage) and the limit (limit) for byte_size. The file counts toward the organization\u0026#x27;s storage from here on, while it uploads too. On plans where storage is a hard limit (Free), a file that would go over it is refused with 402 plan_limit_exceeded; on others, Nohead-Usage-Warning reports going over. A project can have at most 100 uploads in progress (started within the upload\u0026#x27;s lifetime, not yet completed or deleted); past that, 409 with too_many_uploads. Uploads never completed are removed after a day.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Nohead\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/nohead/rS-6Mxl34NeSIeuO/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/nohead/rS-6Mxl34NeSIeuO/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/nohead/rS-6Mxl34NeSIeuO/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/nohead/rS-6Mxl34NeSIeuO/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/nohead/rS-6Mxl34NeSIeuO/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/nohead/rS-6Mxl34NeSIeuO/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/nohead/rS-6Mxl34NeSIeuO/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/nohead/rS-6Mxl34NeSIeuO/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/nohead/rS-6Mxl34NeSIeuO/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Start an upload - Nohead\">\u003cmeta data-mint-head property=\"og:description\" content=\"Step 1 of uploading a file. Returns the pending asset with its upload: send the file\u0026#x27;s bytes with upload.method to upload.url, with upload.headers, before upload.expires_at. The bytes go directly to storage, not through this API. Then call POST /v1/assets/{asset_id}/complete. content_type and byte_size must be the file\u0026#x27;s; storage refuses another content type and completion refuses another size. A file larger than the plan allows (10 MB on Free, 100 MB on paid plans) is refused with 402 plan_limit_exceeded, whose details give its size (usage) and the limit (limit) for byte_size. The file counts toward the organization\u0026#x27;s storage from here on, while it uploads too. On plans where storage is a hard limit (Free), a file that would go over it is refused with 402 plan_limit_exceeded; on others, Nohead-Usage-Warning reports going over. A project can have at most 100 uploads in progress (started within the upload\u0026#x27;s lifetime, not yet completed or deleted); past that, 409 with too_many_uploads. Uploads never completed are removed after a day.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Nohead\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.nohead.io/api-reference/assets/start-an-upload\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://nohead.mintlify.site/_mintlify/api/og/v2?division=Assets\u0026amp;title=Start+an+upload\u0026amp;description=Step+1+of+uploading+a+file.+Returns+the+pending+asset+with+its+%60upload%60%3A%0Asend+the+file%27s+bytes+with+%60upload.method%60+to+%60upload.url%60%2C+with%0A%60upload.headers%60%2C+befo\u0026amp;theme=5304bc0da6bac525d02ea050\u0026amp;signature=304c0ab7a7746328d767f9b77e7806c511a98309738c7eef06b637923614a4a0\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Start an upload - Nohead\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Step 1 of uploading a file. Returns the pending asset with its upload: send the file\u0026#x27;s bytes with upload.method to upload.url, with upload.headers, before upload.expires_at. The bytes go directly to storage, not through this API. Then call POST /v1/assets/{asset_id}/complete. content_type and byte_size must be the file\u0026#x27;s; storage refuses another content type and completion refuses another size. A file larger than the plan allows (10 MB on Free, 100 MB on paid plans) is refused with 402 plan_limit_exceeded, whose details give its size (usage) and the limit (limit) for byte_size. The file counts toward the organization\u0026#x27;s storage from here on, while it uploads too. On plans where storage is a hard limit (Free), a file that would go over it is refused with 402 plan_limit_exceeded; on others, Nohead-Usage-Warning reports going over. A project can have at most 100 uploads in progress (started within the upload\u0026#x27;s lifetime, not yet completed or deleted); past that, 409 with too_many_uploads. Uploads never completed are removed after a day.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://nohead.mintlify.site/_mintlify/api/og/v2?division=Assets\u0026amp;title=Start+an+upload\u0026amp;description=Step+1+of+uploading+a+file.+Returns+the+pending+asset+with+its+%60upload%60%3A%0Asend+the+file%27s+bytes+with+%60upload.method%60+to+%60upload.url%60%2C+with%0A%60upload.headers%60%2C+befo\u0026amp;theme=5304bc0da6bac525d02ea050\u0026amp;signature=304c0ab7a7746328d767f9b77e7806c511a98309738c7eef06b637923614a4a0\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/nohead/rS-6Mxl34NeSIeuO/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Nohead\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#171717\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.nohead.io/api-reference/assets/start-an-upload\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/assets/start-an-upload.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.nohead.io/#organization\",\"name\":\"Nohead\",\"url\":\"https://docs.nohead.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/nohead/Zi4ShGp1nnXJjvN2/logo/light.svg?fit=max\u0026auto=format\u0026n=Zi4ShGp1nnXJjvN2\u0026q=85\u0026s=e431964df2c90a7efd8cf3839919156a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.nohead.io#website\",\"name\":\"Nohead\",\"url\":\"https://docs.nohead.io\",\"publisher\":{\"@id\":\"https://docs.nohead.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.nohead.io/api-reference/assets/start-an-upload#webpage\",\"url\":\"https://docs.nohead.io/api-reference/assets/start-an-upload\",\"name\":\"Start an upload\",\"description\":\"Step 1 of uploading a file. Returns the pending asset with its upload: send the file's bytes with upload.method to upload.url, with upload.headers, before upload.expires_at. The bytes go directly to storage, not through this API. Then call POST /v1/assets/{asset_id}/complete. content_type and byte_size must be the file's; storage refuses another content type and completion refuses another size. A file larger than the plan allows (10 MB on Free, 100 MB on paid plans) is refused with 402 plan_limit_exceeded, whose details give its size (usage) and the limit (limit) for byte_size. The file counts toward the organization's storage from here on, while it uploads too. On plans where storage is a hard limit (Free), a file that would go over it is refused with 402 plan_limit_exceeded; on others, Nohead-Usage-Warning reports going over. A project can have at most 100 uploads in progress (started within the upload's lifetime, not yet completed or deleted); past that, 409 with too_many_uploads. Uploads never completed are removed after a day.\",\"dateModified\":\"2026-11-05T14:20:21.122Z\",\"isPartOf\":{\"@id\":\"https://docs.nohead.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.nohead.io/api-reference/assets/start-an-upload#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.nohead.io/api-reference/assets/start-an-upload#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.nohead.io/api-reference/records/list-records\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Assets\",\"item\":\"https://docs.nohead.io/api-reference/assets/list-assets\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Start an upload\",\"item\":\"https://docs.nohead.io/api-reference/assets/start-an-upload\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.nohead.io/api-reference/assets/start-an-upload#apireference\",\"headline\":\"Start an upload\",\"name\":\"Start an upload\",\"description\":\"Step 1 of uploading a file. Returns the pending asset with its upload: send the file's bytes with upload.method to upload.url, with upload.headers, before upload.expires_at. The bytes go directly to storage, not through this API. Then call POST /v1/assets/{asset_id}/complete. content_type and byte_size must be the file's; storage refuses another content type and completion refuses another size. A file larger than the plan allows (10 MB on Free, 100 MB on paid plans) is refused with 402 plan_limit_exceeded, whose details give its size (usage) and the limit (limit) for byte_size. The file counts toward the organization's storage from here on, while it uploads too. On plans where storage is a hard limit (Free), a file that would go over it is refused with 402 plan_limit_exceeded; on others, Nohead-Usage-Warning reports going over. A project can have at most 100 uploads in progress (started within the upload's lifetime, not yet completed or deleted); past that, 409 with too_many_uploads. Uploads never completed are removed after a day.\",\"url\":\"https://docs.nohead.io/api-reference/assets/start-an-upload\",\"mainEntityOfPage\":{\"@id\":\"https://docs.nohead.io/api-reference/assets/start-an-upload#webpage\"},\"dateModified\":\"2026-11-05T14:20:21.122Z\",\"publisher\":{\"@id\":\"https://docs.nohead.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.nohead.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Nohead\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Nohead","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API reference","pages":[{"title":"Overview","icon":"braces","href":"/api-reference/overview"},{"group":"Endpoints","pages":[{"group":"Records","icon":"file-text","pages":[{"title":"List records","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/collections/{collection_id}/records","href":"/api-reference/records/list-records"},{"title":"Create a record","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/collections/{collection_id}/records","href":"/api-reference/records/create-a-record"},{"title":"Get a record","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/records/{record_id}","href":"/api-reference/records/get-a-record"},{"title":"Update a record","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/records/{record_id}","href":"/api-reference/records/update-a-record"},{"title":"Delete a record","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/records/{record_id}","href":"/api-reference/records/delete-a-record"},{"title":"Count records","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/collections/{collection_id}/records/count","href":"/api-reference/records/count-records"},{"title":"Change many records","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/collections/{collection_id}/record-batches","href":"/api-reference/records/change-many-records"},{"title":"Restore a record","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/records/{record_id}/restore","href":"/api-reference/records/restore-a-record"}]},{"group":"Publishing","icon":"globe","pages":[{"title":"Get a record's publication","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/records/{record_id}/publication","href":"/api-reference/publishing/get-a-records-publication"},{"title":"Publish a record","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/records/{record_id}/publication","href":"/api-reference/publishing/publish-a-record"},{"title":"Unpublish a record","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/records/{record_id}/publication","href":"/api-reference/publishing/unpublish-a-record"},{"title":"Get a record's schedule","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/records/{record_id}/schedule","href":"/api-reference/publishing/get-a-records-schedule"},{"title":"Schedule publishing or unpublishing","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/records/{record_id}/schedule","href":"/api-reference/publishing/schedule-publishing-or-unpublishing"},{"title":"Cancel a record's schedule","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/records/{record_id}/schedule","href":"/api-reference/publishing/cancel-a-records-schedule"},{"title":"List scheduled changes","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/collections/{collection_id}/scheduled-changes","href":"/api-reference/publishing/list-scheduled-changes"}]},{"group":"Revisions","icon":"file-clock","pages":[{"title":"List a record's revisions","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/records/{record_id}/revisions","href":"/api-reference/revisions/list-a-records-revisions"},{"title":"Get a revision","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/records/{record_id}/revisions/{revision}","href":"/api-reference/revisions/get-a-revision"},{"title":"Get a revision by ID","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/revisions/{revision_id}","href":"/api-reference/revisions/get-a-revision-by-id"},{"title":"Revert to a revision","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/records/{record_id}/revisions/{revision}/revert","href":"/api-reference/revisions/revert-to-a-revision"},{"title":"Compare two revisions","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/records/{record_id}/diff","href":"/api-reference/revisions/compare-two-revisions"}]},{"group":"Drafts","icon":"file-pen","pages":[{"title":"List a record's drafts","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/records/{record_id}/drafts","href":"/api-reference/drafts/list-a-records-drafts"},{"title":"Start a draft","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/records/{record_id}/drafts","href":"/api-reference/drafts/start-a-draft"},{"title":"List drafts","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/collections/{collection_id}/drafts","href":"/api-reference/drafts/list-drafts"},{"title":"Get a draft","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/drafts/{draft_id}","href":"/api-reference/drafts/get-a-draft"},{"title":"Update a draft","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/drafts/{draft_id}","href":"/api-reference/drafts/update-a-draft"},{"title":"Discard a draft","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/drafts/{draft_id}","href":"/api-reference/drafts/discard-a-draft"},{"title":"Merge a draft","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/drafts/{draft_id}/merge","href":"/api-reference/drafts/merge-a-draft"},{"title":"Schedule a draft's merge","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/drafts/{draft_id}/schedule","href":"/api-reference/drafts/schedule-a-drafts-merge"},{"title":"Cancel a draft's merge","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/drafts/{draft_id}/schedule","href":"/api-reference/drafts/cancel-a-drafts-merge"}]},{"group":"Collections","icon":"database","pages":[{"title":"List collections","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/projects/{project_id}/collections","href":"/api-reference/collections/list-collections"},{"title":"Create a collection","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/projects/{project_id}/collections","href":"/api-reference/collections/create-a-collection"},{"title":"Get a collection","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/collections/{collection_id}","href":"/api-reference/collections/get-a-collection"},{"title":"Update a collection","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/collections/{collection_id}","href":"/api-reference/collections/update-a-collection"},{"title":"Delete a collection","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/collections/{collection_id}","href":"/api-reference/collections/delete-a-collection"},{"title":"Restore a deleted collection","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/collections/{collection_id}/restore","href":"/api-reference/collections/restore-a-deleted-collection"}]},{"group":"Schema changes","icon":"file-diff","pages":[{"title":"Get the schema at a version","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/collections/{collection_id}/schema","href":"/api-reference/schema-changes/get-the-schema-at-a-version"},{"title":"List schema changes","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/collections/{collection_id}/schema-changes","href":"/api-reference/schema-changes/list-schema-changes"},{"title":"Get a schema change","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/schema-changes/{schema_change_id}","href":"/api-reference/schema-changes/get-a-schema-change"}]},{"group":"Fields","icon":"list","pages":[{"title":"List fields","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/collections/{collection_id}/fields","href":"/api-reference/fields/list-fields"},{"title":"Add a field","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/collections/{collection_id}/fields","href":"/api-reference/fields/add-a-field"},{"title":"Get a field","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fields/{field_id}","href":"/api-reference/fields/get-a-field"},{"title":"Update a field","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/fields/{field_id}","href":"/api-reference/fields/update-a-field"},{"title":"Delete a field","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/fields/{field_id}","href":"/api-reference/fields/delete-a-field"},{"title":"Get the field order","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/collections/{collection_id}/field-order","href":"/api-reference/fields/get-the-field-order"},{"title":"Reorder fields","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/collections/{collection_id}/field-order","href":"/api-reference/fields/reorder-fields"},{"title":"Stop accepting a renamed field's old key","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/fields/{field_id}/aliases/{alias}","href":"/api-reference/fields/stop-accepting-a-renamed-fields-old-key"},{"title":"Restore a deleted field","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/fields/{field_id}/restore","href":"/api-reference/fields/restore-a-deleted-field"}]},{"group":"Field migrations","icon":"arrow-right-left","pages":[{"title":"List field migrations","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/collections/{collection_id}/migrations","href":"/api-reference/migrations/list-field-migrations"},{"title":"Migrate a field","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/collections/{collection_id}/migrations","href":"/api-reference/migrations/migrate-a-field"},{"title":"Get a field migration","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/migrations/{migration_id}","href":"/api-reference/migrations/get-a-field-migration"},{"title":"Cancel a field migration","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/migrations/{migration_id}/cancel","href":"/api-reference/migrations/cancel-a-field-migration"}]},{"group":"Assets","icon":"image","pages":[{"title":"List assets","description":"The project's assets, newest first, filtered by `q`,\n`filter[deleted]` and `filter[content_type]`. Published-only API keys\nget `403`: sites reach assets through records (`expand=`), one at a\ntime.\n","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/projects/{project_id}/assets","href":"/api-reference/assets/list-assets"},{"title":"Start an upload","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/projects/{project_id}/assets","href":"/api-reference/assets/start-an-upload"},{"title":"Complete an upload","description":"Step 2 of uploading a file: verifies the uploaded file (it exists, with the\ndeclared size and content type), reads image dimensions and marks the asset\n`ready`. Only ready assets can be used in records. Safe to retry: a ready\nasset is returned unchanged. `422 upload_missing` means the file has not\nbeen uploaded yet; `422 upload_mismatch` means it differed from what was\ndeclared, and the asset is marked `failed` (completing it again is\n`409 upload_failed`: start a new upload). `409 upload_changed` if the\nfile was uploaded again while it was being checked: complete it again.\nWebhooks get `asset.created` now, when the asset is ready.\n","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/assets/{asset_id}/complete","href":"/api-reference/assets/complete-an-upload"},{"title":"Get an asset","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/assets/{asset_id}","href":"/api-reference/assets/get-an-asset"},{"title":"Update an asset","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/assets/{asset_id}","href":"/api-reference/assets/update-an-asset"},{"title":"Delete an asset","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/assets/{asset_id}","href":"/api-reference/assets/delete-an-asset"},{"title":"See where an asset is used","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/assets/{asset_id}/usage","href":"/api-reference/assets/see-where-an-asset-is-used"},{"title":"Restore a deleted asset","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/assets/{asset_id}/restore","href":"/api-reference/assets/restore-a-deleted-asset"},{"title":"Permanently delete a deleted asset","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/assets/{asset_id}/purge","href":"/api-reference/assets/permanently-delete-a-deleted-asset"}]},{"group":"Search","icon":"search","pages":[{"title":"Search records","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/collections/{collection_id}/search","href":"/api-reference/search/search-records"},{"title":"Search across collections","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/projects/{project_id}/search","href":"/api-reference/search/search-across-collections"},{"title":"Get search index status","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/collections/{collection_id}/search-index","href":"/api-reference/search/get-search-index-status"},{"title":"Rebuild the search index","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/collections/{collection_id}/search-index/rebuild","href":"/api-reference/search/rebuild-the-search-index"}]},{"group":"Webhooks","icon":"webhook","pages":[{"title":"List webhooks","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/projects/{project_id}/webhooks","href":"/api-reference/webhooks/list-webhooks"},{"title":"Create a webhook","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/projects/{project_id}/webhooks","href":"/api-reference/webhooks/create-a-webhook"},{"title":"Get a webhook","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/{webhook_id}","href":"/api-reference/webhooks/get-a-webhook"},{"title":"Update a webhook","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/webhooks/{webhook_id}","href":"/api-reference/webhooks/update-a-webhook"},{"title":"Delete a webhook","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/webhooks/{webhook_id}","href":"/api-reference/webhooks/delete-a-webhook"},{"title":"Send a test event","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/{webhook_id}/test","href":"/api-reference/webhooks/send-a-test-event"},{"title":"List a webhook's secrets","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/{webhook_id}/secrets","href":"/api-reference/webhooks/list-a-webhooks-secrets"},{"title":"Rotate a webhook's signing secret","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/{webhook_id}/secrets","href":"/api-reference/webhooks/rotate-a-webhooks-signing-secret"},{"title":"Retire a webhook secret","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/webhook-secrets/{secret_id}","href":"/api-reference/webhooks/retire-a-webhook-secret"},{"title":"Restore a webhook","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/{webhook_id}/restore","href":"/api-reference/webhooks/restore-a-webhook"}]},{"group":"Webhook deliveries","icon":"send","pages":[{"title":"List deliveries","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/{webhook_id}/deliveries","href":"/api-reference/deliveries/list-deliveries"},{"title":"Get a delivery","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhook-deliveries/{delivery_id}","href":"/api-reference/deliveries/get-a-delivery"},{"title":"Retry a delivery","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhook-deliveries/{delivery_id}/retry","href":"/api-reference/deliveries/retry-a-delivery"}]},{"group":"Activity log","icon":"history","pages":[{"title":"List a project's audit events","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/projects/{project_id}/audit-events","href":"/api-reference/audit/list-a-projects-audit-events"}]},{"group":"System","icon":"activity","pages":[{"title":"Check API health","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/health","href":"/api-reference/system/check-api-health"},{"title":"Get the authenticated principal","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/me","href":"/api-reference/system/get-the-authenticated-principal"},{"title":"Get evaluated feature flags","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/feature-flags","href":"/api-reference/system/get-evaluated-feature-flags"}]}]}]},{"tab":"SDKs","pages":[{"title":"SDKs","href":"/sdks/overview"}]},{"tab":"CLI","pages":[{"title":"CLI","href":"/cli/overview"}]}]},"basePath":"","title":"Start an upload - Nohead","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}