Sube un archivo de hasta 100 MB en una sola petición multipart/form-data y lo guarda en path. Para archivos más grandes,
usa Iniciar una subida directa. Responde con 201 y el objeto nuevo.Á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.
Ruta de destino en la cuenta. De 1 a 1024 caracteres, hasta 16 segmentos de [A-Za-z0-9._ -] (de 1 a 255 caracteres
cada uno), sin / al principio ni al final, sin // ni .., y con una extensión obligatoria. Las rutas rechazadas
devuelven VALIDATION_ERROR; nunca se cambian en silencio.
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 respuesta incluye 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.
Inserta - seguido de 10 caracteres aleatorios en base 36 antes de la extensión. Por defecto false. Se fuerza a
true para un token de subida sin path fijo.
Marca de tiempo ISO 8601 de cuándo se elimina el objeto. Debe ser como mínimo el plazo mínimo del plan desde ahora (7 días,
o 1 hora en Enterprise-26 o superior).
El ID del workspace, cuando el blob pertenece a un workspace. La petición actúa sobre el blob del propietario del
workspace y necesita el permiso blob:read del workspace (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 un workspace con ese ID, o no eres miembro.
BLOB_UPLOAD_TOKEN_INVALID (401): El token de subida no existe, caducó o fue revocado (solo con un token de subida).
BLOB_CHECKSUM_MISMATCH (400): El checksum_sha256 no coincide con el archivo. No se guardó nada.
VALIDATION_ERROR (400): Un parámetro de la consulta no superó la validación, por ejemplo un path no válido. details.path lo indica.
BLOB_OBJECT_ALREADY_EXISTS (409): path está ocupada y overwrite no es true.
BLOB_FILE_TOO_LARGE (413): El archivo supera los 100 MB, el límite del plan para esta ruta, o el max_size de la regla o del token.
STORAGE_QUOTA_EXCEEDED (403): Guardar el archivo superaría la cuota de blob del plan.
BLOCKED_FILE_TYPE (422): La extensión está bloqueada, no la permite la regla de carpeta o el token, o el archivo es un ejecutable.
BLOB_NAMESPACE_SUSPENDED (403): El almacenamiento de blob de la cuenta está suspendido, o su plan expiró. Las subidas y otras escrituras se rechazan desde el inicio del periodo de gracia de 72 horas.
PLAN_RESTRICTED_FEATURE (403): metadata (por debajo de Enterprise-12) o cache_control: no-cache (por debajo de Enterprise-26) no está incluido en el plan.
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.
BLOB_UPLOAD_TOKEN_EXHAUSTED (401): Solo con un token de subida: ya usó todas sus subidas.
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": "BLOB_CHECKSUM_MISMATCH"}
{ "code": "BLOB_OBJECT_ALREADY_EXISTS"}
{ "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/objects/upload","slug":"/es-es/api-reference/endpoint/blob/objects/upload","pageMetadata":{"title":"Subir un objeto blob en una sola petición","sidebarTitle":"Subir objeto","api":"POST https://blob.vertracloud.app/v1/objects","authMethod":"bearer","description":"Sube un archivo de hasta 100 MB en una sola petición multipart y lo guarda en una ruta. Acepta un token de subida.","href":"/es-es/api-reference/endpoint/blob/objects/upload"},"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: \"Sube un archivo de hasta 100 MB en una sola petición multipart y lo guarda en una ruta. 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:[`Sube un archivo de hasta 100 MB en una sola petición `,_jsx(_components.code,{children:`multipart/form-data`}),` y lo guarda en `,_jsx(_components.code,{children:`path`}),`. Para archivos más grandes,\nusa `,_jsx(_components.a,{href:`/es-es/api-reference/endpoint/blob/uploads/create`,children:`Iniciar una subida directa`}),`. Responde con `,_jsx(_components.code,{children:`201`}),` y el objeto nuevo.`]}),`\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,{query:`path`,type:`string`,required:true,id:`param-path`,children:_jsxs(_components.p,{children:[`Ruta de destino en la cuenta. De 1 a 1024 caracteres, hasta 16 segmentos de `,_jsx(_components.code,{children:`[A-Za-z0-9._ -]`}),` (de 1 a 255 caracteres\ncada uno), sin `,_jsx(_components.code,{children:`/`}),` al principio ni al final, sin `,_jsx(_components.code,{children:`//`}),` ni `,_jsx(_components.code,{children:`..`}),`, y con una extensión obligatoria. Las rutas rechazadas\ndevuelven `,_jsx(_components.code,{children:`VALIDATION_ERROR`}),`; nunca se cambian en silencio.`]})}),`\n`,_jsx(ParamField,{query:`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,{query:`overwrite`,type:`boolean`,id:`param-overwrite`,children:_jsxs(_components.p,{children:[`Reemplaza un objeto que ya esté en `,_jsx(_components.code,{children:`path`}),`. Por defecto `,_jsx(_components.code,{children:`false`}),`: una ruta ocupada devuelve `,_jsx(_components.code,{children:`BLOB_OBJECT_ALREADY_EXISTS`}),`.`]})}),`\n`,_jsx(ParamField,{query:`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\nlibre) en lugar de devolver `,_jsx(_components.code,{children:`BLOB_OBJECT_ALREADY_EXISTS`}),`. La respuesta incluye el `,_jsx(_components.code,{children:`path`}),` final. Por defecto `,_jsx(_components.code,{children:`false`}),`. No\nse 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,{query:`random_suffix`,type:`boolean`,id:`param-random-suffix`,children:_jsxs(_components.p,{children:[`Inserta `,_jsx(_components.code,{children:`-`}),` seguido de 10 caracteres aleatorios en base 36 antes de la extensión. Por defecto `,_jsx(_components.code,{children:`false`}),`. Se fuerza a\n`,_jsx(_components.code,{children:`true`}),` para un token de subida sin `,_jsx(_components.code,{children:`path`}),` fijo.`]})}),`\n`,_jsx(ParamField,{query:`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). Por defecto: sin valor definido.`]})}),`\n`,_jsx(ParamField,{query:`content_disposition`,type:`string`,id:`param-content-disposition`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`inline`}),` o `,_jsx(_components.code,{children:`attachment`}),`. Por defecto: `,_jsx(_components.code,{children:`inline`}),`. Los archivos que terminan en `,_jsx(_components.code,{children:`.html`}),`, `,_jsx(_components.code,{children:`.htm`}),`, `,_jsx(_components.code,{children:`.svg`}),`, `,_jsx(_components.code,{children:`.xml`}),` o `,_jsx(_components.code,{children:`.xhtml`}),`\nse sirven siempre como `,_jsx(_components.code,{children:`attachment`}),`.`]})}),`\n`,_jsx(ParamField,{query:`filename`,type:`string`,id:`param-filename`,children:_jsxs(_components.p,{children:[`Nombre sugerido al descargar el archivo. Por defecto: el último segmento de `,_jsx(_components.code,{children:`path`}),`.`]})}),`\n`,_jsx(ParamField,{query:`expires_at`,type:`string`,id:`param-expires-at`,children:_jsx(_components.p,{children:`Marca de tiempo ISO 8601 de cuándo se elimina el objeto. Debe ser como mínimo el plazo mínimo del plan desde ahora (7 días,\no 1 hora en Enterprise-26 o superior).`})}),`\n`,_jsx(ParamField,{query:`metadata`,type:`string`,id:`param-metadata`,children:_jsxs(_components.p,{children:[`Objeto JSON, codificado en URL: 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:`checksum_sha256`,type:`string`,id:`param-checksum-sha256`,children:_jsxs(_components.p,{children:[`SHA-256 del archivo en hexadecimal. Si no coincide, devuelve `,_jsx(_components.code,{children:`BLOB_CHECKSUM_MISMATCH`}),` y no se guarda nada.`]})}),`\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 petición actúa sobre el blob del propietario del\nworkspace y necesita el permiso `,_jsx(_components.code,{children:`blob:read`}),` del workspace (`,_jsx(_components.code,{children:`blob:manage`}),` en las rutas que modifican datos). Omítelo\npara actuar sobre tu propio blob.`]})}),`\n`,_jsx(ParamField,{body:`file`,type:`file`,required:true,id:`param-file`,children:_jsxs(_components.p,{children:[`El archivo, como única parte de `,_jsx(_components.code,{children:`multipart/form-data`}),`. Hasta 100 MB; se aplica el límite del plan.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`ejemplo-de-petición`,children:`Ejemplo de petición`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,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:`3`,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/objects?path=images/logo.png\u0026visibility=public\"`}),_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:` -F`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"file=@./logo.png\"`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`respuesta`,children:`Respuesta`}),`\n`,_jsxs(ResponseField,{name:`response`,type:`object`,id:`param-response`,children:[_jsxs(_components.p,{children:[`El objeto guardado. Responde con `,_jsx(_components.code,{children:`201`}),`.`]}),_jsxs(Expandable,{title:`propiedades`,children:[_jsx(ResponseField,{name:`id`,type:`string`,id:`param-id`,children:`ID estable del objeto. Nunca cambia, aunque cambien la ruta, la visibilidad o la caducidad.`}),_jsxs(ResponseField,{name:`path`,type:`string`,id:`param-path-1`,children:[`Ruta completa dentro de la cuenta, por ejemplo `,_jsx(_components.code,{children:`images/avatars/joao.png`}),`.`]}),_jsx(ResponseField,{name:`size`,type:`number`,id:`param-size`,children:`Tamaño en bytes.`}),_jsx(ResponseField,{name:`content_type`,type:`string`,id:`param-content-type`,children:`Tipo MIME, derivado en el servidor a partir de la extensión del archivo.`}),_jsx(ResponseField,{name:`etag`,type:`string`,id:`param-etag`,children:`Etiqueta de entidad del contenido almacenado.`}),_jsxs(ResponseField,{name:`sha256`,type:`string | null`,id:`param-sha256`,children:[`SHA-256 del contenido en hexadecimal, cuando la subida envió un checksum. `,_jsx(_components.code,{children:`null`}),` en otro caso.`]}),_jsxs(ResponseField,{name:`visibility`,type:`string`,id:`param-visibility-1`,children:[_jsx(_components.code,{children:`public`}),` (se puede leer mediante su URL pública) o `,_jsx(_components.code,{children:`private`}),` (necesita un enlace temporal o un enlace para compartir).`]}),_jsxs(ResponseField,{name:`url`,type:`string | null`,id:`param-url`,children:[`URL pública. `,_jsx(_components.code,{children:`null`}),` mientras el objeto sea privado.`]}),_jsxs(ResponseField,{name:`cache_control`,type:`string | null`,id:`param-cache-control-1`,children:[_jsx(_components.code,{children:`immutable`}),`, `,_jsx(_components.code,{children:`max-age=\u003cseconds>`}),` o `,_jsx(_components.code,{children:`no-cache`}),` (`,_jsx(_components.code,{children:`no-cache`}),` requiere Enterprise-26 o superior). `,_jsx(_components.code,{children:`null`}),` significa el valor por defecto.`]}),_jsxs(ResponseField,{name:`content_disposition`,type:`string`,id:`param-content-disposition-1`,children:[_jsx(_components.code,{children:`inline`}),` (lo muestra el navegador) o `,_jsx(_components.code,{children:`attachment`}),` (se descarga). HTML, SVG y XML siempre son `,_jsx(_components.code,{children:`attachment`}),`.`]}),_jsxs(ResponseField,{name:`filename`,type:`string | null`,id:`param-filename-1`,children:[`Nombre sugerido al descargar. `,_jsx(_components.code,{children:`null`}),` usa el último segmento de `,_jsx(_components.code,{children:`path`}),`.`]}),_jsxs(ResponseField,{name:`metadata`,type:`object`,id:`param-metadata-1`,children:[`Hasta 5 claves, cada una `,_jsx(_components.code,{children:`[a-z0-9-]{1,64}`}),`, 512 bytes en total. Enterprise-12 o superior; `,_jsx(_components.code,{children:`{}`}),` en otros planes.`]}),_jsxs(ResponseField,{name:`expires_at`,type:`string | null`,id:`param-expires-at-1`,children:[`Cuándo se elimina el objeto, como marca de tiempo ISO 8601. `,_jsx(_components.code,{children:`null`}),` significa que no caduca.`]}),_jsx(ResponseField,{name:`created_at`,type:`string`,id:`param-created-at`,children:`Fecha de creación en ISO 8601.`}),_jsx(ResponseField,{name:`updated_at`,type:`string`,id:`param-updated-at`,children:`Fecha en ISO 8601 del último cambio.`})]})]}),`\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 un 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, caducó o fue revocado (solo con un token de subida).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_CHECKSUM_MISMATCH`}),` (`,_jsx(_components.code,{children:`400`}),`): El `,_jsx(_components.code,{children:`checksum_sha256`}),` no coincide con el archivo. No se guardó nada.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`VALIDATION_ERROR`}),` (`,_jsx(_components.code,{children:`400`}),`): Un parámetro de la consulta no superó la validación, por ejemplo un `,_jsx(_components.code,{children:`path`}),` no válido. `,_jsx(_components.code,{children:`details.path`}),` lo indica.`]}),`\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`}),`): El archivo supera los 100 MB, el límite del plan para esta ruta, o el `,_jsx(_components.code,{children:`max_size`}),` de la regla o del token.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`STORAGE_QUOTA_EXCEEDED`}),` (`,_jsx(_components.code,{children:`403`}),`): Guardar el archivo 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, no la permite la regla de carpeta o el token, o el archivo es un ejecutable.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_NAMESPACE_SUSPENDED`}),` (`,_jsx(_components.code,{children:`403`}),`): El almacenamiento de blob de la cuenta está suspendido, o su plan expiró. Las subidas y otras escrituras se rechazan desde el inicio del periodo de gracia de 72 horas.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`PLAN_RESTRICTED_FEATURE`}),` (`,_jsx(_components.code,{children:`403`}),`): `,_jsx(_components.code,{children:`metadata`}),` (por debajo de Enterprise-12) o `,_jsx(_components.code,{children:`cache_control: no-cache`}),` (por debajo de Enterprise-26) no está incluido en el plan.`]}),`\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:`BLOB_UPLOAD_TOKEN_EXHAUSTED`}),` (`,_jsx(_components.code,{children:`401`}),`): Solo con un token de subida: ya usó todas sus subidas.`]}),`\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":"Subir un objeto blob en una sola petición","sidebarTitle":"Subir objeto","api":"POST https://blob.vertracloud.app/v1/objects","authMethod":"bearer","description":"Sube un archivo de hasta 100 MB en una sola petición multipart y lo guarda en una ruta. Acepta un token de subida.","href":"/es-es/api-reference/endpoint/blob/objects/upload"}}},"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:[`Sube un archivo de hasta 100 MB en una sola petición `,_jsx(_components.code,{children:`multipart/form-data`}),` y lo guarda en `,_jsx(_components.code,{children:`path`}),`. Para archivos más grandes,\nusa `,_jsx(_components.a,{href:`/es-es/api-reference/endpoint/blob/uploads/create`,children:`Iniciar una subida directa`}),`. Responde con `,_jsx(_components.code,{children:`201`}),` y el objeto nuevo.`]}),`\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,{query:`path`,type:`string`,required:true,id:`param-path`,children:_jsxs(_components.p,{children:[`Ruta de destino en la cuenta. De 1 a 1024 caracteres, hasta 16 segmentos de `,_jsx(_components.code,{children:`[A-Za-z0-9._ -]`}),` (de 1 a 255 caracteres\ncada uno), sin `,_jsx(_components.code,{children:`/`}),` al principio ni al final, sin `,_jsx(_components.code,{children:`//`}),` ni `,_jsx(_components.code,{children:`..`}),`, y con una extensión obligatoria. Las rutas rechazadas\ndevuelven `,_jsx(_components.code,{children:`VALIDATION_ERROR`}),`; nunca se cambian en silencio.`]})}),`\n`,_jsx(ParamField,{query:`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,{query:`overwrite`,type:`boolean`,id:`param-overwrite`,children:_jsxs(_components.p,{children:[`Reemplaza un objeto que ya esté en `,_jsx(_components.code,{children:`path`}),`. Por defecto `,_jsx(_components.code,{children:`false`}),`: una ruta ocupada devuelve `,_jsx(_components.code,{children:`BLOB_OBJECT_ALREADY_EXISTS`}),`.`]})}),`\n`,_jsx(ParamField,{query:`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\nlibre) en lugar de devolver `,_jsx(_components.code,{children:`BLOB_OBJECT_ALREADY_EXISTS`}),`. La respuesta incluye el `,_jsx(_components.code,{children:`path`}),` final. Por defecto `,_jsx(_components.code,{children:`false`}),`. No\nse 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,{query:`random_suffix`,type:`boolean`,id:`param-random-suffix`,children:_jsxs(_components.p,{children:[`Inserta `,_jsx(_components.code,{children:`-`}),` seguido de 10 caracteres aleatorios en base 36 antes de la extensión. Por defecto `,_jsx(_components.code,{children:`false`}),`. Se fuerza a\n`,_jsx(_components.code,{children:`true`}),` para un token de subida sin `,_jsx(_components.code,{children:`path`}),` fijo.`]})}),`\n`,_jsx(ParamField,{query:`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). Por defecto: sin valor definido.`]})}),`\n`,_jsx(ParamField,{query:`content_disposition`,type:`string`,id:`param-content-disposition`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`inline`}),` o `,_jsx(_components.code,{children:`attachment`}),`. Por defecto: `,_jsx(_components.code,{children:`inline`}),`. Los archivos que terminan en `,_jsx(_components.code,{children:`.html`}),`, `,_jsx(_components.code,{children:`.htm`}),`, `,_jsx(_components.code,{children:`.svg`}),`, `,_jsx(_components.code,{children:`.xml`}),` o `,_jsx(_components.code,{children:`.xhtml`}),`\nse sirven siempre como `,_jsx(_components.code,{children:`attachment`}),`.`]})}),`\n`,_jsx(ParamField,{query:`filename`,type:`string`,id:`param-filename`,children:_jsxs(_components.p,{children:[`Nombre sugerido al descargar el archivo. Por defecto: el último segmento de `,_jsx(_components.code,{children:`path`}),`.`]})}),`\n`,_jsx(ParamField,{query:`expires_at`,type:`string`,id:`param-expires-at`,children:_jsx(_components.p,{children:`Marca de tiempo ISO 8601 de cuándo se elimina el objeto. Debe ser como mínimo el plazo mínimo del plan desde ahora (7 días,\no 1 hora en Enterprise-26 o superior).`})}),`\n`,_jsx(ParamField,{query:`metadata`,type:`string`,id:`param-metadata`,children:_jsxs(_components.p,{children:[`Objeto JSON, codificado en URL: 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:`checksum_sha256`,type:`string`,id:`param-checksum-sha256`,children:_jsxs(_components.p,{children:[`SHA-256 del archivo en hexadecimal. Si no coincide, devuelve `,_jsx(_components.code,{children:`BLOB_CHECKSUM_MISMATCH`}),` y no se guarda nada.`]})}),`\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 petición actúa sobre el blob del propietario del\nworkspace y necesita el permiso `,_jsx(_components.code,{children:`blob:read`}),` del workspace (`,_jsx(_components.code,{children:`blob:manage`}),` en las rutas que modifican datos). Omítelo\npara actuar sobre tu propio blob.`]})}),`\n`,_jsx(ParamField,{body:`file`,type:`file`,required:true,id:`param-file`,children:_jsxs(_components.p,{children:[`El archivo, como única parte de `,_jsx(_components.code,{children:`multipart/form-data`}),`. Hasta 100 MB; se aplica el límite del plan.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`ejemplo-de-petición`,children:`Ejemplo de petición`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,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:`3`,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/objects?path=images/logo.png\u0026visibility=public\"`}),_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:` -F`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"file=@./logo.png\"`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`respuesta`,children:`Respuesta`}),`\n`,_jsxs(ResponseField,{name:`response`,type:`object`,id:`param-response`,children:[_jsxs(_components.p,{children:[`El objeto guardado. Responde con `,_jsx(_components.code,{children:`201`}),`.`]}),_jsxs(Expandable,{title:`propiedades`,children:[_jsx(ResponseField,{name:`id`,type:`string`,id:`param-id`,children:`ID estable del objeto. Nunca cambia, aunque cambien la ruta, la visibilidad o la caducidad.`}),_jsxs(ResponseField,{name:`path`,type:`string`,id:`param-path-1`,children:[`Ruta completa dentro de la cuenta, por ejemplo `,_jsx(_components.code,{children:`images/avatars/joao.png`}),`.`]}),_jsx(ResponseField,{name:`size`,type:`number`,id:`param-size`,children:`Tamaño en bytes.`}),_jsx(ResponseField,{name:`content_type`,type:`string`,id:`param-content-type`,children:`Tipo MIME, derivado en el servidor a partir de la extensión del archivo.`}),_jsx(ResponseField,{name:`etag`,type:`string`,id:`param-etag`,children:`Etiqueta de entidad del contenido almacenado.`}),_jsxs(ResponseField,{name:`sha256`,type:`string | null`,id:`param-sha256`,children:[`SHA-256 del contenido en hexadecimal, cuando la subida envió un checksum. `,_jsx(_components.code,{children:`null`}),` en otro caso.`]}),_jsxs(ResponseField,{name:`visibility`,type:`string`,id:`param-visibility-1`,children:[_jsx(_components.code,{children:`public`}),` (se puede leer mediante su URL pública) o `,_jsx(_components.code,{children:`private`}),` (necesita un enlace temporal o un enlace para compartir).`]}),_jsxs(ResponseField,{name:`url`,type:`string | null`,id:`param-url`,children:[`URL pública. `,_jsx(_components.code,{children:`null`}),` mientras el objeto sea privado.`]}),_jsxs(ResponseField,{name:`cache_control`,type:`string | null`,id:`param-cache-control-1`,children:[_jsx(_components.code,{children:`immutable`}),`, `,_jsx(_components.code,{children:`max-age=\u003cseconds>`}),` o `,_jsx(_components.code,{children:`no-cache`}),` (`,_jsx(_components.code,{children:`no-cache`}),` requiere Enterprise-26 o superior). `,_jsx(_components.code,{children:`null`}),` significa el valor por defecto.`]}),_jsxs(ResponseField,{name:`content_disposition`,type:`string`,id:`param-content-disposition-1`,children:[_jsx(_components.code,{children:`inline`}),` (lo muestra el navegador) o `,_jsx(_components.code,{children:`attachment`}),` (se descarga). HTML, SVG y XML siempre son `,_jsx(_components.code,{children:`attachment`}),`.`]}),_jsxs(ResponseField,{name:`filename`,type:`string | null`,id:`param-filename-1`,children:[`Nombre sugerido al descargar. `,_jsx(_components.code,{children:`null`}),` usa el último segmento de `,_jsx(_components.code,{children:`path`}),`.`]}),_jsxs(ResponseField,{name:`metadata`,type:`object`,id:`param-metadata-1`,children:[`Hasta 5 claves, cada una `,_jsx(_components.code,{children:`[a-z0-9-]{1,64}`}),`, 512 bytes en total. Enterprise-12 o superior; `,_jsx(_components.code,{children:`{}`}),` en otros planes.`]}),_jsxs(ResponseField,{name:`expires_at`,type:`string | null`,id:`param-expires-at-1`,children:[`Cuándo se elimina el objeto, como marca de tiempo ISO 8601. `,_jsx(_components.code,{children:`null`}),` significa que no caduca.`]}),_jsx(ResponseField,{name:`created_at`,type:`string`,id:`param-created-at`,children:`Fecha de creación en ISO 8601.`}),_jsx(ResponseField,{name:`updated_at`,type:`string`,id:`param-updated-at`,children:`Fecha en ISO 8601 del último cambio.`})]})]}),`\n`,_jsx(ResponseExample,{children:_jsx(CodeBlock,{filename:`Response`,numberOfLines:`19`,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:`19`,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:`\"0b6f7c1e-3d2a-4f5b-9a8c-1d2e3f4a5b6c\"`}),_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:`\"images/logo.png\"`}),_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:`48213`}),_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:`\"image/png\"`}),_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:` \"etag\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"9b2cf535f27731c974343645a3085d39\"`}),_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:` \"sha256\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_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:` \"visibility\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"public\"`}),_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:` \"url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://blob.vertracloud.dev/k7p2m9x4qa/images/logo.png\"`}),_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:` \"cache_control\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_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_disposition\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"inline\"`}),_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:` \"filename\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_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:` \"metadata\"`}),_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:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_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\"`}),_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:` \"updated_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 un 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, caducó o fue revocado (solo con un token de subida).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_CHECKSUM_MISMATCH`}),` (`,_jsx(_components.code,{children:`400`}),`): El `,_jsx(_components.code,{children:`checksum_sha256`}),` no coincide con el archivo. No se guardó nada.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`VALIDATION_ERROR`}),` (`,_jsx(_components.code,{children:`400`}),`): Un parámetro de la consulta no superó la validación, por ejemplo un `,_jsx(_components.code,{children:`path`}),` no válido. `,_jsx(_components.code,{children:`details.path`}),` lo indica.`]}),`\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`}),`): El archivo supera los 100 MB, el límite del plan para esta ruta, o el `,_jsx(_components.code,{children:`max_size`}),` de la regla o del token.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`STORAGE_QUOTA_EXCEEDED`}),` (`,_jsx(_components.code,{children:`403`}),`): Guardar el archivo 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, no la permite la regla de carpeta o el token, o el archivo es un ejecutable.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_NAMESPACE_SUSPENDED`}),` (`,_jsx(_components.code,{children:`403`}),`): El almacenamiento de blob de la cuenta está suspendido, o su plan expiró. Las subidas y otras escrituras se rechazan desde el inicio del periodo de gracia de 72 horas.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`PLAN_RESTRICTED_FEATURE`}),` (`,_jsx(_components.code,{children:`403`}),`): `,_jsx(_components.code,{children:`metadata`}),` (por debajo de Enterprise-12) o `,_jsx(_components.code,{children:`cache_control: no-cache`}),` (por debajo de Enterprise-26) no está incluido en el plan.`]}),`\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:`BLOB_UPLOAD_TOKEN_EXHAUSTED`}),` (`,_jsx(_components.code,{children:`401`}),`): Solo con un token de subida: ya usó todas sus subidas.`]}),`\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:`\"BLOB_CHECKSUM_MISMATCH\"`})]}),`\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_OBJECT_ALREADY_EXISTS\"`})]}),`\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":"Subir un objeto blob en una sola petición","sidebarTitle":"Subir objeto","api":"POST https://blob.vertracloud.app/v1/objects","authMethod":"bearer","description":"Sube un archivo de hasta 100 MB en una sola petición multipart y lo guarda en una ruta. Acepta un token de subida.","href":"/es-es/api-reference/endpoint/blob/objects/upload"}}}},"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=\"19\">\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\">\"0b6f7c1e-3d2a-4f5b-9a8c-1d2e3f4a5b6c\"\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\">\"images/logo.png\"\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\">48213\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\">\"image/png\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"etag\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"9b2cf535f27731c974343645a3085d39\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"sha256\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">null\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"visibility\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"public\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"url\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"https://blob.vertracloud.dev/k7p2m9x4qa/images/logo.png\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"cache_control\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">null\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_disposition\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"inline\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"filename\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">null\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"metadata\"\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:#0550AE;--shiki-dark:#569CD6\">null\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>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"updated_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":"Subir un objeto blob en una sola petición","path":"/v1/objects","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":{"path":{"schema":[{"type":"string","description":"Ruta de destino en la cuenta. De 1 a 1024 caracteres, hasta 16 segmentos de `[A-Za-z0-9._ -]` (de 1 a 255 caracteres cada uno), sin `/` al principio ni al final, sin `//` ni `..` , y con una extensión obligatoria. Las rutas rechazadas devuelven `VALIDATION_ERROR` ; nunca se cambian en silencio.","required":true}]},"visibility":{"schema":[{"type":"string","description":"`public` o `private` . Por defecto `private` ."}]},"overwrite":{"schema":[{"type":"boolean","description":"Reemplaza un objeto que ya esté en `path` . Por defecto `false` : una ruta ocupada devuelve `BLOB_OBJECT_ALREADY_EXISTS` ."}]},"rename_on_conflict":{"schema":[{"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 respuesta incluye 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":{"schema":[{"type":"boolean","description":"Inserta `-` seguido de 10 caracteres aleatorios en base 36 antes de la extensión. Por defecto `false` . Se fuerza a `true` para un token de subida sin `path` fijo."}]},"cache_control":{"schema":[{"type":"string","description":"`immutable` , `max-age=\u003cseconds>` o `no-cache` (Enterprise-26 o superior). Por defecto: sin valor definido."}]},"content_disposition":{"schema":[{"type":"string","description":"`inline` o `attachment` . Por defecto: `inline` . Los archivos que terminan en `.html` , `.htm` , `.svg` , `.xml` o `.xhtml` se sirven siempre como `attachment` ."}]},"filename":{"schema":[{"type":"string","description":"Nombre sugerido al descargar el archivo. Por defecto: el último segmento de `path` ."}]},"expires_at":{"schema":[{"type":"string","description":"Marca de tiempo ISO 8601 de cuándo se elimina el objeto. Debe ser como mínimo el plazo mínimo del plan desde ahora (7 días, o 1 hora en Enterprise-26 o superior)."}]},"metadata":{"schema":[{"type":"string","description":"Objeto JSON, codificado en URL: hasta 5 claves, cada una `[a-z0-9-]{1,64}` , 512 bytes en total. Enterprise-12 o superior."}]},"checksum_sha256":{"schema":[{"type":"string","description":"SHA-256 del archivo en hexadecimal. Si no coincide, devuelve `BLOB_CHECKSUM_MISMATCH` y no se guarda nada."}]},"workspace_id":{"schema":[{"type":"string","description":"El ID del workspace, cuando el blob pertenece a un workspace. La petición actúa sobre el blob del propietario del workspace y necesita el permiso `blob:read` del workspace ( `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":{"file":[{"type":"file","description":"El archivo, como única parte de `multipart/form-data` . Hasta 100 MB; se aplica el límite del plan.","required":true}]}}],"examples":{"example":{"value":{}}}}}},"response":{"200":{"application/json":{"schemaArray":[{"type":"object","properties":{"response":[{"type":"object","properties":{"id":[{"type":"string","description":"ID estable del objeto. Nunca cambia, aunque cambien la ruta, la visibilidad o la caducidad."}],"path":[{"type":"string","description":"Ruta completa dentro de la cuenta, por ejemplo `images/avatars/joao.png` ."}],"size":[{"type":"number","description":"Tamaño en bytes."}],"content_type":[{"type":"string","description":"Tipo MIME, derivado en el servidor a partir de la extensión del archivo."}],"etag":[{"type":"string","description":"Etiqueta de entidad del contenido almacenado."}],"sha256":[{"type":"object","properties":{},"description":"SHA-256 del contenido en hexadecimal, cuando la subida envió un checksum. `null` en otro caso."}],"visibility":[{"type":"string","description":"`public` (se puede leer mediante su URL pública) o `private` (necesita un enlace temporal o un enlace para compartir)."}],"url":[{"type":"object","properties":{},"description":"URL pública. `null` mientras el objeto sea privado."}],"cache_control":[{"type":"object","properties":{},"description":"`immutable` , `max-age=\u003cseconds>` o `no-cache` ( `no-cache` requiere Enterprise-26 o superior). `null` significa el valor por defecto."}],"content_disposition":[{"type":"string","description":"`inline` (lo muestra el navegador) o `attachment` (se descarga). HTML, SVG y XML siempre son `attachment` ."}],"filename":[{"type":"object","properties":{},"description":"Nombre sugerido al descargar. `null` usa el último segmento de `path` ."}],"metadata":[{"type":"object","properties":{},"description":"Hasta 5 claves, cada una `[a-z0-9-]{1,64}` , 512 bytes en total. Enterprise-12 o superior; `{}` en otros planes."}],"expires_at":[{"type":"object","properties":{},"description":"Cuándo se elimina el objeto, como marca de tiempo ISO 8601. `null` significa que no caduca."}],"created_at":[{"type":"string","description":"Fecha de creación en ISO 8601."}],"updated_at":[{"type":"string","description":"Fecha en ISO 8601 del último cambio."}]},"description":"El objeto guardado. Responde con `201` ."}],"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 un workspace con ese ID, o no eres miembro. `BLOB_UPLOAD_TOKEN_INVALID` ( `401` ): El token de subida no existe, caducó o fue revocado (solo con un token de subida). `BLOB_CHECKSUM_MISMATCH` ( `400` ): El `checksum_sha256` no coincide con el archivo. No se guardó nada. `VALIDATION_ERROR` ( `400` ): Un parámetro de la consulta no superó la validación, por ejemplo un `path` no válido. `details.path` lo indica. `BLOB_OBJECT_ALREADY_EXISTS` ( `409` ): `path` está ocupada y `overwrite` no es `true` . `BLOB_FILE_TOO_LARGE` ( `413` ): El archivo supera los 100 MB, el límite del plan para esta ruta, o el `max_size` de la regla o del token. `STORAGE_QUOTA_EXCEEDED` ( `403` ): Guardar el archivo superaría la cuota de blob del plan. `BLOCKED_FILE_TYPE` ( `422` ): La extensión está bloqueada, no la permite la regla de carpeta o el token, o el archivo es un ejecutable. `BLOB_NAMESPACE_SUSPENDED` ( `403` ): El almacenamiento de blob de la cuenta está suspendido, o su plan expiró. Las subidas y otras escrituras se rechazan desde el inicio del periodo de gracia de 72 horas. `PLAN_RESTRICTED_FEATURE` ( `403` ): `metadata` (por debajo de Enterprise-12) o `cache_control: no-cache` (por debajo de Enterprise-26) no está incluido en el plan. `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. `BLOB_UPLOAD_TOKEN_EXHAUSTED` ( `401` ): Solo con un token de subida: ya usó todas sus subidas. `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>","size":123,"content_type":"\u003cstring>","etag":"\u003cstring>","sha256":{},"visibility":"\u003cstring>","url":{},"cache_control":{},"content_disposition":"\u003cstring>","filename":{},"metadata":{},"expires_at":{},"created_at":"\u003cstring>","updated_at":"\u003cstring>"},"code":"\u003cstring>"}}}}}},"deprecated":false}},"jsLinks":[],"subdomain":"vertracloud","siteName":"Vertra Cloud","title":"Subir un objeto blob en una sola petición - Vertra Cloud","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/","matchLevel":4},"pt-BR":{"href":"/pt-br","matchLevel":4},"es":{"href":"/es-es/api-reference/endpoint/blob/objects/upload","matchLevel":0}}},"lastModified":"2026-10-30T22:45:18.552Z","gitLastModified":"2026-10-28T22:06:31.000Z","originalFileLocation":"es-es/api-reference/endpoint/blob/objects/upload.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=\"Sube un archivo de hasta 100 MB en una sola petición multipart y lo guarda en una ruta. 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=\"Subir un objeto blob en una sola petición - Vertra Cloud\">\u003cmeta data-mint-head property=\"og:description\" content=\"Sube un archivo de hasta 100 MB en una sola petición multipart y lo guarda en una ruta. 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/objects/upload\">\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=\"Subir un objeto blob en una sola petición - Vertra Cloud\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Sube un archivo de hasta 100 MB en una sola petición multipart y lo guarda en una ruta. 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/objects/upload\">\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/objects/upload.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/objects/upload#webpage\",\"url\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/objects/upload\",\"name\":\"Subir un objeto blob en una sola petición\",\"description\":\"Sube un archivo de hasta 100 MB en una sola petición multipart y lo guarda en una ruta. 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/objects/upload#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/objects/upload#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Vertra Cloud\",\"item\":\"https://docs.vertracloud.app\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Subir un objeto blob en una sola petición\",\"item\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/objects/upload\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/objects/upload#apireference\",\"headline\":\"Subir un objeto blob en una sola petición\",\"name\":\"Subir un objeto blob en una sola petición\",\"description\":\"Sube un archivo de hasta 100 MB en una sola petición multipart y lo guarda en una ruta. Acepta un token de subida.\",\"url\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/objects/upload\",\"mainEntityOfPage\":{\"@id\":\"https://docs.vertracloud.app/es-es/api-reference/endpoint/blob/objects/upload#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","description":"Endpoints REST de Blob Storage en blob.vertracloud.app: objetos, subidas multipart, enlaces para compartir, reglas de carpeta, cuenta y dominios.","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","description":"Lista los objetos blob de la cuenta por prefijo de ruta, con carpetas y un cursor para la página siguiente. Devuelve hasta 1.000 objetos por llamada.","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","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","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":"Subir un objeto blob en una sola petición - 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"]}