Inicia una subida directa: los bytes van desde tu cliente directamente al almacenamiento, no a través de la API. Los archivos de hasta el límite de una sola parte de tu plan se devuelven en modo single, con una url. Los archivos más grandes se devuelven en modo multipart, con un tamaño de parte y un número de partes. Después envía los bytes y llama a Completar una subida directa. El almacenamiento reservado cuenta para la cuota hasta que la subida se complete, se cancele o caduque.Ámbito:blob:write. Acepta un token de subida.Token de subida: esta ruta también acepta un token de subida (Authorization: Bearer vcup_...) en lugar de una clave de API.
Cuando path está ocupada, guarda el archivo como nombre-1.ext, nombre-2.ext y así sucesivamente (el primer nombre libre) en lugar de devolver BLOB_OBJECT_ALREADY_EXISTS. La subida lleva el path final. Por defecto, false. No se puede combinar con overwrite y no tiene efecto con un token de subida que fija el path.
SHA-256 en hexadecimal de todo el archivo. Se comprueba al completar la subida. Solo es válido para una subida directa enviada en una sola parte; una subida multiparte lo rechaza con VALIDATION_ERROR.
El ID del workspace, cuando el blob pertenece a un workspace. La llamada actúa sobre el blob del propietario del workspace y necesita el permiso de workspace blob:read (blob:manage en las rutas que modifican datos). Omítelo para actuar sobre tu propio blob.
El código de error que indica el motivo del fallo. Valores posibles:
AUTH_TOKEN_MISSING (401): No se envió la cabecera Authorization.
API_KEY_INVALID (401): La clave de API no existe, fue revocada o su secreto no coincide.
API_KEY_SCOPE_DENIED (403): La clave no tiene el ámbito que necesita esta ruta (blob:read o blob:write); details.required lo indica.
WORKSPACE_PERMISSION_DENIED (403): Solo con workspace_id: no eres miembro o tu rol no tiene el permiso de blob.
WORKSPACE_NOT_FOUND (404): Solo con workspace_id: no existe ningún workspace con ese ID o no eres miembro.
BLOB_UPLOAD_TOKEN_INVALID (401): El token de subida no existe, ha caducado o fue revocado (solo con un token de subida).
BLOB_NAMESPACE_SUSPENDED (403): El almacenamiento blob de la cuenta está suspendido o su plan ha caducado. Las subidas y demás escrituras se rechazan desde el inicio del periodo de gracia de 72 horas.
VALIDATION_ERROR (400): Un parámetro o campo del cuerpo no superó la validación. details.path indica el campo.
BLOB_UPLOAD_TOKEN_CONSTRAINT (403): Solo con un token de subida: la ruta, la carpeta u otra opción que fija el token no coincide con la petición.
PLAN_RESTRICTED_FEATURE (403): No está incluido en el plan metadata (por debajo de Enterprise-12) ni cache_control: no-cache (por debajo de Enterprise-26).
BLOB_UPLOAD_LIMIT (409): La cuenta ya tiene tantas subidas en curso como permite su plan (max_open_uploads).
BLOB_OBJECT_ALREADY_EXISTS (409): path está ocupada y overwrite no es true.
BLOB_FILE_TOO_LARGE (413): size supera los 10 GB, el max_size de la regla de la carpeta o el max_size del token.
STORAGE_QUOTA_EXCEEDED (403): El tamaño reservado más lo ya usado superaría la cuota de blob del plan.
BLOCKED_FILE_TYPE (422): La extensión está bloqueada o no está permitida por la regla de la carpeta o por el token.
BLOB_UPLOAD_TOKEN_EXHAUSTED (401): Solo con un token de subida: ha agotado todos sus usos.
RATE_LIMIT_EXCEEDED (429): Por debajo de Enterprise-12, las subidas están limitadas a 1 por segundo. details.retry_after indica la espera.
{ "code": "AUTH_TOKEN_MISSING"}
{ "code": "API_KEY_SCOPE_DENIED"}
{ "code": "WORKSPACE_NOT_FOUND"}
{ "code": "VALIDATION_ERROR"}
{ "code": "BLOB_UPLOAD_LIMIT"}
{ "code": "BLOB_FILE_TOO_LARGE"}
{ "code": "BLOCKED_FILE_TYPE"}
{ "code": "RATE_LIMIT_EXCEEDED"}
Última modificación el 28 de octubre de 2026
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Vertra Cloud","description":"Vertra Cloud is a Brazilian application hosting platform (PaaS): deploy from GitHub or a zip file, isolated containers, managed databases, file storage, snapshots, a CLI and a VS Code extension.","colors":{"primary":"#ff6100","light":"#ff7a24","dark":"#e65700"},"logo":{"light":"https://mintcdn.com/vertracloud/2O7-bfMOIoy6MCUx/logo/light.svg?fit=max\u0026auto=format\u0026n=2O7-bfMOIoy6MCUx\u0026q=85\u0026s=2fcb392041b562c0aab2f07ebef0f12e","dark":"https://mintcdn.com/vertracloud/2O7-bfMOIoy6MCUx/logo/light.svg?fit=max\u0026auto=format\u0026n=2O7-bfMOIoy6MCUx\u0026q=85\u0026s=2fcb392041b562c0aab2f07ebef0f12e"},"favicon":"https://mintcdn.com/vertracloud/2O7-bfMOIoy6MCUx/favicon.svg?fit=max\u0026auto=format\u0026n=2O7-bfMOIoy6MCUx\u0026q=85\u0026s=1bab95e4f8e35419e5901e69c7caa4b2","api":{"playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["curl","javascript","python","go"]},"mdx":{"auth":{"method":"bearer"},"server":"https://api.vertracloud.app"}},"background":{"color":{"light":"#f7f7f6","dark":"#121212"}},"navbar":{"links":[{"href":"mailto:[email protected]","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://vertracloud.app/dashboard"}},"footer":{"socials":{"github":"https://github.com/vertracloud","instagram":"https://instagram.com/vertracloud","x":"https://x.com/vertracloud","youtube":"https://www.youtube.com/@vertracloud","discord":"https://discord.gg/vertracloud"}},"seo":{"metatags":{"og:site_name":"Vertra Cloud Docs","og:type":"website","og:image":"https://docs.vertracloud.app/images/og.png","twitter:card":"summary_large_image","twitter:image":"https://docs.vertracloud.app/images/og.png","description":"Vertra Cloud is a Brazilian application hosting platform (PaaS): deploy from GitHub or a zip file, isolated containers, managed databases, file storage, snapshots, a CLI and a VS Code extension."},"indexing":"navigable"},"fonts":{"family":"Geist"},"contextual":{"options":["copy","view","chatgpt","claude","mcp","cursor","vscode"],"display":"header"},"metadata":{"timestamp":true},"styling":{"latex":false},"navigation":{"languages":[{"language":"en","default":true,"href":""},{"language":"pt-BR","navbar":{"links":[{"href":"mailto:[email protected]","label":"Suporte"}],"primary":{"type":"button","label":"Dashboard","href":"https://vertracloud.app/dashboard"}},"href":"pt-br"},{"language":"es","navbar":{"links":[{"href":"mailto:[email protected]","label":"Soporte"}],"primary":{"type":"button","label":"Panel","href":"https://vertracloud.app/dashboard"}},"href":"es-es"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"vertracloud","hasAudioNarration":false,"actualSubdomain":"vertracloud","customDomains":["docs.vertracloud.app"],"gitSource":{"type":"github","owner":"vertracloud","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae51deb3bf34bcad38c5814","collectionId":"9f590012-0485-47b3-af80-9ffed670518c","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae51deb3bf34bcad38c5814"},"entitlements":{},"buildId":"6ae51f8fceb92005b37aba26","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"en","tag":"API Reference","count":159},{"language":"es","tag":"Referencia de la API","count":159},{"language":"pt-BR","tag":"Referência da API","count":159},{"language":"en","tag":"Endpoints","count":156},{"language":"es","tag":"Endpoints","count":156},{"language":"pt-BR","tag":"Endpoints","count":156},{"language":"en","tag":"Templates","count":64},{"language":"es","tag":"Plantillas","count":64},{"language":"pt-BR","tag":"Templates","count":64},{"language":"es","tag":"Blob Storage","count":58},{"language":"pt-BR","tag":"Blob Storage","count":58},{"language":"en","tag":"Blob Storage","count":56},{"language":"en","tag":"Applications","count":46},{"language":"en","tag":"Changelog","count":46},{"language":"es","tag":"Aplicaciones","count":46},{"language":"es","tag":"Changelog","count":46},{"language":"pt-BR","tag":"Aplicações","count":46},{"language":"pt-BR","tag":"Changelog","count":46},{"language":"en","tag":"v26","count":35},{"language":"es","tag":"v26","count":35},{"language":"pt-BR","tag":"v26","count":35},{"language":"en","tag":"Blob API reference","count":30},{"language":"es","tag":"Referencia de la API de Blob","count":30},{"language":"pt-BR","tag":"Referência da API do Blob","count":30},{"language":"en","tag":"Workspaces","count":26},{"language":"en","tag":"Tutorials","count":26},{"language":"es","tag":"Workspaces","count":26},{"language":"es","tag":"Tutoriales","count":26},{"language":"pt-BR","tag":"Workspaces","count":26},{"language":"pt-BR","tag":"Tutoriais","count":26}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":":root{--gray-50:247 247 246;--gray-100:241 241 240;--gray-200:230 230 228;--gray-300:211 211 209;--gray-400:162 162 162;--gray-500:115 115 115;--gray-600:83 83 83;--gray-700:61 61 61;--gray-800:42 42 42;--gray-900:26 26 26;--gray-950:13 13 13}.vc-home{--vc-orange:#ff6100;--vc-orange-strong:#e65700;--vc-paper:#f7f7f6;--vc-surface:#ffffff;--vc-ink:#141414;--vc-ink-2:#3d3d3d;--vc-muted:#737373;--vc-line:#e6e6e4;color:var(--vc-ink)}.dark .vc-home{--vc-orange-strong:#ff7a24;--vc-paper:#121212;--vc-surface:#1a1a1a;--vc-ink:#f4f4f4;--vc-ink-2:#c6c6c6;--vc-muted:#8e8e8e;--vc-line:#2a2a2a}.vc-hero,.vc-hero-inner{display:flex;flex-direction:column;box-sizing:border-box;margin:0}.vc-hero{min-height:calc(100dvh - 120px);overflow:hidden;border-bottom:1px solid var(--vc-line);background-color:var(--vc-paper)}.vc-hero-inner{flex:0 0 auto;justify-content:center;max-width:40rem;padding:2.75rem 1.25rem 1.75rem;text-align:left}.vc-hero h1{margin:0;color:var(--vc-ink);font-size:clamp(2.15rem,.85rem + 1.9vw,3.15rem);font-weight:600;line-height:1.02;letter-spacing:-.045em;text-wrap:balance}.vc-hero-copy{max-width:36rem;margin:1.15rem 0 0;color:var(--vc-ink-2);font-size:1.05rem;line-height:1.55;text-wrap:pretty}.vc-actions{display:flex;flex-wrap:wrap;justify-content:flex-start;gap:.75rem;margin-top:1.75rem}.vc-btn{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-height:44px;padding:0 1.15rem;border-radius:.5rem;font-size:.92rem;font-weight:500;line-height:1;text-decoration:none!important;border:1px solid transparent;transition:background-color .18s cubic-bezier(.22,1,.36,1),border-color .18s cubic-bezier(.22,1,.36,1)}.vc-btn:focus-visible{outline:2px solid var(--vc-orange);outline-offset:2px}.vc-btn-primary{background:var(--vc-orange);color:#fff!important}.vc-btn-primary:hover{background:var(--vc-orange-strong)}.vc-btn-ghost{background:0 0;border-color:var(--vc-line);color:var(--vc-ink)!important}.vc-btn-ghost:hover{border-color:var(--vc-ink)}.vc-hero-art{flex:1 1 auto;min-height:240px;border-top:1px solid var(--vc-line);background:#f4efe4 url(/images/hero-pillar.webp) 70% 68%/cover no-repeat}@media (min-width:1024px){.vc-hero{flex-direction:row;align-items:stretch;min-height:calc(100dvh - 112px)}.vc-hero-inner{flex:.78 1 0;max-width:none;padding:4rem clamp(1.75rem,4vw,4.5rem)}.vc-hero-art{flex:1.22 1 0;min-height:0;border-top:0;border-left:1px solid var(--vc-line);background-position:72% 50%}}.vc-section{max-width:1040px;margin:0 auto;padding:4.5rem 1.5rem 0}.vc-section:last-of-type{padding-bottom:4.5rem}.vc-heading{max-width:620px;margin-bottom:1.75rem}.vc-kicker{color:var(--vc-orange);font:600 .72rem ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.12em;text-transform:uppercase}.vc-heading h2{margin:.5rem 0 .6rem;color:var(--vc-ink);font-size:clamp(1.55rem,3vw,2.05rem);font-weight:700;letter-spacing:-.03em;text-wrap:balance}.vc-heading p{margin:0;color:var(--vc-muted);line-height:1.65}.vc-home .card{border-radius:.85rem;transition:border-color .18s ease,transform .18s ease}.vc-home a.card:hover{border-color:rgba(255,97,0,.6)!important;transform:translateY(-2px)}.vc-chips{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.6rem}.vc-chip{display:flex;align-items:center;gap:.6rem;padding:.7rem .85rem;border:1px solid var(--vc-line);border-radius:.7rem;background:var(--vc-chip);color:var(--vc-ink)!important;font-size:.9rem;font-weight:500;text-decoration:none!important;transition:border-color .15s ease,transform .15s ease}.vc-chip:hover{border-color:rgba(255,97,0,.6);transform:translateY(-1px)}.vc-chip svg{flex-shrink:0}.vc-help{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.75rem}.vc-footer{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.75rem;max-width:1040px;margin:4.5rem auto 0;padding:1.5rem 1.5rem 3rem;border-top:1px solid var(--vc-line);color:var(--vc-muted);font:.72rem ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.04em}.vc-footer a{color:var(--vc-ink)!important;text-decoration:none!important}.vc-footer a:hover{color:var(--vc-orange)!important}@media (max-width:760px){.vc-section{padding:3.25rem 1rem 0}}[data-component-part=language-switcher] [data-language=en] a::before{content:'🇺🇸 '}[data-component-part=language-switcher] [data-language=pt-BR] a::before{content:'🇧🇷 '}[data-component-part=language-switcher] [data-language=es] a::before{content:'🇪🇸 '}"}],"page":{"pagePath":"es-es/api-reference/endpoint/blob/uploads/create","slug":"/es-es/api-reference/endpoint/blob/uploads/create","pageMetadata":{"title":"Iniciar una subida directa de Blob","sidebarTitle":"Iniciar subida directa","api":"POST https://blob.vertracloud.app/v1/uploads","authMethod":"bearer","description":"Inicia una subida de hasta 10 GB que va directamente al almacenamiento. Devuelve las URL a las que enviar los bytes. Acepta un token de subida.","href":"/es-es/api-reference/endpoint/blob/uploads/create"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Inicia una subida de hasta 10 GB que va directamente al almacenamiento. Devuelve las URL a las que enviar los bytes. Acepta un token de subida.\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Expandable,Heading,ParamField,ResponseField}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Inicia una subida directa: los bytes van desde tu cliente directamente al almacenamiento, no a través de la API. Los archivos de hasta el límite de una sola parte de tu plan se devuelven en modo `,_jsx(_components.code,{children:`single`}),`, con una `,_jsx(_components.code,{children:`url`}),`. Los archivos más grandes se devuelven en modo `,_jsx(_components.code,{children:`multipart`}),`, con un tamaño de parte y un número de partes. Después envía los bytes y llama a `,_jsx(_components.a,{href:`/es-es/api-reference/endpoint/blob/uploads/complete`,children:`Completar una subida directa`}),`. El almacenamiento reservado cuenta para la cuota hasta que la subida se complete, se cancele o caduque.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Ámbito:`}),` `,_jsx(_components.code,{children:`blob:write`}),`. Acepta un token de subida.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Token de subida:`}),` esta ruta también acepta un token de subida (`,_jsx(_components.code,{children:`Authorization: Bearer vcup_...`}),`) en lugar de una clave de API.`]}),`\n`,_jsx(ParamField,{body:`path`,type:`string`,required:true,id:`param-path`,children:_jsxs(_components.p,{children:[`Ruta de destino, con las mismas reglas que `,_jsx(_components.a,{href:`/es-es/api-reference/endpoint/blob/objects/upload`,children:`Subir en una sola petición`}),`.`]})}),`\n`,_jsx(ParamField,{body:`size`,type:`number`,required:true,id:`param-size`,children:_jsx(_components.p,{children:`Tamaño exacto del archivo en bytes, de 0 a 10 GB. Los bytes almacenados deben coincidir con él.`})}),`\n`,_jsx(ParamField,{body:`visibility`,type:`string`,id:`param-visibility`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`public`}),` o `,_jsx(_components.code,{children:`private`}),`. Por defecto, `,_jsx(_components.code,{children:`private`}),`.`]})}),`\n`,_jsx(ParamField,{body:`overwrite`,type:`boolean`,id:`param-overwrite`,children:_jsxs(_components.p,{children:[`Reemplaza un objeto que ya existe en `,_jsx(_components.code,{children:`path`}),`. Por defecto, `,_jsx(_components.code,{children:`false`}),`.`]})}),`\n`,_jsx(ParamField,{body:`rename_on_conflict`,type:`boolean`,id:`param-rename-on-conflict`,children:_jsxs(_components.p,{children:[`Cuando `,_jsx(_components.code,{children:`path`}),` está ocupada, guarda el archivo como `,_jsx(_components.code,{children:`nombre-1.ext`}),`, `,_jsx(_components.code,{children:`nombre-2.ext`}),` y así sucesivamente (el primer nombre libre) en lugar de devolver `,_jsx(_components.code,{children:`BLOB_OBJECT_ALREADY_EXISTS`}),`. La subida lleva el `,_jsx(_components.code,{children:`path`}),` final. Por defecto, `,_jsx(_components.code,{children:`false`}),`. No se puede combinar con `,_jsx(_components.code,{children:`overwrite`}),` y no tiene efecto con un token de subida que fija el `,_jsx(_components.code,{children:`path`}),`.`]})}),`\n`,_jsx(ParamField,{body:`random_suffix`,type:`boolean`,id:`param-random-suffix`,children:_jsxs(_components.p,{children:[`Inserta un sufijo aleatorio antes de la extensión. Por defecto, `,_jsx(_components.code,{children:`false`}),`; se fuerza a `,_jsx(_components.code,{children:`true`}),` con un token de subida sin `,_jsx(_components.code,{children:`path`}),` fijo.`]})}),`\n`,_jsx(ParamField,{body:`cache_control`,type:`string`,id:`param-cache-control`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`immutable`}),`, `,_jsx(_components.code,{children:`max-age=\u003cseconds>`}),` o `,_jsx(_components.code,{children:`no-cache`}),` (Enterprise-26 o superior).`]})}),`\n`,_jsx(ParamField,{body:`content_disposition`,type:`string`,id:`param-content-disposition`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`inline`}),` o `,_jsx(_components.code,{children:`attachment`}),`. HTML, SVG, XML, XHTML y HTM siempre son `,_jsx(_components.code,{children:`attachment`}),`.`]})}),`\n`,_jsx(ParamField,{body:`filename`,type:`string`,id:`param-filename`,children:_jsx(_components.p,{children:`Nombre sugerido al descargar.`})}),`\n`,_jsx(ParamField,{body:`expires_at`,type:`string`,id:`param-expires-at`,children:_jsx(_components.p,{children:`Marca de tiempo ISO 8601 para la eliminación, como mínimo el mínimo del plan a partir de ahora.`})}),`\n`,_jsx(ParamField,{body:`checksum_sha256`,type:`string`,id:`param-checksum-sha256`,children:_jsxs(_components.p,{children:[`SHA-256 en hexadecimal de todo el archivo. Se comprueba al completar la subida. Solo es válido para una subida directa enviada en una sola parte; una subida multiparte lo rechaza con `,_jsx(_components.code,{children:`VALIDATION_ERROR`}),`.`]})}),`\n`,_jsx(ParamField,{body:`metadata`,type:`object`,id:`param-metadata`,children:_jsxs(_components.p,{children:[`Hasta 5 claves, cada una `,_jsx(_components.code,{children:`[a-z0-9-]{1,64}`}),`, 512 bytes en total. Enterprise-12 o superior.`]})}),`\n`,_jsx(ParamField,{query:`workspace_id`,type:`string`,id:`param-workspace-id`,children:_jsxs(_components.p,{children:[`El ID del workspace, cuando el blob pertenece a un workspace. La llamada actúa sobre el blob del propietario del workspace y necesita el permiso de workspace `,_jsx(_components.code,{children:`blob:read`}),` (`,_jsx(_components.code,{children:`blob:manage`}),` en las rutas que modifican datos). Omítelo para actuar sobre tu propio blob.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`ejemplo-de-petición`,children:`Ejemplo de petición`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://blob.vertracloud.app/v1/uploads\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$VERTRA_API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{\"path\":\"videos/demo.mp4\",\"size\":2147483648,\"visibility\":\"private\"}'`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`respuesta`,children:`Respuesta`}),`\n`,_jsxs(ResponseField,{name:`response`,type:`object`,id:`param-response`,children:[_jsx(_components.p,{children:`La subida, con las URL a las que enviar los bytes.`}),_jsxs(Expandable,{title:`propiedades`,children:[_jsx(ResponseField,{name:`id`,type:`string`,id:`param-id`,children:`ID de la subida. Úsalo para consultar el estado, las partes, completar o cancelar.`}),_jsx(ResponseField,{name:`path`,type:`string`,id:`param-path-1`,children:`Ruta final, incluido el sufijo aleatorio si se pidió.`}),_jsxs(ResponseField,{name:`mode`,type:`string`,id:`param-mode`,children:[_jsx(_components.code,{children:`single`}),` (un `,_jsx(_components.code,{children:`PUT`}),` de todo el archivo a `,_jsx(_components.code,{children:`url`}),`) o `,_jsx(_components.code,{children:`multipart`}),` (varias partes, cada una con su propia URL).`]}),_jsxs(ResponseField,{name:`status`,type:`string`,id:`param-status`,children:[_jsx(_components.code,{children:`pending`}),`, `,_jsx(_components.code,{children:`completed`}),`, `,_jsx(_components.code,{children:`aborted`}),` o `,_jsx(_components.code,{children:`expired`}),`.`]}),_jsx(ResponseField,{name:`size`,type:`number`,id:`param-size-1`,children:`Tamaño declarado en bytes. Los bytes almacenados deben coincidir con él al completar.`}),_jsx(ResponseField,{name:`expires_at`,type:`string`,id:`param-expires-at-1`,children:`Momento en que caducan las URL y el almacenamiento reservado, como marca de tiempo ISO 8601.`}),_jsxs(ResponseField,{name:`url`,type:`string`,id:`param-url`,children:[`Solo en modo `,_jsx(_components.code,{children:`single`}),`: la URL a la que hacer `,_jsx(_components.code,{children:`PUT`}),` de todo el archivo.`]}),_jsxs(ResponseField,{name:`headers`,type:`object`,id:`param-headers`,children:[`Cabeceras que el `,_jsx(_components.code,{children:`PUT`}),` debe enviar exactamente como se indican, porque forman parte de la firma.`]}),_jsxs(ResponseField,{name:`part_size`,type:`number`,id:`param-part-size`,children:[`Solo en modo `,_jsx(_components.code,{children:`multipart`}),`: el tamaño fijo de cada parte en bytes. La última parte puede ser más pequeña.`]}),_jsxs(ResponseField,{name:`part_count`,type:`number`,id:`param-part-count`,children:[`Solo en modo `,_jsx(_components.code,{children:`multipart`}),`: cuántas partes tiene el archivo.`]}),_jsx(ResponseField,{name:`uploaded_parts`,type:`number[]`,id:`param-uploaded-parts`,children:`Números de parte ya almacenados. Úsalos para reanudar una subida interrumpida.`}),_jsx(ResponseField,{name:`created_at`,type:`string`,id:`param-created-at`,children:`Fecha de creación en ISO 8601.`})]})]}),`\n`,`\n`,_jsx(Heading,{level:`3`,id:`respuestas-de-error`,children:`Respuestas de error`}),`\n`,_jsxs(ResponseField,{name:`code`,type:`string`,id:`param-code`,children:[_jsx(_components.p,{children:`El código de error que indica el motivo del fallo. Valores posibles:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`AUTH_TOKEN_MISSING`}),` (`,_jsx(_components.code,{children:`401`}),`): No se envió la cabecera `,_jsx(_components.code,{children:`Authorization`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`API_KEY_INVALID`}),` (`,_jsx(_components.code,{children:`401`}),`): La clave de API no existe, fue revocada o su secreto no coincide.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`API_KEY_SCOPE_DENIED`}),` (`,_jsx(_components.code,{children:`403`}),`): La clave no tiene el ámbito que necesita esta ruta (`,_jsx(_components.code,{children:`blob:read`}),` o `,_jsx(_components.code,{children:`blob:write`}),`); `,_jsx(_components.code,{children:`details.required`}),` lo indica.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`WORKSPACE_PERMISSION_DENIED`}),` (`,_jsx(_components.code,{children:`403`}),`): Solo con `,_jsx(_components.code,{children:`workspace_id`}),`: no eres miembro o tu rol no tiene el permiso de blob.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`WORKSPACE_NOT_FOUND`}),` (`,_jsx(_components.code,{children:`404`}),`): Solo con `,_jsx(_components.code,{children:`workspace_id`}),`: no existe ningún workspace con ese ID o no eres miembro.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_UPLOAD_TOKEN_INVALID`}),` (`,_jsx(_components.code,{children:`401`}),`): El token de subida no existe, ha caducado o fue revocado (solo con un token de subida).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_NAMESPACE_SUSPENDED`}),` (`,_jsx(_components.code,{children:`403`}),`): El almacenamiento blob de la cuenta está suspendido o su plan ha caducado. Las subidas y demás escrituras se rechazan desde el inicio del periodo de gracia de 72 horas.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`VALIDATION_ERROR`}),` (`,_jsx(_components.code,{children:`400`}),`): Un parámetro o campo del cuerpo no superó la validación. `,_jsx(_components.code,{children:`details.path`}),` indica el campo.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_UPLOAD_TOKEN_CONSTRAINT`}),` (`,_jsx(_components.code,{children:`403`}),`): Solo con un token de subida: la ruta, la carpeta u otra opción que fija el token no coincide con la petición.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`PLAN_RESTRICTED_FEATURE`}),` (`,_jsx(_components.code,{children:`403`}),`): No está incluido en el plan `,_jsx(_components.code,{children:`metadata`}),` (por debajo de Enterprise-12) ni `,_jsx(_components.code,{children:`cache_control: no-cache`}),` (por debajo de Enterprise-26).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_UPLOAD_LIMIT`}),` (`,_jsx(_components.code,{children:`409`}),`): La cuenta ya tiene tantas subidas en curso como permite su plan (`,_jsx(_components.code,{children:`max_open_uploads`}),`).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_OBJECT_ALREADY_EXISTS`}),` (`,_jsx(_components.code,{children:`409`}),`): `,_jsx(_components.code,{children:`path`}),` está ocupada y `,_jsx(_components.code,{children:`overwrite`}),` no es `,_jsx(_components.code,{children:`true`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_FILE_TOO_LARGE`}),` (`,_jsx(_components.code,{children:`413`}),`): `,_jsx(_components.code,{children:`size`}),` supera los 10 GB, el `,_jsx(_components.code,{children:`max_size`}),` de la regla de la carpeta o el `,_jsx(_components.code,{children:`max_size`}),` del token.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`STORAGE_QUOTA_EXCEEDED`}),` (`,_jsx(_components.code,{children:`403`}),`): El tamaño reservado más lo ya usado superaría la cuota de blob del plan.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOCKED_FILE_TYPE`}),` (`,_jsx(_components.code,{children:`422`}),`): La extensión está bloqueada o no está permitida por la regla de la carpeta o por el token.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_UPLOAD_TOKEN_EXHAUSTED`}),` (`,_jsx(_components.code,{children:`401`}),`): Solo con un token de subida: ha agotado todos sus usos.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`RATE_LIMIT_EXCEEDED`}),` (`,_jsx(_components.code,{children:`429`}),`): Por debajo de Enterprise-12, las subidas están limitadas a 1 por segundo. `,_jsx(_components.code,{children:`details.retry_after`}),` indica la espera.`]}),`\n`]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Iniciar una subida directa de Blob","sidebarTitle":"Iniciar subida directa","api":"POST https://blob.vertracloud.app/v1/uploads","authMethod":"bearer","description":"Inicia una subida de hasta 10 GB que va directamente al almacenamiento. Devuelve las URL a las que enviar los bytes. Acepta un token de subida.","href":"/es-es/api-reference/endpoint/blob/uploads/create"}}},"mdxSourceWithNoJs":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Expandable,Heading,ParamField,ResponseExample,ResponseField}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!ResponseExample)_missingMdxReference(`ResponseExample`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Inicia una subida directa: los bytes van desde tu cliente directamente al almacenamiento, no a través de la API. Los archivos de hasta el límite de una sola parte de tu plan se devuelven en modo `,_jsx(_components.code,{children:`single`}),`, con una `,_jsx(_components.code,{children:`url`}),`. Los archivos más grandes se devuelven en modo `,_jsx(_components.code,{children:`multipart`}),`, con un tamaño de parte y un número de partes. Después envía los bytes y llama a `,_jsx(_components.a,{href:`/es-es/api-reference/endpoint/blob/uploads/complete`,children:`Completar una subida directa`}),`. El almacenamiento reservado cuenta para la cuota hasta que la subida se complete, se cancele o caduque.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Ámbito:`}),` `,_jsx(_components.code,{children:`blob:write`}),`. Acepta un token de subida.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Token de subida:`}),` esta ruta también acepta un token de subida (`,_jsx(_components.code,{children:`Authorization: Bearer vcup_...`}),`) en lugar de una clave de API.`]}),`\n`,_jsx(ParamField,{body:`path`,type:`string`,required:true,id:`param-path`,children:_jsxs(_components.p,{children:[`Ruta de destino, con las mismas reglas que `,_jsx(_components.a,{href:`/es-es/api-reference/endpoint/blob/objects/upload`,children:`Subir en una sola petición`}),`.`]})}),`\n`,_jsx(ParamField,{body:`size`,type:`number`,required:true,id:`param-size`,children:_jsx(_components.p,{children:`Tamaño exacto del archivo en bytes, de 0 a 10 GB. Los bytes almacenados deben coincidir con él.`})}),`\n`,_jsx(ParamField,{body:`visibility`,type:`string`,id:`param-visibility`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`public`}),` o `,_jsx(_components.code,{children:`private`}),`. Por defecto, `,_jsx(_components.code,{children:`private`}),`.`]})}),`\n`,_jsx(ParamField,{body:`overwrite`,type:`boolean`,id:`param-overwrite`,children:_jsxs(_components.p,{children:[`Reemplaza un objeto que ya existe en `,_jsx(_components.code,{children:`path`}),`. Por defecto, `,_jsx(_components.code,{children:`false`}),`.`]})}),`\n`,_jsx(ParamField,{body:`rename_on_conflict`,type:`boolean`,id:`param-rename-on-conflict`,children:_jsxs(_components.p,{children:[`Cuando `,_jsx(_components.code,{children:`path`}),` está ocupada, guarda el archivo como `,_jsx(_components.code,{children:`nombre-1.ext`}),`, `,_jsx(_components.code,{children:`nombre-2.ext`}),` y así sucesivamente (el primer nombre libre) en lugar de devolver `,_jsx(_components.code,{children:`BLOB_OBJECT_ALREADY_EXISTS`}),`. La subida lleva el `,_jsx(_components.code,{children:`path`}),` final. Por defecto, `,_jsx(_components.code,{children:`false`}),`. No se puede combinar con `,_jsx(_components.code,{children:`overwrite`}),` y no tiene efecto con un token de subida que fija el `,_jsx(_components.code,{children:`path`}),`.`]})}),`\n`,_jsx(ParamField,{body:`random_suffix`,type:`boolean`,id:`param-random-suffix`,children:_jsxs(_components.p,{children:[`Inserta un sufijo aleatorio antes de la extensión. Por defecto, `,_jsx(_components.code,{children:`false`}),`; se fuerza a `,_jsx(_components.code,{children:`true`}),` con un token de subida sin `,_jsx(_components.code,{children:`path`}),` fijo.`]})}),`\n`,_jsx(ParamField,{body:`cache_control`,type:`string`,id:`param-cache-control`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`immutable`}),`, `,_jsx(_components.code,{children:`max-age=\u003cseconds>`}),` o `,_jsx(_components.code,{children:`no-cache`}),` (Enterprise-26 o superior).`]})}),`\n`,_jsx(ParamField,{body:`content_disposition`,type:`string`,id:`param-content-disposition`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`inline`}),` o `,_jsx(_components.code,{children:`attachment`}),`. HTML, SVG, XML, XHTML y HTM siempre son `,_jsx(_components.code,{children:`attachment`}),`.`]})}),`\n`,_jsx(ParamField,{body:`filename`,type:`string`,id:`param-filename`,children:_jsx(_components.p,{children:`Nombre sugerido al descargar.`})}),`\n`,_jsx(ParamField,{body:`expires_at`,type:`string`,id:`param-expires-at`,children:_jsx(_components.p,{children:`Marca de tiempo ISO 8601 para la eliminación, como mínimo el mínimo del plan a partir de ahora.`})}),`\n`,_jsx(ParamField,{body:`checksum_sha256`,type:`string`,id:`param-checksum-sha256`,children:_jsxs(_components.p,{children:[`SHA-256 en hexadecimal de todo el archivo. Se comprueba al completar la subida. Solo es válido para una subida directa enviada en una sola parte; una subida multiparte lo rechaza con `,_jsx(_components.code,{children:`VALIDATION_ERROR`}),`.`]})}),`\n`,_jsx(ParamField,{body:`metadata`,type:`object`,id:`param-metadata`,children:_jsxs(_components.p,{children:[`Hasta 5 claves, cada una `,_jsx(_components.code,{children:`[a-z0-9-]{1,64}`}),`, 512 bytes en total. Enterprise-12 o superior.`]})}),`\n`,_jsx(ParamField,{query:`workspace_id`,type:`string`,id:`param-workspace-id`,children:_jsxs(_components.p,{children:[`El ID del workspace, cuando el blob pertenece a un workspace. La llamada actúa sobre el blob del propietario del workspace y necesita el permiso de workspace `,_jsx(_components.code,{children:`blob:read`}),` (`,_jsx(_components.code,{children:`blob:manage`}),` en las rutas que modifican datos). Omítelo para actuar sobre tu propio blob.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`ejemplo-de-petición`,children:`Ejemplo de petición`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://blob.vertracloud.app/v1/uploads\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$VERTRA_API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{\"path\":\"videos/demo.mp4\",\"size\":2147483648,\"visibility\":\"private\"}'`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`respuesta`,children:`Respuesta`}),`\n`,_jsxs(ResponseField,{name:`response`,type:`object`,id:`param-response`,children:[_jsx(_components.p,{children:`La subida, con las URL a las que enviar los bytes.`}),_jsxs(Expandable,{title:`propiedades`,children:[_jsx(ResponseField,{name:`id`,type:`string`,id:`param-id`,children:`ID de la subida. Úsalo para consultar el estado, las partes, completar o cancelar.`}),_jsx(ResponseField,{name:`path`,type:`string`,id:`param-path-1`,children:`Ruta final, incluido el sufijo aleatorio si se pidió.`}),_jsxs(ResponseField,{name:`mode`,type:`string`,id:`param-mode`,children:[_jsx(_components.code,{children:`single`}),` (un `,_jsx(_components.code,{children:`PUT`}),` de todo el archivo a `,_jsx(_components.code,{children:`url`}),`) o `,_jsx(_components.code,{children:`multipart`}),` (varias partes, cada una con su propia URL).`]}),_jsxs(ResponseField,{name:`status`,type:`string`,id:`param-status`,children:[_jsx(_components.code,{children:`pending`}),`, `,_jsx(_components.code,{children:`completed`}),`, `,_jsx(_components.code,{children:`aborted`}),` o `,_jsx(_components.code,{children:`expired`}),`.`]}),_jsx(ResponseField,{name:`size`,type:`number`,id:`param-size-1`,children:`Tamaño declarado en bytes. Los bytes almacenados deben coincidir con él al completar.`}),_jsx(ResponseField,{name:`expires_at`,type:`string`,id:`param-expires-at-1`,children:`Momento en que caducan las URL y el almacenamiento reservado, como marca de tiempo ISO 8601.`}),_jsxs(ResponseField,{name:`url`,type:`string`,id:`param-url`,children:[`Solo en modo `,_jsx(_components.code,{children:`single`}),`: la URL a la que hacer `,_jsx(_components.code,{children:`PUT`}),` de todo el archivo.`]}),_jsxs(ResponseField,{name:`headers`,type:`object`,id:`param-headers`,children:[`Cabeceras que el `,_jsx(_components.code,{children:`PUT`}),` debe enviar exactamente como se indican, porque forman parte de la firma.`]}),_jsxs(ResponseField,{name:`part_size`,type:`number`,id:`param-part-size`,children:[`Solo en modo `,_jsx(_components.code,{children:`multipart`}),`: el tamaño fijo de cada parte en bytes. La última parte puede ser más pequeña.`]}),_jsxs(ResponseField,{name:`part_count`,type:`number`,id:`param-part-count`,children:[`Solo en modo `,_jsx(_components.code,{children:`multipart`}),`: cuántas partes tiene el archivo.`]}),_jsx(ResponseField,{name:`uploaded_parts`,type:`number[]`,id:`param-uploaded-parts`,children:`Números de parte ya almacenados. Úsalos para reanudar una subida interrumpida.`}),_jsx(ResponseField,{name:`created_at`,type:`string`,id:`param-created-at`,children:`Fecha de creación en ISO 8601.`})]})]}),`\n`,_jsx(ResponseExample,{children:_jsx(CodeBlock,{filename:`Response`,numberOfLines:`17`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`17`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"response\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"7c1d2e3f-4a5b-4c6d-8e7f-0a1b2c3d4e5f\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"path\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"videos/demo.mp4\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"mode\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"multipart\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"pending\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"size\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2147483648`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"expires_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-14T13:00:00.000Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"headers\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"content-type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"video/mp4\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"part_size\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`67108864`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"part_count\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`32`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"uploaded_parts\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"created_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-14T12:00:00.000Z\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),`\n`,_jsx(Heading,{level:`3`,id:`respuestas-de-error`,children:`Respuestas de error`}),`\n`,_jsxs(ResponseField,{name:`code`,type:`string`,id:`param-code`,children:[_jsx(_components.p,{children:`El código de error que indica el motivo del fallo. Valores posibles:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`AUTH_TOKEN_MISSING`}),` (`,_jsx(_components.code,{children:`401`}),`): No se envió la cabecera `,_jsx(_components.code,{children:`Authorization`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`API_KEY_INVALID`}),` (`,_jsx(_components.code,{children:`401`}),`): La clave de API no existe, fue revocada o su secreto no coincide.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`API_KEY_SCOPE_DENIED`}),` (`,_jsx(_components.code,{children:`403`}),`): La clave no tiene el ámbito que necesita esta ruta (`,_jsx(_components.code,{children:`blob:read`}),` o `,_jsx(_components.code,{children:`blob:write`}),`); `,_jsx(_components.code,{children:`details.required`}),` lo indica.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`WORKSPACE_PERMISSION_DENIED`}),` (`,_jsx(_components.code,{children:`403`}),`): Solo con `,_jsx(_components.code,{children:`workspace_id`}),`: no eres miembro o tu rol no tiene el permiso de blob.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`WORKSPACE_NOT_FOUND`}),` (`,_jsx(_components.code,{children:`404`}),`): Solo con `,_jsx(_components.code,{children:`workspace_id`}),`: no existe ningún workspace con ese ID o no eres miembro.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_UPLOAD_TOKEN_INVALID`}),` (`,_jsx(_components.code,{children:`401`}),`): El token de subida no existe, ha caducado o fue revocado (solo con un token de subida).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_NAMESPACE_SUSPENDED`}),` (`,_jsx(_components.code,{children:`403`}),`): El almacenamiento blob de la cuenta está suspendido o su plan ha caducado. Las subidas y demás escrituras se rechazan desde el inicio del periodo de gracia de 72 horas.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`VALIDATION_ERROR`}),` (`,_jsx(_components.code,{children:`400`}),`): Un parámetro o campo del cuerpo no superó la validación. `,_jsx(_components.code,{children:`details.path`}),` indica el campo.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_UPLOAD_TOKEN_CONSTRAINT`}),` (`,_jsx(_components.code,{children:`403`}),`): Solo con un token de subida: la ruta, la carpeta u otra opción que fija el token no coincide con la petición.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`PLAN_RESTRICTED_FEATURE`}),` (`,_jsx(_components.code,{children:`403`}),`): No está incluido en el plan `,_jsx(_components.code,{children:`metadata`}),` (por debajo de Enterprise-12) ni `,_jsx(_components.code,{children:`cache_control: no-cache`}),` (por debajo de Enterprise-26).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_UPLOAD_LIMIT`}),` (`,_jsx(_components.code,{children:`409`}),`): La cuenta ya tiene tantas subidas en curso como permite su plan (`,_jsx(_components.code,{children:`max_open_uploads`}),`).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_OBJECT_ALREADY_EXISTS`}),` (`,_jsx(_components.code,{children:`409`}),`): `,_jsx(_components.code,{children:`path`}),` está ocupada y `,_jsx(_components.code,{children:`overwrite`}),` no es `,_jsx(_components.code,{children:`true`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_FILE_TOO_LARGE`}),` (`,_jsx(_components.code,{children:`413`}),`): `,_jsx(_components.code,{children:`size`}),` supera los 10 GB, el `,_jsx(_components.code,{children:`max_size`}),` de la regla de la carpeta o el `,_jsx(_components.code,{children:`max_size`}),` del token.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`STORAGE_QUOTA_EXCEEDED`}),` (`,_jsx(_components.code,{children:`403`}),`): El tamaño reservado más lo ya usado superaría la cuota de blob del plan.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOCKED_FILE_TYPE`}),` (`,_jsx(_components.code,{children:`422`}),`): La extensión está bloqueada o no está permitida por la regla de la carpeta o por el token.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_UPLOAD_TOKEN_EXHAUSTED`}),` (`,_jsx(_components.code,{children:`401`}),`): Solo con un token de subida: ha agotado todos sus usos.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`RATE_LIMIT_EXCEEDED`}),` (`,_jsx(_components.code,{children:`429`}),`): Por debajo de Enterprise-12, las subidas están limitadas a 1 por segundo. `,_jsx(_components.code,{children:`details.retry_after`}),` indica la espera.`]}),`\n`]})]}),`\n`,_jsxs(ResponseExample,{children:[_jsx(CodeBlock,{filename:`Error Response (401)`,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"AUTH_TOKEN_MISSING\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Error Response (403)`,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"API_KEY_SCOPE_DENIED\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Error Response (404)`,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"WORKSPACE_NOT_FOUND\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Error Response (400)`,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"VALIDATION_ERROR\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Error Response (409)`,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"BLOB_UPLOAD_LIMIT\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Error Response (413)`,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"BLOB_FILE_TOO_LARGE\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Error Response (422)`,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"BLOCKED_FILE_TYPE\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Error Response (429)`,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"RATE_LIMIT_EXCEEDED\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Iniciar una subida directa de Blob","sidebarTitle":"Iniciar subida directa","api":"POST https://blob.vertracloud.app/v1/uploads","authMethod":"bearer","description":"Inicia una subida de hasta 10 GB que va directamente al almacenamiento. Devuelve las URL a las que enviar los bytes. Acepta un token de subida.","href":"/es-es/api-reference/endpoint/blob/uploads/create"}}}},"mdxExtracts":{"tableOfContents":[{"title":"Ejemplo de petición","slug":"ejemplo-de-petición","depth":3,"children":[]},{"title":"Respuesta","slug":"respuesta","depth":3,"children":[]},{"title":"Respuestas de error","slug":"respuestas-de-error","depth":3,"children":[]}],"codeExamples":{"response":{"type":"ResponseExample","children":[{"filename":"Response","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"17\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"response\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"7c1d2e3f-4a5b-4c6d-8e7f-0a1b2c3d4e5f\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"path\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"videos/demo.mp4\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"mode\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"multipart\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"status\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"pending\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"size\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">2147483648\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"expires_at\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-10-14T13:00:00.000Z\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"headers\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"content-type\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"video/mp4\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> },\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"part_size\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">67108864\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"part_count\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">32\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"uploaded_parts\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [],\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"created_at\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-10-14T12:00:00.000Z\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]}},"endpoint":{"title":"Iniciar una subida directa de Blob","path":"/v1/uploads","servers":[{"url":"https://blob.vertracloud.app"}],"method":"post","request":{"security":[{"title":"Bearer Auth","parameters":{"header":{"Authorization":{"type":"http","scheme":"bearer","description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token."}},"query":{},"cookie":{}}}],"parameters":{"query":{"workspace_id":{"schema":[{"type":"string","description":"El ID del workspace, cuando el blob pertenece a un workspace. La llamada actúa sobre el blob del propietario del workspace y necesita el permiso de workspace `blob:read` ( `blob:manage` en las rutas que modifican datos). Omítelo para actuar sobre tu propio blob."}]}},"header":{},"cookie":{},"path":{}},"body":{"application/json":{"schemaArray":[{"type":"object","properties":{"path":[{"type":"string","description":"Ruta de destino, con las mismas reglas que Subir en una sola petición .","required":true}],"size":[{"type":"number","description":"Tamaño exacto del archivo en bytes, de 0 a 10 GB. Los bytes almacenados deben coincidir con él.","required":true}],"visibility":[{"type":"string","description":"`public` o `private` . Por defecto, `private` ."}],"overwrite":[{"type":"boolean","description":"Reemplaza un objeto que ya existe en `path` . Por defecto, `false` ."}],"rename_on_conflict":[{"type":"boolean","description":"Cuando `path` está ocupada, guarda el archivo como `nombre-1.ext` , `nombre-2.ext` y así sucesivamente (el primer nombre libre) en lugar de devolver `BLOB_OBJECT_ALREADY_EXISTS` . La subida lleva el `path` final. Por defecto, `false` . No se puede combinar con `overwrite` y no tiene efecto con un token de subida que fija el `path` ."}],"random_suffix":[{"type":"boolean","description":"Inserta un sufijo aleatorio antes de la extensión. Por defecto, `false` ; se fuerza a `true` con un token de subida sin `path` fijo."}],"cache_control":[{"type":"string","description":"`immutable` , `max-age=\u003cseconds>` o `no-cache` (Enterprise-26 o superior)."}],"content_disposition":[{"type":"string","description":"`inline` o `attachment` . HTML, SVG, XML, XHTML y HTM siempre son `attachment` ."}],"filename":[{"type":"string","description":"Nombre sugerido al descargar."}],"expires_at":[{"type":"string","description":"Marca de tiempo ISO 8601 para la eliminación, como mínimo el mínimo del plan a partir de ahora."}],"checksum_sha256":[{"type":"string","description":"SHA-256 en hexadecimal de todo el archivo. Se comprueba al completar la subida. Solo es válido para una subida directa enviada en una sola parte; una subida multiparte lo rechaza con `VALIDATION_ERROR` ."}],"metadata":[{"type":"object","properties":{},"description":"Hasta 5 claves, cada una `[a-z0-9-]{1,64}` , 512 bytes en total. Enterprise-12 o superior."}]}}],"examples":{"example":{"value":{"path":"\u003cstring>","size":123,"visibility":"\u003cstring>","overwrite":true,"rename_on_conflict":true,"random_suffix":true,"cache_control":"\u003cstring>","content_disposition":"\u003cstring>","filename":"\u003cstring>","expires_at":"\u003cstring>","checksum_sha256":"\u003cstring>","metadata":{}}}}}}},"response":{"200":{"application/json":{"schemaArray":[{"type":"object","properties":{"response":[{"type":"object","properties":{"id":[{"type":"string","description":"ID de la subida. Úsalo para consultar el estado, las partes, completar o cancelar."}],"path":[{"type":"string","description":"Ruta final, incluido el sufijo aleatorio si se pidió."}],"mode":[{"type":"string","description":"`single` (un `PUT` de todo el archivo a `url` ) o `multipart` (varias partes, cada una con su propia URL)."}],"status":[{"type":"string","description":"`pending` , `completed` , `aborted` o `expired` ."}],"size":[{"type":"number","description":"Tamaño declarado en bytes. Los bytes almacenados deben coincidir con él al completar."}],"expires_at":[{"type":"string","description":"Momento en que caducan las URL y el almacenamiento reservado, como marca de tiempo ISO 8601."}],"url":[{"type":"string","description":"Solo en modo `single` : la URL a la que hacer `PUT` de todo el archivo."}],"headers":[{"type":"object","properties":{},"description":"Cabeceras que el `PUT` debe enviar exactamente como se indican, porque forman parte de la firma."}],"part_size":[{"type":"number","description":"Solo en modo `multipart` : el tamaño fijo de cada parte en bytes. La última parte puede ser más pequeña."}],"part_count":[{"type":"number","description":"Solo en modo `multipart` : cuántas partes tiene el archivo."}],"uploaded_parts":[{"type":"array","items":[{"type":"number"}],"description":"Números de parte ya almacenados. Úsalos para reanudar una subida interrumpida."}],"created_at":[{"type":"string","description":"Fecha de creación en ISO 8601."}]},"description":"La subida, con las URL a las que enviar los bytes."}],"code":[{"type":"string","description":"El código de error que indica el motivo del fallo. Valores posibles: `AUTH_TOKEN_MISSING` ( `401` ): No se envió la cabecera `Authorization` . `API_KEY_INVALID` ( `401` ): La clave de API no existe, fue revocada o su secreto no coincide. `API_KEY_SCOPE_DENIED` ( `403` ): La clave no tiene el ámbito que necesita esta ruta ( `blob:read` o `blob:write` ); `details.required` lo indica. `WORKSPACE_PERMISSION_DENIED` ( `403` ): Solo con `workspace_id` : no eres miembro o tu rol no tiene el permiso de blob. `WORKSPACE_NOT_FOUND` ( `404` ): Solo con `workspace_id` : no existe ningún workspace con ese ID o no eres miembro. `BLOB_UPLOAD_TOKEN_INVALID` ( `401` ): El token de subida no existe, ha caducado o fue revocado (solo con un token de subida). `BLOB_NAMESPACE_SUSPENDED` ( `403` ): El almacenamiento blob de la cuenta está suspendido o su plan ha caducado. Las subidas y demás escrituras se rechazan desde el inicio del periodo de gracia de 72 horas. `VALIDATION_ERROR` ( `400` ): Un parámetro o campo del cuerpo no superó la validación. `details.path` indica el campo. `BLOB_UPLOAD_TOKEN_CONSTRAINT` ( `403` ): Solo con un token de subida: la ruta, la carpeta u otra opción que fija el token no coincide con la petición. `PLAN_RESTRICTED_FEATURE` ( `403` ): No está incluido en el plan `metadata` (por debajo de Enterprise-12) ni `cache_control: no-cache` (por debajo de Enterprise-26). `BLOB_UPLOAD_LIMIT` ( `409` ): La cuenta ya tiene tantas subidas en curso como permite su plan ( `max_open_uploads` ). `BLOB_OBJECT_ALREADY_EXISTS` ( `409` ): `path` está ocupada y `overwrite` no es `true` . `BLOB_FILE_TOO_LARGE` ( `413` ): `size` supera los 10 GB, el `max_size` de la regla de la carpeta o el `max_size` del token. `STORAGE_QUOTA_EXCEEDED` ( `403` ): El tamaño reservado más lo ya usado superaría la cuota de blob del plan. `BLOCKED_FILE_TYPE` ( `422` ): La extensión está bloqueada o no está permitida por la regla de la carpeta o por el token. `BLOB_UPLOAD_TOKEN_EXHAUSTED` ( `401` ): Solo con un token de subida: ha agotado todos sus usos. `RATE_LIMIT_EXCEEDED` ( `429` ): Por debajo de Enterprise-12, las subidas están limitadas a 1 por segundo. `details.retry_after` indica la espera."}]}}],"examples":{"example":{"value":{"response":{"id":"\u003cstring>","path":"\u003cstring>","mode":"\u003cstring>","status":"\u003cstring>","size":123,"expires_at":"\u003cstring>","url":"\u003cstring>","headers":{},"part_size":123,"part_count":123,"uploaded_parts":[123],"created_at":"\u003cstring>"},"code":"\u003cstring>"}}}}}},"deprecated":false}},"jsLinks":[],"subdomain":"vertracloud","siteName":"Vertra Cloud","title":"Iniciar una subida directa de Blob - Vertra Cloud","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/","matchLevel":4},"pt-BR":{"href":"/pt-br","matchLevel":4},"es":{"href":"/es-es/api-reference/endpoint/blob/uploads/create","matchLevel":0}}},"lastModified":"2026-10-30T22:45:18.555Z","gitLastModified":"2026-10-28T22:06:31.000Z","originalFileLocation":"es-es/api-reference/endpoint/blob/uploads/create.mdx","locale":"es"},"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=\"Inicia una subida de hasta 10 GB que va directamente al almacenamiento. Devuelve las URL a las que enviar los bytes. Acepta un token de subida.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Vertra Cloud\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/vertracloud/pOhcCJNRkRisP0nY/_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/vertracloud/pOhcCJNRkRisP0nY/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/vertracloud/pOhcCJNRkRisP0nY/_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/vertracloud/pOhcCJNRkRisP0nY/_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/vertracloud/pOhcCJNRkRisP0nY/_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/vertracloud/pOhcCJNRkRisP0nY/_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/vertracloud/pOhcCJNRkRisP0nY/_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/vertracloud/pOhcCJNRkRisP0nY/_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/vertracloud/pOhcCJNRkRisP0nY/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Iniciar una subida directa de Blob - Vertra Cloud\">\u003cmeta data-mint-head property=\"og:description\" content=\"Inicia una subida de hasta 10 GB que va directamente al almacenamiento. Devuelve las URL a las que enviar los bytes. Acepta un token de subida.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Vertra Cloud Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/uploads/create\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://docs.vertracloud.app/images/og.png\">\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=\"Iniciar una subida directa de Blob - Vertra Cloud\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Inicia una subida de hasta 10 GB que va directamente al almacenamiento. Devuelve las URL a las que enviar los bytes. Acepta un token de subida.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://docs.vertracloud.app/images/og.png\">\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/vertracloud/pOhcCJNRkRisP0nY/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Vertra Cloud\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#ff6100\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/uploads/create\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/es-es/api-reference/endpoint/blob/uploads/create.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.vertracloud.app/#organization\",\"name\":\"Vertra Cloud\",\"url\":\"https://docs.vertracloud.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/vertracloud/2O7-bfMOIoy6MCUx/logo/light.svg?fit=max\u0026auto=format\u0026n=2O7-bfMOIoy6MCUx\u0026q=85\u0026s=2fcb392041b562c0aab2f07ebef0f12e\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.vertracloud.app#website\",\"name\":\"Vertra Cloud\",\"url\":\"https://docs.vertracloud.app\",\"publisher\":{\"@id\":\"https://docs.vertracloud.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/uploads/create#webpage\",\"url\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/uploads/create\",\"name\":\"Iniciar una subida directa de Blob\",\"description\":\"Inicia una subida de hasta 10 GB que va directamente al almacenamiento. Devuelve las URL a las que enviar los bytes. Acepta un token de subida.\",\"dateModified\":\"2026-10-28T22:06:31.000Z\",\"isPartOf\":{\"@id\":\"https://docs.vertracloud.app#website\"},\"breadcrumb\":{\"@id\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/uploads/create#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/uploads/create#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Referencia de la API de Blob\",\"item\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/objects/upload\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Iniciar una subida directa de Blob\",\"item\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/uploads/create\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/uploads/create#apireference\",\"headline\":\"Iniciar una subida directa de Blob\",\"name\":\"Iniciar una subida directa de Blob\",\"description\":\"Inicia una subida de hasta 10 GB que va directamente al almacenamiento. Devuelve las URL a las que enviar los bytes. Acepta un token de subida.\",\"url\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/uploads/create\",\"mainEntityOfPage\":{\"@id\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/uploads/create#webpage\"},\"image\":\"https://docs.vertracloud.app/images/og.png\",\"dateModified\":\"2026-10-28T22:06:31.000Z\",\"publisher\":{\"@id\":\"https://docs.vertracloud.app/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.vertracloud.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Vertra Cloud\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Vertra Cloud","nav":{"global":null,"languages":[{"language":"en","default":true,"pages":[{"title":"en","href":"/"}]},{"language":"pt-BR","navbar":{"links":[{"href":"mailto:[email protected]","label":"Suporte"}],"primary":{"type":"button","label":"Dashboard","href":"https://vertracloud.app/dashboard"}},"pages":[{"title":"pt-BR","href":"/pt-br"}]},{"language":"es","navbar":{"links":[{"href":"mailto:[email protected]","label":"Soporte"}],"primary":{"type":"button","label":"Panel","href":"https://vertracloud.app/dashboard"}},"tabs":[{"tab":"Primeros pasos","pages":[{"title":"Primeros pasos","href":"/es-es"}]},{"tab":"Recursos","pages":[{"title":"Recursos","href":"/es-es/applications"}]},{"tab":"Tutoriales","pages":[{"title":"Tutoriales","href":"/es-es/tutorials/introduction"}]},{"tab":"Guías","pages":[{"title":"Guías","href":"/es-es/guides/custom-domain"}]},{"tab":"Herramientas","pages":[{"title":"Herramientas","href":"/es-es/cli"}]},{"tab":"Blob Storage","groups":[{"group":"Blob Storage","icon":"folder-open","pages":[{"title":"Blob Storage de Vertra: almacenamiento de archivos con CDN global","sidebarTitle":"Descripción general","icon":"folder-open","href":"/es-es/blob/overview"},{"title":"Inicio rápido de Blob Storage: sube y sirve tu primer archivo","sidebarTitle":"Inicio rápido","icon":"rocket","href":"/es-es/blob/quickstart"},{"title":"Autenticación de Blob Storage: claves de API, tokens de subida y workspaces","sidebarTitle":"Autenticación","icon":"key","href":"/es-es/blob/authentication"},{"title":"Subir archivos a Blob Storage: simple, directa y por partes","sidebarTitle":"Subidas","icon":"upload","href":"/es-es/blob/uploads"},{"title":"Enlaces de Blob Storage: URL pública, enlaces temporales y visibilidad","sidebarTitle":"Enlaces y visibilidad","icon":"link","href":"/es-es/blob/links-and-visibility"},{"title":"Compartir archivos de Blob Storage con caducidad, contraseña y límite de descargas","sidebarTitle":"Compartir","icon":"share-nodes","href":"/es-es/blob/sharing"},{"title":"Reglas de carpeta de Blob Storage: valores por defecto y límites por carpeta","sidebarTitle":"Reglas por carpeta","icon":"folder-tree","href":"/es-es/blob/folder-rules"},{"title":"Redimensionar y convertir imágenes al vuelo con Blob Storage","sidebarTitle":"Transformaciones de imagen","icon":"image","href":"/es-es/blob/image-transformations"},{"title":"Usar Blob Storage con aws-cli, rclone y boto3 (compatible con S3)","sidebarTitle":"Compatibilidad con S3","icon":"plug","href":"/es-es/blob/s3-compatibility"},{"title":"Servir archivos de Blob Storage desde tu propio dominio","sidebarTitle":"Dominios personalizados","icon":"globe","href":"/es-es/blob/custom-domains"},{"title":"Límites, cuotas y funciones por plan de Blob Storage","sidebarTitle":"Límites y cuotas","icon":"gauge","href":"/es-es/blob/limits-and-quotas"},{"title":"SDK de JavaScript de Blob Storage (@vertracloud/blob)","sidebarTitle":"SDK de JavaScript","icon":"js","href":"/es-es/blob/sdk-javascript"},{"title":"Blob Storage en los SDK de Python y Go","sidebarTitle":"SDK de Python y Go","icon":"code","href":"/es-es/blob/sdk-python-go"},{"title":"Referencia de la API de Blob Storage","sidebarTitle":"Referencia de la API","icon":"code","href":"/es-es/blob/api-reference"}]},{"group":"Referencia de la API de Blob","icon":"plug","pages":[{"group":"Objetos","pages":[{"title":"Subir un objeto blob en una sola petición","sidebarTitle":"Subir objeto","api":"POST https://blob.vertracloud.app/v1/objects","href":"/es-es/api-reference/endpoint/blob/objects/upload"},{"title":"Listar objetos blob de una carpeta","sidebarTitle":"Listar objetos","api":"GET https://blob.vertracloud.app/v1/objects","href":"/es-es/api-reference/endpoint/blob/objects/list"},{"title":"Obtener un objeto blob por ID","sidebarTitle":"Obtener objeto","api":"GET https://blob.vertracloud.app/v1/objects/{object_id}","href":"/es-es/api-reference/endpoint/blob/objects/get"},{"title":"Actualizar los ajustes de un objeto blob","sidebarTitle":"Actualizar objeto","api":"PATCH https://blob.vertracloud.app/v1/objects/{object_id}","href":"/es-es/api-reference/endpoint/blob/objects/update"},{"title":"Actualizar varios objetos blob a la vez","sidebarTitle":"Actualizar varios objetos","api":"PATCH https://blob.vertracloud.app/v1/objects","href":"/es-es/api-reference/endpoint/blob/objects/update-many"},{"title":"Copiar o mover un objeto blob","sidebarTitle":"Copiar o mover objeto","api":"POST https://blob.vertracloud.app/v1/objects/copy","href":"/es-es/api-reference/endpoint/blob/objects/copy"},{"title":"Eliminar un objeto blob por ID","sidebarTitle":"Eliminar objeto","api":"DELETE https://blob.vertracloud.app/v1/objects/{object_id}","href":"/es-es/api-reference/endpoint/blob/objects/delete"},{"title":"Eliminar varios objetos blob o una carpeta","sidebarTitle":"Eliminar varios objetos","api":"DELETE https://blob.vertracloud.app/v1/objects","href":"/es-es/api-reference/endpoint/blob/objects/delete-many"},{"title":"Obtener un enlace temporal de descarga para un objeto blob","sidebarTitle":"Descargar objeto","api":"GET https://blob.vertracloud.app/v1/objects/{object_id}/download","description":"Devuelve un enlace temporal para descargar un objeto blob. Redirige por defecto; el enlace no se puede revocar.","href":"/es-es/api-reference/endpoint/blob/objects/download"}]},{"group":"Subidas","pages":[{"title":"Iniciar una subida directa de Blob","sidebarTitle":"Iniciar subida directa","api":"POST https://blob.vertracloud.app/v1/uploads","href":"/es-es/api-reference/endpoint/blob/uploads/create"},{"title":"Listar subidas de Blob en curso","sidebarTitle":"Listar subidas","api":"GET https://blob.vertracloud.app/v1/uploads","description":"Lista las subidas directas de la cuenta que siguen en curso, para poder reanudarlas o cancelarlas.","href":"/es-es/api-reference/endpoint/blob/uploads/list"},{"title":"Obtener el estado de una subida de Blob para reanudarla","sidebarTitle":"Obtener estado de subida","api":"GET https://blob.vertracloud.app/v1/uploads/{upload_id}","href":"/es-es/api-reference/endpoint/blob/uploads/get"},{"title":"Obtener las URL de las partes de una subida multiparte","sidebarTitle":"Obtener URL de partes","api":"POST https://blob.vertracloud.app/v1/uploads/{upload_id}/parts","href":"/es-es/api-reference/endpoint/blob/uploads/parts"},{"title":"Completar una subida directa de Blob","sidebarTitle":"Completar subida","api":"POST https://blob.vertracloud.app/v1/uploads/{upload_id}/complete","href":"/es-es/api-reference/endpoint/blob/uploads/complete"},{"title":"Cancelar una subida directa de Blob","sidebarTitle":"Cancelar subida","api":"DELETE https://blob.vertracloud.app/v1/uploads/{upload_id}","href":"/es-es/api-reference/endpoint/blob/uploads/abort"}]},{"group":"Enlaces para compartir","pages":[{"title":"Crear un enlace para compartir un objeto Blob","sidebarTitle":"Crear enlace","api":"POST https://blob.vertracloud.app/v1/shares","href":"/es-es/api-reference/endpoint/blob/shares/create"},{"title":"Listar enlaces para compartir","sidebarTitle":"Listar enlaces","api":"GET https://blob.vertracloud.app/v1/shares","href":"/es-es/api-reference/endpoint/blob/shares/list"},{"title":"Revocar un enlace para compartir","sidebarTitle":"Revocar enlace","api":"DELETE https://blob.vertracloud.app/v1/shares/{share_id}","href":"/es-es/api-reference/endpoint/blob/shares/revoke"}]},{"group":"Reglas de carpeta","pages":[{"title":"Obtener las reglas de carpeta y su ETag","sidebarTitle":"Obtener reglas","api":"GET https://blob.vertracloud.app/v1/rules","href":"/es-es/api-reference/endpoint/blob/rules/get"},{"title":"Reemplazar todas las reglas de carpeta","sidebarTitle":"Reemplazar reglas","api":"PUT https://blob.vertracloud.app/v1/rules","href":"/es-es/api-reference/endpoint/blob/rules/replace"},{"title":"Crear o actualizar una regla de carpeta","sidebarTitle":"Crear o actualizar regla","api":"PUT https://blob.vertracloud.app/v1/rules/{prefix}","href":"/es-es/api-reference/endpoint/blob/rules/put"},{"title":"Eliminar una regla de carpeta","sidebarTitle":"Eliminar regla","api":"DELETE https://blob.vertracloud.app/v1/rules/{prefix}","href":"/es-es/api-reference/endpoint/blob/rules/delete"}]},{"group":"Cuenta","pages":[{"title":"Obtener el uso de Blob Storage y los límites del plan","sidebarTitle":"Uso y límites","api":"GET https://blob.vertracloud.app/v1/stats","href":"/es-es/api-reference/endpoint/blob/account/stats"},{"title":"Crear un token de subida para subidas desde el navegador","sidebarTitle":"Crear token de subida","api":"POST https://blob.vertracloud.app/v1/upload-tokens","href":"/es-es/api-reference/endpoint/blob/account/upload-tokens"},{"title":"Obtener credenciales compatibles con S3 para Blob Storage","sidebarTitle":"Credenciales S3","api":"GET https://blob.vertracloud.app/v1/s3/credentials","href":"/es-es/api-reference/endpoint/blob/account/s3-credentials"}]},{"group":"Dominios personalizados","pages":[{"title":"Listar dominios personalizados de Blob Storage","sidebarTitle":"Listar dominios","api":"GET https://blob.vertracloud.app/v1/domains","href":"/es-es/api-reference/endpoint/blob/domains/list"},{"title":"Añadir un dominio personalizado para Blob Storage","sidebarTitle":"Añadir dominio","api":"POST https://blob.vertracloud.app/v1/domains","href":"/es-es/api-reference/endpoint/blob/domains/add"},{"title":"Actualizar un dominio personalizado de Blob","sidebarTitle":"Actualizar dominio","api":"PATCH https://blob.vertracloud.app/v1/domains/{domain_id}","href":"/es-es/api-reference/endpoint/blob/domains/update"},{"title":"Verificar un dominio personalizado de Blob","sidebarTitle":"Verificar dominio","api":"POST https://blob.vertracloud.app/v1/domains/{domain_id}/verify","href":"/es-es/api-reference/endpoint/blob/domains/verify"},{"title":"Eliminar un dominio personalizado de Blob","sidebarTitle":"Eliminar dominio","api":"DELETE https://blob.vertracloud.app/v1/domains/{domain_id}","href":"/es-es/api-reference/endpoint/blob/domains/delete"}]}]}]},{"tab":"Plantillas","pages":[{"title":"Plantillas","href":"/es-es/templates/overview"}]},{"tab":"Referencia de la API","pages":[{"title":"Referencia de la API","href":"/es-es/api-reference/introduction"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/es-es/changelog"}]}],"global":{"anchors":[{"anchor":"Documentación","icon":"book-open-cover","href":"https://docs.vertracloud.app/es-es"},{"anchor":"Discord","icon":"discord","href":"https://discord.gg/vertracloud"},{"anchor":"Estado","icon":"heart-pulse","href":"https://status.vertracloud.app"}]}}]},"basePath":"","title":"Iniciar una subida directa de Blob - Vertra Cloud","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":["c2aa737661","2b790eda92","b0f84f53ff"],"chunks":["OpenApiReferenceProvider-B7XKH4J3.js","utils-lOYzL7z-.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DF6jUUIM.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dpsj5f7C.js","snippetPresets-CYeiDe8v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CUFz1YZ_.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D8H_iLS4.js","shallow-DdluZBHX.js","getApiPlaygroundDisplay-B9922vev.js","CodeSnippet-CMoRNGYs.js","CodeSnippets-DwyrPHuw.js","Page-DSVu9Ucl.js","getPastedJson-G-zIvlHh.js","icon-B03fnEy0.js","MethodPill-CW7teklc.js","DuplicateIcon-CtO8eekd.js","createIcon-DZTKdM_A.js","DynamicMarkdown-D5M2At0B.js","SectionHeading-C_2NaA2U.js","axios-vUo_bRtp.js"]}