Document Wake - visão geral
O Storefront API permite consultar e manter os documents da loja — dados estruturados próprios, definidos pelo lojista e validados por um JSON Schema — diretamente pelo GraphQL, sem passar pela API Pública.
O recurso é composto por dois conceitos:
- Entidade de document — a definição do dado: o nome da entidade, o
schemaque descreve o formato dos documents e as permissões de acesso público; - Document — o dado em si, gravado em JSON e validado contra o
schemada entidade. - Arquivo do document — imagem ou PDF anexado ao document. Fica fora do JSON e não é validado contra o
schema. - Vínculo do document — um document pode ser vinculado a um carrinho ou a um produto do carrinho. Quando o pedido é finalizado, o vínculo passa para o pedido. Veja Vínculo com carrinho e pedido.
Pelo Storefront API são expostos apenas os documents. A criação e a manutenção das entidades são feitas pela API Pública — veja Document Wake na seção API Pública.
Operações disponíveis
| Operação | Tipo | Descrição |
|---|---|---|
documents | query | Lista os documents de uma entidade, paginados por cursor |
document | query | Retorna um document pelo seu id |
documentCreate | mutation | Cria um document em uma entidade, com um arquivo opcional e, opcionalmente, já vinculado a um carrinho ou a um produto do carrinho. |
documentUpdate | mutation | Atualiza o conteúdo de um document e, opcionalmente, substitui o arquivo. |
documentDelete | mutation | Remove um document e o seu arquivo. |
documentsSearch | query | Busca documents de uma entidade por condições sobre o conteúdo |
documentLink | mutation | Vincula um document existente a um carrinho ou a um produto do carrinho. |
documentUnlink | mutation | Desfaz o vínculo de um document com um carrinho ou com um produto do carrinho. |
Permissões da entidade
O Storefront API acessa os documents como consumidor público. Isso significa que a entidade precisa liberar explicitamente cada operação, e que os documents retornam apenas os campos marcados como públicos:
publicOperations— a entidade declara quais operações são públicas (CREATE,READ,UPDATE,DELETE). Uma operação não declarada retorna o erroWDC103;publicView— cada propriedade doschemadeclara se é visível publicamente. Apenas as propriedades compublicView: trueaparecem no campodatados documents retornados.- O arquivo segue as permissões do document: anexar exige
CREATEouUPDATE, e ler exigeREAD. Não hápublicViewpara arquivo: sempre que o document é legível, a URL aparece emfiles. - O vínculo com carrinho não tem permissão própria. Para criar o document já vinculado, vale o
CREATEdodocumentCreate. OdocumentLinkaceita documents de entidades semREADpúblico, porque apenas confirma que o document existe e não devolve o conteúdo. Para anexar o arquivo depois da compra, a entidade precisa deUPDATE.
As permissões são configuradas na entidade, pela API Pública. Se uma consulta retornaWDC103ou traz menos campos do que o esperado, verifique opublicOperationse opublicViewda entidade.
Além das permissões da entidade, a funcionalidade de documents precisa estar habilitada para a loja. Quando não está, todas as queries e mutations retornam o erroWDC105, independentemente dopublicOperations.
Dados pessoaisDocuments vinculados a carrinho e pedido podem conter dados pessoais, como uma receita médica. A coleta do consentimento do cliente — por exemplo, um termo de aceite gravado no próprio document — é responsabilidade de quem implementa a loja. A URL do arquivo continua pública, protegida apenas pelo nome aleatório.
Entidades de cliente (customerOwned)Entidades criadas com
customerOwned: truepela API Pública guardam documents de um cliente específico. Pelo Storefront API, os documents dessas entidades não são retornados pordocumentsnem pordocument,documentsSearchnão é aceita nelas, edocumentCreateé recusada. Veja Documents de um cliente.
O identificador dos documents
O id de um document é exposto como uma hash (padrão de identificação global do Storefront API), e não como um número:
eyJFbnRpdHkiOiJEb2N1bWVudFZhbHVlIiwiSWQiOjQ1MDF9
Essa mesma hash é usada como cursor na paginação da query documents e como argumento id em document, documentUpdate e documentDelete. Uma hash inválida ou de outra entidade retorna o erro Identificador de documento inválido.
O campo data
dataO conteúdo do document é retornado no campo data, um escalar dinâmico (Any): ele carrega o objeto JSON do document e, por isso, não recebe seleção de subcampos na query. O id fica sempre fora do data, no nível do nó.
Para limitar o retorno a campos específicos, use o argumento fields, disponível em documents e document.
O campo files
filesO campo files traz os arquivos anexados ao document, numa lista de DocumentFileNode com url e createdAt. Ele fica ao lado de data, e não dentro.
- Quando o document não tem arquivo, a lista vem vazia ( [ ] ), nunca
null;
filesnão é afetado porfieldsnem porpublicView;createdAté a data em que o arquivo foi vinculado ao document, em UTC;- Na query
documentsSearch, a lista vem sempre vazia; - Use a
urlexatamente como retornada.
Arquivos do document
documentCreate e documentUpdate aceitam um arquivo opcional no argumento file.
| Regra | Valor |
|---|---|
| Formatos aceitos | jpg, jpeg, png, gif, webp e pdf, sem diferenciar maiúsculas |
| Tamanho máximo | 5 MB |
| Arquivos por document | 1 |
Limite de tamanho do documentO conteúdo do document é limitado a 2.000 caracteres de JSON, validado na criação e na atualização. Um
valueacima do limite retornaWDC101, com o motivo na extensãodetaildo erro. O limite é verificado antes da validação contra oschema.
O limite vale apenas para o JSON devalue. O arquivo tem limite próprio, de 5 MB.
Vínculo com carrinho e pedido
Um document pode ser vinculado a um carrinho (vale para o pedido inteiro) ou a um produto do carrinho. O vínculo é feito de duas formas:
- na criação, informando
checkoutId(e, opcionalmente,productVariantId) no documentCreate; - depois da criação, com documentLink. O documentUnlink desfaz o vínculo.
Regras do vínculo:
- O vínculo só pode ser feito ou desfeito com o carrinho aberto. Em um carrinho finalizado, a operação retorna
WDC110; - Para vincular a um produto, o produto precisa estar no carrinho. Caso contrário, a operação retorna
WDC111. O vínculo vale para todas as unidades daquele produto no carrinho e acompanha a mudança de quantidade: as unidades acrescentadas comcheckoutAddProductrecebem o vínculo, e ocheckoutRemoveProducto mantém nas unidades que sobram. Se o produto sair do carrinho por inteiro, o vínculo sai junto; - Cada produto do carrinho aceita até 5 documents vinculados, e o carrinho aceita outros 5 (veja Limite de documents vinculados);
- Ao finalizar o pedido, os vínculos do carrinho passam para o pedido, e os vínculos dos produtos passam para os produtos do pedido. Depois disso, o vínculo do pedido não muda;
- Um document tem no máximo 1 arquivo. Um mesmo document pode ser vinculado a vários produtos (um
documentLinkpor produto), e um produto ou carrinho aceita vários documents; - Atualizar o document com
documentUpdate, inclusive trocando ou incluindo o arquivo, mantém o vínculo, porque oiddo document não muda. Isso vale também depois de o pedido ser finalizado; - Remover o document com
documentDeletenão remove o vínculo. Oidcontinua listado emdocumentIds, e a querydocumentcom esseidretornanull. Quem exibe os documents deve tratar esse caso; - Checkout online: quando o pagamento é recusado e o carrinho é recriado para o mesmo cliente, os vínculos acompanham o carrinho novo;
- Carrinho clonado sem os dados do cliente (
checkoutClonesemcopyUser, como ao compartilhar um carrinho): os vínculos não são copiados, porque o carrinho novo pode ser de outra pessoa.
Os documents vinculados aparecem no campo documentIds, com os mesmos ids (hash) aceitos pelas queries document e documents:
| Onde | Campo |
|---|---|
Carrinho (checkout) | documentIds — documents vinculados ao carrinho |
Produto do carrinho (checkout.products) | documentIds — documents vinculados ao produto |
Produto do pedido do carrinho (checkout.orders.products) | documentIds — documents vinculados ao produto do pedido |
Pedido do cliente (customer.orders) | documentIds — documents vinculados ao carrinho que gerou o pedido |
Produto do pedido do cliente (customer.orders.products) | documentIds — documents vinculados ao produto do pedido |
documentIdsé sempre uma lista e vem vazia ([]) quando não há vínculo;- O vínculo também aparece em
metadatado carrinho e do produto como um metadado privado, com a chave_wdoc_{número}e o valor igual a esse número — o id interno do document no Document Wake, e não oidem hash do Storefront API. Esse metadado é exclusivo das mutations de document: as mutations de metadado do carrinho recusam chaves com o prefixo_wdoc_, com qualquer token, e retornamVAL121. Isso vale paracheckoutAddMetadata,checkoutAddMetadataForProductVariant,checkoutRemoveMetadatae os metadados de produto docheckoutAddProduct. Para ler os documents vinculados, usedocumentIds.
query {
customer(customerAccessToken: "<token-do-cliente>") {
orders {
nodes {
orderId
documentIds
products {
productVariantId
documentIds
}
}
}
}
}Limite de documents vinculados
| Onde o document é vinculado | Limite |
|---|---|
| Em cada produto do carrinho | 5 documents |
| No carrinho (vale para o pedido todo) | 5 documents |
- Cada produto tem o próprio limite, então um carrinho com vários produtos pode ter documents em todos eles;
- O limite reserva espaço para outros dados internos do carrinho e do produto, como identificação de kit, Click to Pay e venda assistida;
- Ao atingir o limite,
documentCreateedocumentLinkretornamWDC114, com o limite na extensãolimit. NodocumentCreate, o document não é criado; - Vincular de novo um document que já está vinculado não conta para o limite. Para liberar espaço, use
documentUnlink; - Para receitas e outros documents ligados a um item, prefira o vínculo no produto: cada produto tem o próprio limite, e o pedido indica a qual produto o document se refere.
Exemplo: receita enviada depois da compra
Quando um produto exige receita e o cliente ainda não tem o arquivo no momento da compra:
- Antes de finalizar o pedido, a loja cria o document sem arquivo, já vinculado ao produto (
documentCreatecomcheckoutIdeproductVariantId, semfile). O document pode guardar um status, como"pendente"; - O pedido é finalizado, e o produto do pedido passa a listar esse document em
documentIds; - Depois, por exemplo no Minha Conta, a loja anexa o arquivo com
documentUpdate(mesmoid,valuecompleto efile). O pedido continua apontando para o mesmo document, agora com arquivo.
Como não é possível vincular documents a um pedido já finalizado, esse é o caminho quando o arquivo chega depois da compra. A entidade precisa liberar CREATE e UPDATE e, para exibir o document, READ.
Onde o lojista vê os documents vinculadosNo painel administrativo, o detalhe do pedido exibe os documents vinculados que têm arquivo, com o link para abrir cada arquivo.
Filtrando a listagem
A query documents aceita, além dos argumentos de paginação, três filtros opcionais: externalIds, createdAt_gte e createdAt_lte. Eles são combinados entre si e com a paginação por E (AND), e precisam ser reenviados a cada página — os cursores carregam apenas a posição, não o critério.
Veja os detalhes em Documents.
OexternalIdde um document é apenas critério de busca no Storefront API: ele não é exposto no nó retornado. Filtrar por um único valor devolve no máximo um document, já que o identificador é único entre os documents ativos da entidade; filtrar por vários valores devolve documents que só podem ser distinguidos entre si se o próprio conteúdo do document publicar o identificador como campo público.
Exemplo utilizado nesta seção
Os exemplos a seguir usam uma entidade chamada ficha-tecnica, que libera as quatro operações públicas e cujo schema declara três propriedades:
| Propriedade | Tipo | publicView |
|---|---|---|
sku | string | true |
cor | string | true |
custo | number | false |
Como custo não é público, ele nunca aparece no data retornado pelo Storefront API.
Códigos de erro
Os erros seguem o padrão do Storefront API: a operação retorna null (ou isSuccess: false, em documentDelete) e o detalhamento vem no array errors, com o código em extensions.code.
| Código | Mensagem | Descrição |
|---|---|---|
WDC101 | Documento inválido | O document não é um objeto JSON válido, excede 2.000 caracteres ou não atende ao schema da entidade ou o arquivo foi recusado pelo serviço de arquivos (tipo não aceito, conteúdo que não corresponde à extensão ou tamanho acima do máximo |
WDC102 | Ocorreu um erro ao acessar os documentos | Erro genérico ou serviço de documents indisponível |
WDC103 | Operação não permitida para esta entidade | A operação não está declarada em publicOperations |
WDC104 | Documento ou entidade não encontrado | A entidade ou o document informado não existe |
WDC105 | A funcionalidade documents não está habilitada para a loja | A loja não tem o recurso de documents habilitado. Vale para todas as operações, mesmo as declaradas em publicOperations |
WDC106 | Filtro de documentos inválido | Filtro ou cursor inválido na listagem: data em formato não aceito ou ambíguo (31/08/2026), mais de 50 valores em externalIds, ou cursores conflitantes |
| WDC107 | A busca de documentos está temporariamente indisponível | O índice de busca está indisponível. Ocorre apenas em documentsSearch |
| WDC108 | Arquivo inválido | Arquivo recusado antes do envio: vazio, sem extensão, com extensão não aceita ou acima de 5 MB. O motivo vem na extensão detail |
| WDC109 | O serviço de arquivos está indisponível | O armazenamento de arquivos está indisponível. Ocorre apenas em escritas com arquivo; a mesma operação sem arquivo pode ser feita |
WDC110 | Não é possível vincular ou desvincular documentos de um carrinho finalizado | O carrinho já virou pedido. Ocorre em documentCreate com checkoutId, documentLink e documentUnlink |
WDC111 | O produto não está no carrinho | O productVariantId informado não está no carrinho. O id vem na extensão productVariantId |
WDC112 | O checkoutId é obrigatório para vincular um documento a um produto | productVariantId informado sem checkoutId no documentCreate |
WDC113 | O documento foi criado, mas não foi possível vinculá-lo ao carrinho | O document foi criado e retornado, mas a gravação do vínculo no carrinho falhou. O id vem na extensão documentId |
WDC114 | Limite de documentos vinculados atingido | O carrinho, ou o produto do carrinho, já tem 5 documents vinculados. O limite vem na extensão limit. Ocorre em documentCreate com checkoutId (o document não é criado) e em documentLink |
WDC115 | O id do documento não é suportado pelo vínculo | O id do document é grande demais para o vínculo. Diferente do WDC113, refazer o vínculo não resolve. No documentCreate, o document é criado e retornado, com o id na extensão documentId |
WDC200 | A requisição excedeu o tempo esperado | Tempo limite excedido na consulta aos documents |
WDC101xWDC106Os dois correspondem a um
400do serviço de documents, mas apontam consertos diferentes: oWDC101diz que o problema está no document enviado, e oWDC106que está nos parâmetros de busca da listagem — que não envia document nenhum. A mensagem específica, que diz qual filtro está errado, vem na extensãodetail.
WDC108 x WDC101Em arquivos: o
WDC108verifica nome e tamanho do arquivo; oWDC101com motivo de arquivo indica que o conteúdo não corresponde à extensão, como um PDF renomeado para.png.
WDC109 x WDC102Com
WDC102, nenhuma operação de document funciona; comWDC109, só o envio de arquivo está impedido.
WDC113: o document existeCom
WDC113, a resposta traz o document criado emdata.documentCreatee o erro emerrors. Não crie o document de novo: refaça só o vínculo comdocumentLink, usando oidda extensãodocumentId.
{
"errors": [
{
"message": "O documento foi criado, mas não foi possível vinculá-lo ao carrinho",
"path": ["documentCreate"],
"extensions": {
"code": "WDC113",
"documentId": "eyJFbnRpdHkiOiJEb2N1bWVudFZhbHVlIiwiSWQiOjQ1MDF9"
}
}
],
"data": {
"documentCreate": {
"id": "eyJFbnRpdHkiOiJEb2N1bWVudFZhbHVlIiwiSWQiOjQ1MDF9",
"data": { "status": "pendente", "aceiteTermo": true },
"files": []
}
}
}Exemplo de resposta com WDC108
{
"errors": [
{
"message": "Arquivo inválido",
"path": ["documentCreate"],
"extensions": {
"code": "WDC108",
"detail": "Extensão \"svg\" não permitida. Aceitos: jpg, jpeg, png, gif, webp, pdf."
}
}
],
"data": {
"documentCreate": null
}
}Nas operações de criação e atualização, quando o document viola o schema da entidade, a extensão detail traz a violação específica:
{
"errors": [
{
"message": "Documento inválido",
"path": ["documentCreate"],
"extensions": {
"code": "WDC101",
"detail": "O documento não está de acordo com o schema da entidade: /custo Value is \"string\" but should be \"number\""
}
}
],
"data": {
"documentCreate": null
}
}Na listagem, a extensão detail é o que distingue um filtro de data malformado de um excesso de valores em externalIds:
{
"errors": [
{
"message": "Filtro de documentos inválido",
"path": ["documents"],
"extensions": {
"code": "WDC106",
"detail": "O filtro createdTo não corresponde a um formato de data aceito."
}
}
],
"data": {
"documents": null
}
}Consulte também Códigos de erros mapeados na API.
Utilização da funcionalidadePara utilizar o Document Wake, solicite o acesso via chamado ou entre em contato com o seu Customer Success.
Demais documentações:
https://wakecommerce.readme.io/docs/document
https://wakecommerce.readme.io/docs/documents
https://wakecommerce.readme.io/docs/documentcreate
https://wakecommerce.readme.io/docs/documentupdate
https://wakecommerce.readme.io/docs/documentdelete
https://wakecommerce.readme.io/docs/documentlink
https://wakecommerce.readme.io/docs/documentunlink
Updated about 6 hours ago

