Envia um arquivo de até 100 MB em uma única requisição multipart/form-data e o armazena em path. Para arquivos maiores, use Iniciar um upload direto. Responde com 201 e o novo objeto.Escopo:blob:write. Aceita um token de upload.Token de upload: esta rota também aceita um token de upload (Authorization: Bearer vcup_...) no lugar de uma chave de API.
Caminho de destino na conta. De 1 a 1024 caracteres, até 16 segmentos de [A-Za-z0-9._ -] (de 1 a 255 caracteres cada), sem / no início ou no fim, sem // nem .., e é obrigatória uma extensão. Caminhos recusados retornam VALIDATION_ERROR; eles nunca são alterados em silêncio.
Quando path está ocupado, salva o arquivo como nome-1.ext, nome-2.ext e assim por diante (o primeiro nome livre), em vez de retornar BLOB_OBJECT_ALREADY_EXISTS. A resposta traz o path final. Padrão false. Não pode ser combinado com overwrite e não tem efeito com um token de upload que fixa o path.
Timestamp ISO 8601 de quando o objeto é excluído. Precisa ser pelo menos o mínimo do plano a partir de agora (7 dias, ou 1 hora no Enterprise-26 ou superior).
O ID do workspace, quando o blob pertence a um workspace. A chamada atua sobre o blob do proprietário do workspace e exige a permissão blob:read do workspace (blob:manage nas rotas que alteram dados). Deixe de fora para atuar sobre o seu próprio blob.
O código de erro que indica o motivo da falha. Valores possíveis:
AUTH_TOKEN_MISSING (401): o cabeçalho Authorization não foi enviado.
API_KEY_INVALID (401): a chave de API não existe, foi revogada ou o segredo não confere.
API_KEY_SCOPE_DENIED (403): a chave não tem o escopo que esta rota exige (blob:read ou blob:write); details.required informa qual.
WORKSPACE_PERMISSION_DENIED (403): somente com workspace_id: você não é membro, ou o seu papel não tem a permissão de blob.
WORKSPACE_NOT_FOUND (404): somente com workspace_id: não existe workspace com esse ID, ou você não é membro.
BLOB_UPLOAD_TOKEN_INVALID (401): o token de upload não existe, expirou ou foi revogado (somente com token de upload).
BLOB_CHECKSUM_MISMATCH (400): o checksum_sha256 não confere com o arquivo. Nada foi armazenado.
VALIDATION_ERROR (400): um parâmetro de consulta falhou na validação, por exemplo um path inválido. details.path informa qual.
BLOB_OBJECT_ALREADY_EXISTS (409): path está ocupado e overwrite não é true.
BLOB_FILE_TOO_LARGE (413): o arquivo tem mais de 100 MB, o limite do plano para esta rota, ou o max_size da regra ou do token.
STORAGE_QUOTA_EXCEEDED (403): armazenar o arquivo ultrapassaria a cota de blob do plano.
BLOCKED_FILE_TYPE (422): a extensão está bloqueada, não é permitida pela regra da pasta ou pelo token, ou o arquivo é um executável.
BLOB_NAMESPACE_SUSPENDED (403): o armazenamento de blob da conta está suspenso, ou o plano expirou. Uploads e outras gravações são recusados desde o início do período de carência de 72 horas.
PLAN_RESTRICTED_FEATURE (403): metadata (abaixo do Enterprise-12) ou cache_control: no-cache (abaixo do Enterprise-26) não está incluído no plano.
BLOB_UPLOAD_TOKEN_CONSTRAINT (403): somente com token de upload: o caminho, a pasta ou outra opção fixada pelo token não confere com a requisição.
BLOB_UPLOAD_TOKEN_EXHAUSTED (401): somente com token de upload: ele já usou todos os seus usos.
RATE_LIMIT_EXCEEDED (429): abaixo do Enterprise-12, os uploads são limitados a 1 por segundo. details.retry_after informa a 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 modificação em 28 de outubro 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":"pt-br/api-reference/endpoint/blob/objects/upload","slug":"/pt-br/api-reference/endpoint/blob/objects/upload","pageMetadata":{"title":"Enviar objeto de blob em uma única requisição","sidebarTitle":"Enviar objeto","api":"POST https://blob.vertracloud.app/v1/objects","authMethod":"bearer","description":"Envia um arquivo de até 100 MB em uma única requisição multipart e o armazena em um caminho. Aceita um token de upload.","href":"/pt-br/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: \"Envia um arquivo de até 100 MB em uma única requisição multipart e o armazena em um caminho. Aceita um token de upload.\"\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:[`Envia um arquivo de até 100 MB em uma única requisição `,_jsx(_components.code,{children:`multipart/form-data`}),` e o armazena em `,_jsx(_components.code,{children:`path`}),`. Para arquivos maiores, use `,_jsx(_components.a,{href:`/pt-br/api-reference/endpoint/blob/uploads/create`,children:`Iniciar um upload direto`}),`. Responde com `,_jsx(_components.code,{children:`201`}),` e o novo objeto.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Escopo:`}),` `,_jsx(_components.code,{children:`blob:write`}),`. Aceita um token de upload.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Token de upload:`}),` esta rota também aceita um token de upload (`,_jsx(_components.code,{children:`Authorization: Bearer vcup_...`}),`) no lugar de uma chave de API.`]}),`\n`,_jsx(ParamField,{query:`path`,type:`string`,required:true,id:`param-path`,children:_jsxs(_components.p,{children:[`Caminho de destino na conta. De 1 a 1024 caracteres, até 16 segmentos de `,_jsx(_components.code,{children:`[A-Za-z0-9._ -]`}),` (de 1 a 255 caracteres cada), sem `,_jsx(_components.code,{children:`/`}),` no início ou no fim, sem `,_jsx(_components.code,{children:`//`}),` nem `,_jsx(_components.code,{children:`..`}),`, e é obrigatória uma extensão. Caminhos recusados retornam `,_jsx(_components.code,{children:`VALIDATION_ERROR`}),`; eles nunca são alterados em silêncio.`]})}),`\n`,_jsx(ParamField,{query:`visibility`,type:`string`,id:`param-visibility`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`public`}),` ou `,_jsx(_components.code,{children:`private`}),`. Padrão `,_jsx(_components.code,{children:`private`}),`.`]})}),`\n`,_jsx(ParamField,{query:`overwrite`,type:`boolean`,id:`param-overwrite`,children:_jsxs(_components.p,{children:[`Substitui um objeto que já existe em `,_jsx(_components.code,{children:`path`}),`. Padrão `,_jsx(_components.code,{children:`false`}),`: um caminho ocupado retorna `,_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:[`Quando `,_jsx(_components.code,{children:`path`}),` está ocupado, salva o arquivo como `,_jsx(_components.code,{children:`nome-1.ext`}),`, `,_jsx(_components.code,{children:`nome-2.ext`}),` e assim por diante (o primeiro nome livre), em vez de retornar `,_jsx(_components.code,{children:`BLOB_OBJECT_ALREADY_EXISTS`}),`. A resposta traz o `,_jsx(_components.code,{children:`path`}),` final. Padrão `,_jsx(_components.code,{children:`false`}),`. Não pode ser combinado com `,_jsx(_components.code,{children:`overwrite`}),` e não tem efeito com um token de upload que fixa o `,_jsx(_components.code,{children:`path`}),`.`]})}),`\n`,_jsx(ParamField,{query:`random_suffix`,type:`boolean`,id:`param-random-suffix`,children:_jsxs(_components.p,{children:[`Insere `,_jsx(_components.code,{children:`-`}),` seguido de 10 caracteres aleatórios em base 36 antes da extensão. Padrão `,_jsx(_components.code,{children:`false`}),`. Forçado para `,_jsx(_components.code,{children:`true`}),` em um token de upload sem `,_jsx(_components.code,{children:`path`}),` fixo.`]})}),`\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>`}),` ou `,_jsx(_components.code,{children:`no-cache`}),` (Enterprise-26 ou superior). Padrão: nenhum valor definido.`]})}),`\n`,_jsx(ParamField,{query:`content_disposition`,type:`string`,id:`param-content-disposition`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`inline`}),` ou `,_jsx(_components.code,{children:`attachment`}),`. Padrão: `,_jsx(_components.code,{children:`inline`}),`. Arquivos com extensão `,_jsx(_components.code,{children:`.html`}),`, `,_jsx(_components.code,{children:`.htm`}),`, `,_jsx(_components.code,{children:`.svg`}),`, `,_jsx(_components.code,{children:`.xml`}),` ou `,_jsx(_components.code,{children:`.xhtml`}),` são sempre servidos como `,_jsx(_components.code,{children:`attachment`}),`.`]})}),`\n`,_jsx(ParamField,{query:`filename`,type:`string`,id:`param-filename`,children:_jsxs(_components.p,{children:[`Nome sugerido quando o arquivo é baixado. Padrão: o ú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:`Timestamp ISO 8601 de quando o objeto é excluído. Precisa ser pelo menos o mínimo do plano a partir de agora (7 dias, ou 1 hora no Enterprise-26 ou superior).`})}),`\n`,_jsx(ParamField,{query:`metadata`,type:`string`,id:`param-metadata`,children:_jsxs(_components.p,{children:[`Objeto JSON, codificado em URL: até 5 chaves, cada uma `,_jsx(_components.code,{children:`[a-z0-9-]{1,64}`}),`, 512 bytes no total. Enterprise-12 ou superior.`]})}),`\n`,_jsx(ParamField,{query:`checksum_sha256`,type:`string`,id:`param-checksum-sha256`,children:_jsxs(_components.p,{children:[`SHA-256 do arquivo em hexadecimal. Se não bater, retorna `,_jsx(_components.code,{children:`BLOB_CHECKSUM_MISMATCH`}),` e nada é armazenado.`]})}),`\n`,_jsx(ParamField,{query:`workspace_id`,type:`string`,id:`param-workspace-id`,children:_jsxs(_components.p,{children:[`O ID do workspace, quando o blob pertence a um workspace. A chamada atua sobre o blob do proprietário do workspace e exige a permissão `,_jsx(_components.code,{children:`blob:read`}),` do workspace (`,_jsx(_components.code,{children:`blob:manage`}),` nas rotas que alteram dados). Deixe de fora para atuar sobre o seu próprio blob.`]})}),`\n`,_jsx(ParamField,{body:`file`,type:`file`,required:true,id:`param-file`,children:_jsxs(_components.p,{children:[`O arquivo, como única parte do `,_jsx(_components.code,{children:`multipart/form-data`}),`. Até 100 MB; vale o limite do plano.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`exemplo-de-requisição`,children:`Exemplo de requisição`}),`\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:`resposta`,children:`Resposta`}),`\n`,_jsxs(ResponseField,{name:`response`,type:`object`,id:`param-response`,children:[_jsxs(_components.p,{children:[`O objeto armazenado. Responde com `,_jsx(_components.code,{children:`201`}),`.`]}),_jsxs(Expandable,{title:`propriedades`,children:[_jsx(ResponseField,{name:`id`,type:`string`,id:`param-id`,children:`ID estável do objeto. Nunca muda, mesmo quando o caminho, a visibilidade ou a expiração mudam.`}),_jsxs(ResponseField,{name:`path`,type:`string`,id:`param-path-1`,children:[`Caminho completo dentro da conta, por exemplo `,_jsx(_components.code,{children:`images/avatars/joao.png`}),`.`]}),_jsx(ResponseField,{name:`size`,type:`number`,id:`param-size`,children:`Tamanho em bytes.`}),_jsx(ResponseField,{name:`content_type`,type:`string`,id:`param-content-type`,children:`Tipo MIME, derivado no servidor a partir da extensão do arquivo.`}),_jsx(ResponseField,{name:`etag`,type:`string`,id:`param-etag`,children:`Entity tag do conteúdo armazenado.`}),_jsxs(ResponseField,{name:`sha256`,type:`string | null`,id:`param-sha256`,children:[`SHA-256 do conteúdo em hexadecimal, quando o upload enviou um checksum. `,_jsx(_components.code,{children:`null`}),` caso contrário.`]}),_jsxs(ResponseField,{name:`visibility`,type:`string`,id:`param-visibility-1`,children:[_jsx(_components.code,{children:`public`}),` (legível pela URL pública) ou `,_jsx(_components.code,{children:`private`}),` (precisa de um link temporário ou de um compartilhamento).`]}),_jsxs(ResponseField,{name:`url`,type:`string | null`,id:`param-url`,children:[`URL pública. `,_jsx(_components.code,{children:`null`}),` enquanto o objeto é 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>`}),` ou `,_jsx(_components.code,{children:`no-cache`}),` (`,_jsx(_components.code,{children:`no-cache`}),` exige Enterprise-26 ou superior). `,_jsx(_components.code,{children:`null`}),` significa o padrão.`]}),_jsxs(ResponseField,{name:`content_disposition`,type:`string`,id:`param-content-disposition-1`,children:[_jsx(_components.code,{children:`inline`}),` (exibido pelo navegador) ou `,_jsx(_components.code,{children:`attachment`}),` (baixado). HTML, SVG e XML são sempre `,_jsx(_components.code,{children:`attachment`}),`.`]}),_jsxs(ResponseField,{name:`filename`,type:`string | null`,id:`param-filename-1`,children:[`Nome sugerido no download. `,_jsx(_components.code,{children:`null`}),` usa o último segmento de `,_jsx(_components.code,{children:`path`}),`.`]}),_jsxs(ResponseField,{name:`metadata`,type:`object`,id:`param-metadata-1`,children:[`Até 5 chaves, cada uma `,_jsx(_components.code,{children:`[a-z0-9-]{1,64}`}),`, 512 bytes no total. Enterprise-12 ou superior; `,_jsx(_components.code,{children:`{}`}),` nos demais planos.`]}),_jsxs(ResponseField,{name:`expires_at`,type:`string | null`,id:`param-expires-at-1`,children:[`Quando o objeto é excluído, em timestamp ISO 8601. `,_jsx(_components.code,{children:`null`}),` significa sem expiração.`]}),_jsx(ResponseField,{name:`created_at`,type:`string`,id:`param-created-at`,children:`Data de criação em ISO 8601.`}),_jsx(ResponseField,{name:`updated_at`,type:`string`,id:`param-updated-at`,children:`Data da última alteração em ISO 8601.`})]})]}),`\n`,`\n`,_jsx(Heading,{level:`3`,id:`respostas-de-erro`,children:`Respostas de erro`}),`\n`,_jsxs(ResponseField,{name:`code`,type:`string`,id:`param-code`,children:[_jsx(_components.p,{children:`O código de erro que indica o motivo da falha. Valores possíveis:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`AUTH_TOKEN_MISSING`}),` (`,_jsx(_components.code,{children:`401`}),`): o cabeçalho `,_jsx(_components.code,{children:`Authorization`}),` não foi enviado.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`API_KEY_INVALID`}),` (`,_jsx(_components.code,{children:`401`}),`): a chave de API não existe, foi revogada ou o segredo não confere.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`API_KEY_SCOPE_DENIED`}),` (`,_jsx(_components.code,{children:`403`}),`): a chave não tem o escopo que esta rota exige (`,_jsx(_components.code,{children:`blob:read`}),` ou `,_jsx(_components.code,{children:`blob:write`}),`); `,_jsx(_components.code,{children:`details.required`}),` informa qual.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`WORKSPACE_PERMISSION_DENIED`}),` (`,_jsx(_components.code,{children:`403`}),`): somente com `,_jsx(_components.code,{children:`workspace_id`}),`: você não é membro, ou o seu papel não tem a permissão de blob.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`WORKSPACE_NOT_FOUND`}),` (`,_jsx(_components.code,{children:`404`}),`): somente com `,_jsx(_components.code,{children:`workspace_id`}),`: não existe workspace com esse ID, ou você não é membro.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_UPLOAD_TOKEN_INVALID`}),` (`,_jsx(_components.code,{children:`401`}),`): o token de upload não existe, expirou ou foi revogado (somente com token de upload).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_CHECKSUM_MISMATCH`}),` (`,_jsx(_components.code,{children:`400`}),`): o `,_jsx(_components.code,{children:`checksum_sha256`}),` não confere com o arquivo. Nada foi armazenado.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`VALIDATION_ERROR`}),` (`,_jsx(_components.code,{children:`400`}),`): um parâmetro de consulta falhou na validação, por exemplo um `,_jsx(_components.code,{children:`path`}),` inválido. `,_jsx(_components.code,{children:`details.path`}),` informa qual.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_OBJECT_ALREADY_EXISTS`}),` (`,_jsx(_components.code,{children:`409`}),`): `,_jsx(_components.code,{children:`path`}),` está ocupado e `,_jsx(_components.code,{children:`overwrite`}),` não é `,_jsx(_components.code,{children:`true`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_FILE_TOO_LARGE`}),` (`,_jsx(_components.code,{children:`413`}),`): o arquivo tem mais de 100 MB, o limite do plano para esta rota, ou o `,_jsx(_components.code,{children:`max_size`}),` da regra ou do token.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`STORAGE_QUOTA_EXCEEDED`}),` (`,_jsx(_components.code,{children:`403`}),`): armazenar o arquivo ultrapassaria a cota de blob do plano.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOCKED_FILE_TYPE`}),` (`,_jsx(_components.code,{children:`422`}),`): a extensão está bloqueada, não é permitida pela regra da pasta ou pelo token, ou o arquivo é um executável.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_NAMESPACE_SUSPENDED`}),` (`,_jsx(_components.code,{children:`403`}),`): o armazenamento de blob da conta está suspenso, ou o plano expirou. Uploads e outras gravações são recusados desde o início do período de carência 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`}),` (abaixo do Enterprise-12) ou `,_jsx(_components.code,{children:`cache_control: no-cache`}),` (abaixo do Enterprise-26) não está incluído no plano.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_UPLOAD_TOKEN_CONSTRAINT`}),` (`,_jsx(_components.code,{children:`403`}),`): somente com token de upload: o caminho, a pasta ou outra opção fixada pelo token não confere com a requisição.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_UPLOAD_TOKEN_EXHAUSTED`}),` (`,_jsx(_components.code,{children:`401`}),`): somente com token de upload: ele já usou todos os seus usos.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`RATE_LIMIT_EXCEEDED`}),` (`,_jsx(_components.code,{children:`429`}),`): abaixo do Enterprise-12, os uploads são limitados a 1 por segundo. `,_jsx(_components.code,{children:`details.retry_after`}),` informa a 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":"Enviar objeto de blob em uma única requisição","sidebarTitle":"Enviar objeto","api":"POST https://blob.vertracloud.app/v1/objects","authMethod":"bearer","description":"Envia um arquivo de até 100 MB em uma única requisição multipart e o armazena em um caminho. Aceita um token de upload.","href":"/pt-br/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:[`Envia um arquivo de até 100 MB em uma única requisição `,_jsx(_components.code,{children:`multipart/form-data`}),` e o armazena em `,_jsx(_components.code,{children:`path`}),`. Para arquivos maiores, use `,_jsx(_components.a,{href:`/pt-br/api-reference/endpoint/blob/uploads/create`,children:`Iniciar um upload direto`}),`. Responde com `,_jsx(_components.code,{children:`201`}),` e o novo objeto.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Escopo:`}),` `,_jsx(_components.code,{children:`blob:write`}),`. Aceita um token de upload.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Token de upload:`}),` esta rota também aceita um token de upload (`,_jsx(_components.code,{children:`Authorization: Bearer vcup_...`}),`) no lugar de uma chave de API.`]}),`\n`,_jsx(ParamField,{query:`path`,type:`string`,required:true,id:`param-path`,children:_jsxs(_components.p,{children:[`Caminho de destino na conta. De 1 a 1024 caracteres, até 16 segmentos de `,_jsx(_components.code,{children:`[A-Za-z0-9._ -]`}),` (de 1 a 255 caracteres cada), sem `,_jsx(_components.code,{children:`/`}),` no início ou no fim, sem `,_jsx(_components.code,{children:`//`}),` nem `,_jsx(_components.code,{children:`..`}),`, e é obrigatória uma extensão. Caminhos recusados retornam `,_jsx(_components.code,{children:`VALIDATION_ERROR`}),`; eles nunca são alterados em silêncio.`]})}),`\n`,_jsx(ParamField,{query:`visibility`,type:`string`,id:`param-visibility`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`public`}),` ou `,_jsx(_components.code,{children:`private`}),`. Padrão `,_jsx(_components.code,{children:`private`}),`.`]})}),`\n`,_jsx(ParamField,{query:`overwrite`,type:`boolean`,id:`param-overwrite`,children:_jsxs(_components.p,{children:[`Substitui um objeto que já existe em `,_jsx(_components.code,{children:`path`}),`. Padrão `,_jsx(_components.code,{children:`false`}),`: um caminho ocupado retorna `,_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:[`Quando `,_jsx(_components.code,{children:`path`}),` está ocupado, salva o arquivo como `,_jsx(_components.code,{children:`nome-1.ext`}),`, `,_jsx(_components.code,{children:`nome-2.ext`}),` e assim por diante (o primeiro nome livre), em vez de retornar `,_jsx(_components.code,{children:`BLOB_OBJECT_ALREADY_EXISTS`}),`. A resposta traz o `,_jsx(_components.code,{children:`path`}),` final. Padrão `,_jsx(_components.code,{children:`false`}),`. Não pode ser combinado com `,_jsx(_components.code,{children:`overwrite`}),` e não tem efeito com um token de upload que fixa o `,_jsx(_components.code,{children:`path`}),`.`]})}),`\n`,_jsx(ParamField,{query:`random_suffix`,type:`boolean`,id:`param-random-suffix`,children:_jsxs(_components.p,{children:[`Insere `,_jsx(_components.code,{children:`-`}),` seguido de 10 caracteres aleatórios em base 36 antes da extensão. Padrão `,_jsx(_components.code,{children:`false`}),`. Forçado para `,_jsx(_components.code,{children:`true`}),` em um token de upload sem `,_jsx(_components.code,{children:`path`}),` fixo.`]})}),`\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>`}),` ou `,_jsx(_components.code,{children:`no-cache`}),` (Enterprise-26 ou superior). Padrão: nenhum valor definido.`]})}),`\n`,_jsx(ParamField,{query:`content_disposition`,type:`string`,id:`param-content-disposition`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`inline`}),` ou `,_jsx(_components.code,{children:`attachment`}),`. Padrão: `,_jsx(_components.code,{children:`inline`}),`. Arquivos com extensão `,_jsx(_components.code,{children:`.html`}),`, `,_jsx(_components.code,{children:`.htm`}),`, `,_jsx(_components.code,{children:`.svg`}),`, `,_jsx(_components.code,{children:`.xml`}),` ou `,_jsx(_components.code,{children:`.xhtml`}),` são sempre servidos como `,_jsx(_components.code,{children:`attachment`}),`.`]})}),`\n`,_jsx(ParamField,{query:`filename`,type:`string`,id:`param-filename`,children:_jsxs(_components.p,{children:[`Nome sugerido quando o arquivo é baixado. Padrão: o ú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:`Timestamp ISO 8601 de quando o objeto é excluído. Precisa ser pelo menos o mínimo do plano a partir de agora (7 dias, ou 1 hora no Enterprise-26 ou superior).`})}),`\n`,_jsx(ParamField,{query:`metadata`,type:`string`,id:`param-metadata`,children:_jsxs(_components.p,{children:[`Objeto JSON, codificado em URL: até 5 chaves, cada uma `,_jsx(_components.code,{children:`[a-z0-9-]{1,64}`}),`, 512 bytes no total. Enterprise-12 ou superior.`]})}),`\n`,_jsx(ParamField,{query:`checksum_sha256`,type:`string`,id:`param-checksum-sha256`,children:_jsxs(_components.p,{children:[`SHA-256 do arquivo em hexadecimal. Se não bater, retorna `,_jsx(_components.code,{children:`BLOB_CHECKSUM_MISMATCH`}),` e nada é armazenado.`]})}),`\n`,_jsx(ParamField,{query:`workspace_id`,type:`string`,id:`param-workspace-id`,children:_jsxs(_components.p,{children:[`O ID do workspace, quando o blob pertence a um workspace. A chamada atua sobre o blob do proprietário do workspace e exige a permissão `,_jsx(_components.code,{children:`blob:read`}),` do workspace (`,_jsx(_components.code,{children:`blob:manage`}),` nas rotas que alteram dados). Deixe de fora para atuar sobre o seu próprio blob.`]})}),`\n`,_jsx(ParamField,{body:`file`,type:`file`,required:true,id:`param-file`,children:_jsxs(_components.p,{children:[`O arquivo, como única parte do `,_jsx(_components.code,{children:`multipart/form-data`}),`. Até 100 MB; vale o limite do plano.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`exemplo-de-requisição`,children:`Exemplo de requisição`}),`\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:`resposta`,children:`Resposta`}),`\n`,_jsxs(ResponseField,{name:`response`,type:`object`,id:`param-response`,children:[_jsxs(_components.p,{children:[`O objeto armazenado. Responde com `,_jsx(_components.code,{children:`201`}),`.`]}),_jsxs(Expandable,{title:`propriedades`,children:[_jsx(ResponseField,{name:`id`,type:`string`,id:`param-id`,children:`ID estável do objeto. Nunca muda, mesmo quando o caminho, a visibilidade ou a expiração mudam.`}),_jsxs(ResponseField,{name:`path`,type:`string`,id:`param-path-1`,children:[`Caminho completo dentro da conta, por exemplo `,_jsx(_components.code,{children:`images/avatars/joao.png`}),`.`]}),_jsx(ResponseField,{name:`size`,type:`number`,id:`param-size`,children:`Tamanho em bytes.`}),_jsx(ResponseField,{name:`content_type`,type:`string`,id:`param-content-type`,children:`Tipo MIME, derivado no servidor a partir da extensão do arquivo.`}),_jsx(ResponseField,{name:`etag`,type:`string`,id:`param-etag`,children:`Entity tag do conteúdo armazenado.`}),_jsxs(ResponseField,{name:`sha256`,type:`string | null`,id:`param-sha256`,children:[`SHA-256 do conteúdo em hexadecimal, quando o upload enviou um checksum. `,_jsx(_components.code,{children:`null`}),` caso contrário.`]}),_jsxs(ResponseField,{name:`visibility`,type:`string`,id:`param-visibility-1`,children:[_jsx(_components.code,{children:`public`}),` (legível pela URL pública) ou `,_jsx(_components.code,{children:`private`}),` (precisa de um link temporário ou de um compartilhamento).`]}),_jsxs(ResponseField,{name:`url`,type:`string | null`,id:`param-url`,children:[`URL pública. `,_jsx(_components.code,{children:`null`}),` enquanto o objeto é 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>`}),` ou `,_jsx(_components.code,{children:`no-cache`}),` (`,_jsx(_components.code,{children:`no-cache`}),` exige Enterprise-26 ou superior). `,_jsx(_components.code,{children:`null`}),` significa o padrão.`]}),_jsxs(ResponseField,{name:`content_disposition`,type:`string`,id:`param-content-disposition-1`,children:[_jsx(_components.code,{children:`inline`}),` (exibido pelo navegador) ou `,_jsx(_components.code,{children:`attachment`}),` (baixado). HTML, SVG e XML são sempre `,_jsx(_components.code,{children:`attachment`}),`.`]}),_jsxs(ResponseField,{name:`filename`,type:`string | null`,id:`param-filename-1`,children:[`Nome sugerido no download. `,_jsx(_components.code,{children:`null`}),` usa o último segmento de `,_jsx(_components.code,{children:`path`}),`.`]}),_jsxs(ResponseField,{name:`metadata`,type:`object`,id:`param-metadata-1`,children:[`Até 5 chaves, cada uma `,_jsx(_components.code,{children:`[a-z0-9-]{1,64}`}),`, 512 bytes no total. Enterprise-12 ou superior; `,_jsx(_components.code,{children:`{}`}),` nos demais planos.`]}),_jsxs(ResponseField,{name:`expires_at`,type:`string | null`,id:`param-expires-at-1`,children:[`Quando o objeto é excluído, em timestamp ISO 8601. `,_jsx(_components.code,{children:`null`}),` significa sem expiração.`]}),_jsx(ResponseField,{name:`created_at`,type:`string`,id:`param-created-at`,children:`Data de criação em ISO 8601.`}),_jsx(ResponseField,{name:`updated_at`,type:`string`,id:`param-updated-at`,children:`Data da última alteração em ISO 8601.`})]})]}),`\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:`respostas-de-erro`,children:`Respostas de erro`}),`\n`,_jsxs(ResponseField,{name:`code`,type:`string`,id:`param-code`,children:[_jsx(_components.p,{children:`O código de erro que indica o motivo da falha. Valores possíveis:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`AUTH_TOKEN_MISSING`}),` (`,_jsx(_components.code,{children:`401`}),`): o cabeçalho `,_jsx(_components.code,{children:`Authorization`}),` não foi enviado.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`API_KEY_INVALID`}),` (`,_jsx(_components.code,{children:`401`}),`): a chave de API não existe, foi revogada ou o segredo não confere.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`API_KEY_SCOPE_DENIED`}),` (`,_jsx(_components.code,{children:`403`}),`): a chave não tem o escopo que esta rota exige (`,_jsx(_components.code,{children:`blob:read`}),` ou `,_jsx(_components.code,{children:`blob:write`}),`); `,_jsx(_components.code,{children:`details.required`}),` informa qual.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`WORKSPACE_PERMISSION_DENIED`}),` (`,_jsx(_components.code,{children:`403`}),`): somente com `,_jsx(_components.code,{children:`workspace_id`}),`: você não é membro, ou o seu papel não tem a permissão de blob.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`WORKSPACE_NOT_FOUND`}),` (`,_jsx(_components.code,{children:`404`}),`): somente com `,_jsx(_components.code,{children:`workspace_id`}),`: não existe workspace com esse ID, ou você não é membro.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_UPLOAD_TOKEN_INVALID`}),` (`,_jsx(_components.code,{children:`401`}),`): o token de upload não existe, expirou ou foi revogado (somente com token de upload).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_CHECKSUM_MISMATCH`}),` (`,_jsx(_components.code,{children:`400`}),`): o `,_jsx(_components.code,{children:`checksum_sha256`}),` não confere com o arquivo. Nada foi armazenado.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`VALIDATION_ERROR`}),` (`,_jsx(_components.code,{children:`400`}),`): um parâmetro de consulta falhou na validação, por exemplo um `,_jsx(_components.code,{children:`path`}),` inválido. `,_jsx(_components.code,{children:`details.path`}),` informa qual.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_OBJECT_ALREADY_EXISTS`}),` (`,_jsx(_components.code,{children:`409`}),`): `,_jsx(_components.code,{children:`path`}),` está ocupado e `,_jsx(_components.code,{children:`overwrite`}),` não é `,_jsx(_components.code,{children:`true`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_FILE_TOO_LARGE`}),` (`,_jsx(_components.code,{children:`413`}),`): o arquivo tem mais de 100 MB, o limite do plano para esta rota, ou o `,_jsx(_components.code,{children:`max_size`}),` da regra ou do token.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`STORAGE_QUOTA_EXCEEDED`}),` (`,_jsx(_components.code,{children:`403`}),`): armazenar o arquivo ultrapassaria a cota de blob do plano.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOCKED_FILE_TYPE`}),` (`,_jsx(_components.code,{children:`422`}),`): a extensão está bloqueada, não é permitida pela regra da pasta ou pelo token, ou o arquivo é um executável.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_NAMESPACE_SUSPENDED`}),` (`,_jsx(_components.code,{children:`403`}),`): o armazenamento de blob da conta está suspenso, ou o plano expirou. Uploads e outras gravações são recusados desde o início do período de carência 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`}),` (abaixo do Enterprise-12) ou `,_jsx(_components.code,{children:`cache_control: no-cache`}),` (abaixo do Enterprise-26) não está incluído no plano.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_UPLOAD_TOKEN_CONSTRAINT`}),` (`,_jsx(_components.code,{children:`403`}),`): somente com token de upload: o caminho, a pasta ou outra opção fixada pelo token não confere com a requisição.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`BLOB_UPLOAD_TOKEN_EXHAUSTED`}),` (`,_jsx(_components.code,{children:`401`}),`): somente com token de upload: ele já usou todos os seus usos.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`RATE_LIMIT_EXCEEDED`}),` (`,_jsx(_components.code,{children:`429`}),`): abaixo do Enterprise-12, os uploads são limitados a 1 por segundo. `,_jsx(_components.code,{children:`details.retry_after`}),` informa a 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":"Enviar objeto de blob em uma única requisição","sidebarTitle":"Enviar objeto","api":"POST https://blob.vertracloud.app/v1/objects","authMethod":"bearer","description":"Envia um arquivo de até 100 MB em uma única requisição multipart e o armazena em um caminho. Aceita um token de upload.","href":"/pt-br/api-reference/endpoint/blob/objects/upload"}}}},"mdxExtracts":{"tableOfContents":[{"title":"Exemplo de requisição","slug":"exemplo-de-requisição","depth":3,"children":[]},{"title":"Resposta","slug":"resposta","depth":3,"children":[]},{"title":"Respostas de erro","slug":"respostas-de-erro","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":"Enviar objeto de blob em uma única requisição","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":"Caminho de destino na conta. De 1 a 1024 caracteres, até 16 segmentos de `[A-Za-z0-9._ -]` (de 1 a 255 caracteres cada), sem `/` no início ou no fim, sem `//` nem `..` , e é obrigatória uma extensão. Caminhos recusados retornam `VALIDATION_ERROR` ; eles nunca são alterados em silêncio.","required":true}]},"visibility":{"schema":[{"type":"string","description":"`public` ou `private` . Padrão `private` ."}]},"overwrite":{"schema":[{"type":"boolean","description":"Substitui um objeto que já existe em `path` . Padrão `false` : um caminho ocupado retorna `BLOB_OBJECT_ALREADY_EXISTS` ."}]},"rename_on_conflict":{"schema":[{"type":"boolean","description":"Quando `path` está ocupado, salva o arquivo como `nome-1.ext` , `nome-2.ext` e assim por diante (o primeiro nome livre), em vez de retornar `BLOB_OBJECT_ALREADY_EXISTS` . A resposta traz o `path` final. Padrão `false` . Não pode ser combinado com `overwrite` e não tem efeito com um token de upload que fixa o `path` ."}]},"random_suffix":{"schema":[{"type":"boolean","description":"Insere `-` seguido de 10 caracteres aleatórios em base 36 antes da extensão. Padrão `false` . Forçado para `true` em um token de upload sem `path` fixo."}]},"cache_control":{"schema":[{"type":"string","description":"`immutable` , `max-age=\u003cseconds>` ou `no-cache` (Enterprise-26 ou superior). Padrão: nenhum valor definido."}]},"content_disposition":{"schema":[{"type":"string","description":"`inline` ou `attachment` . Padrão: `inline` . Arquivos com extensão `.html` , `.htm` , `.svg` , `.xml` ou `.xhtml` são sempre servidos como `attachment` ."}]},"filename":{"schema":[{"type":"string","description":"Nome sugerido quando o arquivo é baixado. Padrão: o último segmento de `path` ."}]},"expires_at":{"schema":[{"type":"string","description":"Timestamp ISO 8601 de quando o objeto é excluído. Precisa ser pelo menos o mínimo do plano a partir de agora (7 dias, ou 1 hora no Enterprise-26 ou superior)."}]},"metadata":{"schema":[{"type":"string","description":"Objeto JSON, codificado em URL: até 5 chaves, cada uma `[a-z0-9-]{1,64}` , 512 bytes no total. Enterprise-12 ou superior."}]},"checksum_sha256":{"schema":[{"type":"string","description":"SHA-256 do arquivo em hexadecimal. Se não bater, retorna `BLOB_CHECKSUM_MISMATCH` e nada é armazenado."}]},"workspace_id":{"schema":[{"type":"string","description":"O ID do workspace, quando o blob pertence a um workspace. A chamada atua sobre o blob do proprietário do workspace e exige a permissão `blob:read` do workspace ( `blob:manage` nas rotas que alteram dados). Deixe de fora para atuar sobre o seu próprio blob."}]}},"header":{},"cookie":{},"path":{}},"body":{"application/json":{"schemaArray":[{"type":"object","properties":{"file":[{"type":"file","description":"O arquivo, como única parte do `multipart/form-data` . Até 100 MB; vale o limite do plano.","required":true}]}}],"examples":{"example":{"value":{}}}}}},"response":{"200":{"application/json":{"schemaArray":[{"type":"object","properties":{"response":[{"type":"object","properties":{"id":[{"type":"string","description":"ID estável do objeto. Nunca muda, mesmo quando o caminho, a visibilidade ou a expiração mudam."}],"path":[{"type":"string","description":"Caminho completo dentro da conta, por exemplo `images/avatars/joao.png` ."}],"size":[{"type":"number","description":"Tamanho em bytes."}],"content_type":[{"type":"string","description":"Tipo MIME, derivado no servidor a partir da extensão do arquivo."}],"etag":[{"type":"string","description":"Entity tag do conteúdo armazenado."}],"sha256":[{"type":"object","properties":{},"description":"SHA-256 do conteúdo em hexadecimal, quando o upload enviou um checksum. `null` caso contrário."}],"visibility":[{"type":"string","description":"`public` (legível pela URL pública) ou `private` (precisa de um link temporário ou de um compartilhamento)."}],"url":[{"type":"object","properties":{},"description":"URL pública. `null` enquanto o objeto é privado."}],"cache_control":[{"type":"object","properties":{},"description":"`immutable` , `max-age=\u003cseconds>` ou `no-cache` ( `no-cache` exige Enterprise-26 ou superior). `null` significa o padrão."}],"content_disposition":[{"type":"string","description":"`inline` (exibido pelo navegador) ou `attachment` (baixado). HTML, SVG e XML são sempre `attachment` ."}],"filename":[{"type":"object","properties":{},"description":"Nome sugerido no download. `null` usa o último segmento de `path` ."}],"metadata":[{"type":"object","properties":{},"description":"Até 5 chaves, cada uma `[a-z0-9-]{1,64}` , 512 bytes no total. Enterprise-12 ou superior; `{}` nos demais planos."}],"expires_at":[{"type":"object","properties":{},"description":"Quando o objeto é excluído, em timestamp ISO 8601. `null` significa sem expiração."}],"created_at":[{"type":"string","description":"Data de criação em ISO 8601."}],"updated_at":[{"type":"string","description":"Data da última alteração em ISO 8601."}]},"description":"O objeto armazenado. Responde com `201` ."}],"code":[{"type":"string","description":"O código de erro que indica o motivo da falha. Valores possíveis: `AUTH_TOKEN_MISSING` ( `401` ): o cabeçalho `Authorization` não foi enviado. `API_KEY_INVALID` ( `401` ): a chave de API não existe, foi revogada ou o segredo não confere. `API_KEY_SCOPE_DENIED` ( `403` ): a chave não tem o escopo que esta rota exige ( `blob:read` ou `blob:write` ); `details.required` informa qual. `WORKSPACE_PERMISSION_DENIED` ( `403` ): somente com `workspace_id` : você não é membro, ou o seu papel não tem a permissão de blob. `WORKSPACE_NOT_FOUND` ( `404` ): somente com `workspace_id` : não existe workspace com esse ID, ou você não é membro. `BLOB_UPLOAD_TOKEN_INVALID` ( `401` ): o token de upload não existe, expirou ou foi revogado (somente com token de upload). `BLOB_CHECKSUM_MISMATCH` ( `400` ): o `checksum_sha256` não confere com o arquivo. Nada foi armazenado. `VALIDATION_ERROR` ( `400` ): um parâmetro de consulta falhou na validação, por exemplo um `path` inválido. `details.path` informa qual. `BLOB_OBJECT_ALREADY_EXISTS` ( `409` ): `path` está ocupado e `overwrite` não é `true` . `BLOB_FILE_TOO_LARGE` ( `413` ): o arquivo tem mais de 100 MB, o limite do plano para esta rota, ou o `max_size` da regra ou do token. `STORAGE_QUOTA_EXCEEDED` ( `403` ): armazenar o arquivo ultrapassaria a cota de blob do plano. `BLOCKED_FILE_TYPE` ( `422` ): a extensão está bloqueada, não é permitida pela regra da pasta ou pelo token, ou o arquivo é um executável. `BLOB_NAMESPACE_SUSPENDED` ( `403` ): o armazenamento de blob da conta está suspenso, ou o plano expirou. Uploads e outras gravações são recusados desde o início do período de carência de 72 horas. `PLAN_RESTRICTED_FEATURE` ( `403` ): `metadata` (abaixo do Enterprise-12) ou `cache_control: no-cache` (abaixo do Enterprise-26) não está incluído no plano. `BLOB_UPLOAD_TOKEN_CONSTRAINT` ( `403` ): somente com token de upload: o caminho, a pasta ou outra opção fixada pelo token não confere com a requisição. `BLOB_UPLOAD_TOKEN_EXHAUSTED` ( `401` ): somente com token de upload: ele já usou todos os seus usos. `RATE_LIMIT_EXCEEDED` ( `429` ): abaixo do Enterprise-12, os uploads são limitados a 1 por segundo. `details.retry_after` informa a 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":"Enviar objeto de blob em uma única requisição - Vertra Cloud","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/api-reference/endpoint/blob/objects/upload","matchLevel":1},"pt-BR":{"href":"/pt-br/api-reference/endpoint/blob/objects/upload","matchLevel":0},"es":{"href":"/es-es","matchLevel":4}}},"lastModified":"2026-10-30T22:45:17.766Z","gitLastModified":"2026-10-28T22:06:31.000Z","originalFileLocation":"pt-br/api-reference/endpoint/blob/objects/upload.mdx","locale":"pt-BR"},"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=\"Envia um arquivo de até 100 MB em uma única requisição multipart e o armazena em um caminho. Aceita um token de upload.\">\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=\"Enviar objeto de blob em uma única requisição - Vertra Cloud\">\u003cmeta data-mint-head property=\"og:description\" content=\"Envia um arquivo de até 100 MB em uma única requisição multipart e o armazena em um caminho. Aceita um token de upload.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Vertra Cloud Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.vertracloud.app/pt-br/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=\"Enviar objeto de blob em uma única requisição - Vertra Cloud\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Envia um arquivo de até 100 MB em uma única requisição multipart e o armazena em um caminho. Aceita um token de upload.\">\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/pt-br/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=\"/pt-br/api-reference/endpoint/blob/objects/upload.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://docs.vertracloud.app/pt-br/api-reference/endpoint/blob/objects/upload\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.vertracloud.app/api-reference/endpoint/blob/objects/upload\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.vertracloud.app/api-reference/endpoint/blob/objects/upload\">\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/pt-br/api-reference/endpoint/blob/objects/upload#webpage\",\"url\":\"https://docs.vertracloud.app/pt-br/api-reference/endpoint/blob/objects/upload\",\"name\":\"Enviar objeto de blob em uma única requisição\",\"description\":\"Envia um arquivo de até 100 MB em uma única requisição multipart e o armazena em um caminho. Aceita um token de upload.\",\"dateModified\":\"2026-10-28T22:06:31.000Z\",\"isPartOf\":{\"@id\":\"https://docs.vertracloud.app#website\"},\"breadcrumb\":{\"@id\":\"https://docs.vertracloud.app/pt-br/api-reference/endpoint/blob/objects/upload#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.vertracloud.app/pt-br/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\":\"Enviar objeto de blob em uma única requisição\",\"item\":\"https://docs.vertracloud.app/pt-br/api-reference/endpoint/blob/objects/upload\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.vertracloud.app/pt-br/api-reference/endpoint/blob/objects/upload#apireference\",\"headline\":\"Enviar objeto de blob em uma única requisição\",\"name\":\"Enviar objeto de blob em uma única requisição\",\"description\":\"Envia um arquivo de até 100 MB em uma única requisição multipart e o armazena em um caminho. Aceita um token de upload.\",\"url\":\"https://docs.vertracloud.app/pt-br/api-reference/endpoint/blob/objects/upload\",\"mainEntityOfPage\":{\"@id\":\"https://docs.vertracloud.app/pt-br/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":"/api-reference/endpoint/blob/objects/upload"}]},{"language":"pt-BR","navbar":{"links":[{"href":"mailto:[email protected]","label":"Suporte"}],"primary":{"type":"button","label":"Dashboard","href":"https://vertracloud.app/dashboard"}},"tabs":[{"tab":"Primeiros passos","pages":[{"title":"Primeiros passos","href":"/pt-br"}]},{"tab":"Recursos","pages":[{"title":"Recursos","href":"/pt-br/applications"}]},{"tab":"Tutoriais","pages":[{"title":"Tutoriais","href":"/pt-br/tutorials/introduction"}]},{"tab":"Guias","pages":[{"title":"Guias","href":"/pt-br/guides/custom-domain"}]},{"tab":"Ferramentas","pages":[{"title":"Ferramentas","href":"/pt-br/cli"}]},{"tab":"Blob Storage","groups":[{"group":"Blob Storage","icon":"folder-open","pages":[{"title":"Vertra Blob Storage: armazenamento de arquivos com CDN global","sidebarTitle":"Visão geral","icon":"folder-open","href":"/pt-br/blob/overview"},{"title":"Quickstart do Blob Storage: envie e sirva seu primeiro arquivo","sidebarTitle":"Quickstart","icon":"rocket","href":"/pt-br/blob/quickstart"},{"title":"Autenticação do Blob Storage: chaves de API, tokens de upload e workspaces","sidebarTitle":"Autenticação","icon":"key","href":"/pt-br/blob/authentication"},{"title":"Envie arquivos para o Blob Storage: simples, direto e multipart","sidebarTitle":"Uploads","icon":"upload","href":"/pt-br/blob/uploads"},{"title":"Links do Blob Storage: URLs públicas, links temporários e visibilidade","sidebarTitle":"Links e visibilidade","icon":"link","href":"/pt-br/blob/links-and-visibility"},{"title":"Compartilhe arquivos do Blob Storage com expiração, senha e limite de downloads","sidebarTitle":"Compartilhamento","icon":"share-nodes","href":"/pt-br/blob/sharing"},{"title":"Regras de pasta do Blob Storage: padrões e limites por pasta","sidebarTitle":"Regras de pasta","icon":"folder-tree","href":"/pt-br/blob/folder-rules"},{"title":"Redimensione e converta imagens na hora com o Blob Storage","sidebarTitle":"Transformações de imagem","icon":"image","href":"/pt-br/blob/image-transformations"},{"title":"Use o Blob Storage com aws-cli, rclone e boto3 (compatível com S3)","sidebarTitle":"Compatibilidade com S3","icon":"plug","href":"/pt-br/blob/s3-compatibility"},{"title":"Sirva arquivos do Blob Storage pelo seu próprio domínio","sidebarTitle":"Domínios personalizados","icon":"globe","href":"/pt-br/blob/custom-domains"},{"title":"Limites, cotas e recursos por plano do Blob Storage","sidebarTitle":"Limites e cotas","icon":"gauge","href":"/pt-br/blob/limits-and-quotas"},{"title":"SDK JavaScript do Blob Storage (@vertracloud/blob)","sidebarTitle":"SDK JavaScript","icon":"js","href":"/pt-br/blob/sdk-javascript"},{"title":"Blob Storage nos SDKs Python e Go","sidebarTitle":"SDKs Python e Go","icon":"code","href":"/pt-br/blob/sdk-python-go"},{"title":"Referência da API do Blob Storage","sidebarTitle":"Referência da API","description":"Endpoints REST do Blob Storage em blob.vertracloud.app: objetos, uploads multipart, links de compartilhamento, regras de pasta, conta e domínios.","icon":"code","href":"/pt-br/blob/api-reference"}]},{"group":"Referência da API do Blob","icon":"plug","pages":[{"group":"Objetos","pages":[{"title":"Enviar objeto de blob em uma única requisição","sidebarTitle":"Enviar objeto","api":"POST https://blob.vertracloud.app/v1/objects","href":"/pt-br/api-reference/endpoint/blob/objects/upload"},{"title":"Listar objetos de blob em uma pasta","sidebarTitle":"Listar objetos","api":"GET https://blob.vertracloud.app/v1/objects","description":"Lista os objetos de blob da conta por prefixo de caminho, com as pastas e um cursor para a próxima página. Retorna até 1.000 objetos por chamada.","href":"/pt-br/api-reference/endpoint/blob/objects/list"},{"title":"Obter objeto de blob pelo ID","sidebarTitle":"Obter objeto","api":"GET https://blob.vertracloud.app/v1/objects/{object_id}","href":"/pt-br/api-reference/endpoint/blob/objects/get"},{"title":"Atualizar configurações de um objeto de blob","sidebarTitle":"Atualizar objeto","api":"PATCH https://blob.vertracloud.app/v1/objects/{object_id}","href":"/pt-br/api-reference/endpoint/blob/objects/update"},{"title":"Atualizar vários objetos de blob de uma vez","sidebarTitle":"Atualizar vários objetos","api":"PATCH https://blob.vertracloud.app/v1/objects","href":"/pt-br/api-reference/endpoint/blob/objects/update-many"},{"title":"Copiar ou mover um objeto de blob","sidebarTitle":"Copiar ou mover objeto","api":"POST https://blob.vertracloud.app/v1/objects/copy","href":"/pt-br/api-reference/endpoint/blob/objects/copy"},{"title":"Excluir objeto de blob pelo ID","sidebarTitle":"Excluir objeto","api":"DELETE https://blob.vertracloud.app/v1/objects/{object_id}","href":"/pt-br/api-reference/endpoint/blob/objects/delete"},{"title":"Excluir vários objetos de blob ou uma pasta","sidebarTitle":"Excluir vários objetos","api":"DELETE https://blob.vertracloud.app/v1/objects","href":"/pt-br/api-reference/endpoint/blob/objects/delete-many"},{"title":"Obter link temporário de download de um objeto de blob","sidebarTitle":"Baixar objeto","api":"GET https://blob.vertracloud.app/v1/objects/{object_id}/download","href":"/pt-br/api-reference/endpoint/blob/objects/download"}]},{"group":"Uploads","pages":[{"title":"Iniciar um upload direto para o Blob","sidebarTitle":"Iniciar upload direto","api":"POST https://blob.vertracloud.app/v1/uploads","href":"/pt-br/api-reference/endpoint/blob/uploads/create"},{"title":"Listar uploads do Blob em andamento","sidebarTitle":"Listar uploads","api":"GET https://blob.vertracloud.app/v1/uploads","href":"/pt-br/api-reference/endpoint/blob/uploads/list"},{"title":"Obter o status de um upload do Blob para retomar","sidebarTitle":"Obter status do upload","api":"GET https://blob.vertracloud.app/v1/uploads/{upload_id}","href":"/pt-br/api-reference/endpoint/blob/uploads/get"},{"title":"Obter URLs das partes de um upload multipart","sidebarTitle":"Obter URLs das partes","api":"POST https://blob.vertracloud.app/v1/uploads/{upload_id}/parts","href":"/pt-br/api-reference/endpoint/blob/uploads/parts"},{"title":"Concluir um upload direto para o Blob","sidebarTitle":"Concluir upload","api":"POST https://blob.vertracloud.app/v1/uploads/{upload_id}/complete","href":"/pt-br/api-reference/endpoint/blob/uploads/complete"},{"title":"Abortar um upload direto para o Blob","sidebarTitle":"Abortar upload","api":"DELETE https://blob.vertracloud.app/v1/uploads/{upload_id}","href":"/pt-br/api-reference/endpoint/blob/uploads/abort"}]},{"group":"Links de compartilhamento","pages":[{"title":"Criar um link de compartilhamento para um objeto do Blob","sidebarTitle":"Criar compartilhamento","api":"POST https://blob.vertracloud.app/v1/shares","href":"/pt-br/api-reference/endpoint/blob/shares/create"},{"title":"Listar links de compartilhamento","sidebarTitle":"Listar compartilhamentos","api":"GET https://blob.vertracloud.app/v1/shares","href":"/pt-br/api-reference/endpoint/blob/shares/list"},{"title":"Revogar um link de compartilhamento","sidebarTitle":"Revogar compartilhamento","api":"DELETE https://blob.vertracloud.app/v1/shares/{share_id}","href":"/pt-br/api-reference/endpoint/blob/shares/revoke"}]},{"group":"Regras de pasta","pages":[{"title":"Obter regras de pasta e ETag","sidebarTitle":"Obter regras","api":"GET https://blob.vertracloud.app/v1/rules","href":"/pt-br/api-reference/endpoint/blob/rules/get"},{"title":"Substituir todas as regras de pasta","sidebarTitle":"Substituir regras","api":"PUT https://blob.vertracloud.app/v1/rules","href":"/pt-br/api-reference/endpoint/blob/rules/replace"},{"title":"Criar ou atualizar uma regra de pasta","sidebarTitle":"Criar ou atualizar regra","api":"PUT https://blob.vertracloud.app/v1/rules/{prefix}","href":"/pt-br/api-reference/endpoint/blob/rules/put"},{"title":"Excluir uma regra de pasta","sidebarTitle":"Excluir regra","api":"DELETE https://blob.vertracloud.app/v1/rules/{prefix}","href":"/pt-br/api-reference/endpoint/blob/rules/delete"}]},{"group":"Conta","pages":[{"title":"Obter uso do armazenamento de blob e limites do plano","sidebarTitle":"Uso e limites","api":"GET https://blob.vertracloud.app/v1/stats","href":"/pt-br/api-reference/endpoint/blob/account/stats"},{"title":"Criar um token de upload para uploads no navegador","sidebarTitle":"Criar token de upload","api":"POST https://blob.vertracloud.app/v1/upload-tokens","href":"/pt-br/api-reference/endpoint/blob/account/upload-tokens"},{"title":"Obter credenciais compatíveis com S3 para o armazenamento de blob","sidebarTitle":"Credenciais S3","api":"GET https://blob.vertracloud.app/v1/s3/credentials","href":"/pt-br/api-reference/endpoint/blob/account/s3-credentials"}]},{"group":"Domínios personalizados","pages":[{"title":"Listar domínios personalizados do armazenamento de blob","sidebarTitle":"Listar domínios","api":"GET https://blob.vertracloud.app/v1/domains","href":"/pt-br/api-reference/endpoint/blob/domains/list"},{"title":"Adicionar um domínio personalizado para o armazenamento de blob","sidebarTitle":"Adicionar domínio","api":"POST https://blob.vertracloud.app/v1/domains","href":"/pt-br/api-reference/endpoint/blob/domains/add"},{"title":"Atualizar um domínio personalizado de blob","sidebarTitle":"Atualizar domínio","api":"PATCH https://blob.vertracloud.app/v1/domains/{domain_id}","href":"/pt-br/api-reference/endpoint/blob/domains/update"},{"title":"Verificar um domínio personalizado de blob","sidebarTitle":"Verificar domínio","api":"POST https://blob.vertracloud.app/v1/domains/{domain_id}/verify","href":"/pt-br/api-reference/endpoint/blob/domains/verify"},{"title":"Excluir um domínio personalizado de blob","sidebarTitle":"Excluir domínio","api":"DELETE https://blob.vertracloud.app/v1/domains/{domain_id}","href":"/pt-br/api-reference/endpoint/blob/domains/delete"}]}]}]},{"tab":"Templates","pages":[{"title":"Templates","href":"/pt-br/templates/overview"}]},{"tab":"Referência da API","pages":[{"title":"Referência da API","href":"/pt-br/api-reference/introduction"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/pt-br/changelog"}]}],"global":{"anchors":[{"anchor":"Documentação","icon":"book-open-cover","href":"https://docs.vertracloud.app/pt-br"},{"anchor":"Discord","icon":"discord","href":"https://discord.gg/vertracloud"},{"anchor":"Status","icon":"heart-pulse","href":"https://status.vertracloud.app"}]}},{"language":"es","navbar":{"links":[{"href":"mailto:[email protected]","label":"Soporte"}],"primary":{"type":"button","label":"Panel","href":"https://vertracloud.app/dashboard"}},"pages":[{"title":"es","href":"/es-es"}]}]},"basePath":"","title":"Enviar objeto de blob em uma única requisição - 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"]}