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 schema que 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 schema da 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çãoTipoDescrição
documentsqueryLista os documents de uma entidade, paginados por cursor
documentqueryRetorna um document pelo seu id
documentCreatemutationCria um document em uma entidade, com um arquivo opcional e, opcionalmente, já vinculado a um carrinho ou a um produto do carrinho.
documentUpdatemutationAtualiza o conteúdo de um document e, opcionalmente, substitui o arquivo.
documentDeletemutationRemove um document e o seu arquivo.
documentsSearchqueryBusca documents de uma entidade por condições sobre o conteúdo
documentLinkmutationVincula um document existente a um carrinho ou a um produto do carrinho.
documentUnlinkmutationDesfaz 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 erro WDC103;
  • publicView — cada propriedade do schema declara se é visível publicamente. Apenas as propriedades com publicView: true aparecem no campo data dos documents retornados.
  • O arquivo segue as permissões do document: anexar exige CREATE ou UPDATE, e ler exige READ. Não há publicView para arquivo: sempre que o document é legível, a URL aparece em files.
  • O vínculo com carrinho não tem permissão própria. Para criar o document já vinculado, vale o CREATE do documentCreate. O documentLink aceita documents de entidades sem READ pú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 de UPDATE.
📘

As permissões são configuradas na entidade, pela API Pública. Se uma consulta retorna WDC103 ou traz menos campos do que o esperado, verifique o publicOperations e o publicView da 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 erro WDC105, independentemente do publicOperations.

🚧

A URL do arquivo é pública: qualquer pessoa com o link pode abri-lo.

🚧

Dados pessoais

Documents 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: true pela API Pública guardam documents de um cliente específico. Pelo Storefront API, os documents dessas entidades não são retornados por documents nem por document, documentsSearch não é aceita nelas, e documentCreate é 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

O 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

O 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;
  • files não é afetado por fields nem por publicView;
  • createdAt é a data em que o arquivo foi vinculado ao document, em UTC;
  • Na query documentsSearch, a lista vem sempre vazia;
  • Use a url exatamente como retornada.

Arquivos do document

documentCreate e documentUpdate aceitam um arquivo opcional no argumento file.

RegraValor
Formatos aceitosjpg, jpeg, png, gif, webp e pdf, sem diferenciar maiúsculas
Tamanho máximo5 MB
Arquivos por document1
🚧

Limite de tamanho do document

O conteúdo do document é limitado a 2.000 caracteres de JSON, validado na criação e na atualização. Um value acima do limite retorna WDC101, com o motivo na extensão detail do erro. O limite é verificado antes da validação contra o schema.
O limite vale apenas para o JSON de value. 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:

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 com checkoutAddProduct recebem o vínculo, e o checkoutRemoveProduct o 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 documentLink por 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 o id do document não muda. Isso vale também depois de o pedido ser finalizado;
  • Remover o document com documentDelete não remove o vínculo. O id continua listado em documentIds, e a query document com esse id retorna null. 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 (checkoutClone sem copyUser, 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:

OndeCampo
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 metadata do 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 o id em 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 retornam VAL121. Isso vale para checkoutAddMetadata, checkoutAddMetadataForProductVariant, checkoutRemoveMetadata e os metadados de produto do checkoutAddProduct. Para ler os documents vinculados, use documentIds.
query {
  customer(customerAccessToken: "<token-do-cliente>") {
    orders {
      nodes {
        orderId
        documentIds
        products {
          productVariantId
          documentIds
        }
      }
    }
  }
}

Limite de documents vinculados

Onde o document é vinculadoLimite
Em cada produto do carrinho5 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, documentCreate e documentLink retornam WDC114, com o limite na extensão limit. No documentCreate, 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:

  1. Antes de finalizar o pedido, a loja cria o document sem arquivo, já vinculado ao produto (documentCreate com checkoutId e productVariantId, sem file). O document pode guardar um status, como "pendente";
  2. O pedido é finalizado, e o produto do pedido passa a listar esse document em documentIds;
  3. Depois, por exemplo no Minha Conta, a loja anexa o arquivo com documentUpdate (mesmo id, value completo e file). 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 vinculados

No 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.

📘

O externalId de 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:

PropriedadeTipopublicView
skustringtrue
corstringtrue
custonumberfalse

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ódigoMensagemDescrição
WDC101Documento inválidoO 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
WDC102Ocorreu um erro ao acessar os documentosErro genérico ou serviço de documents indisponível
WDC103Operação não permitida para esta entidadeA operação não está declarada em publicOperations
WDC104Documento ou entidade não encontradoA entidade ou o document informado não existe
WDC105A funcionalidade documents não está habilitada para a lojaA loja não tem o recurso de documents habilitado. Vale para todas as operações, mesmo as declaradas em publicOperations
WDC106Filtro de documentos inválidoFiltro 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
WDC107A busca de documentos está temporariamente indisponívelO índice de busca está indisponível. Ocorre apenas em documentsSearch
WDC108Arquivo inválidoArquivo 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
WDC109O serviço de arquivos está indisponívelO armazenamento de arquivos está indisponível. Ocorre apenas em escritas com arquivo; a mesma operação sem arquivo pode ser feita
WDC110Não é possível vincular ou desvincular documentos de um carrinho finalizadoO carrinho já virou pedido. Ocorre em documentCreate com checkoutId, documentLink e documentUnlink
WDC111O produto não está no carrinhoO productVariantId informado não está no carrinho. O id vem na extensão productVariantId
WDC112O checkoutId é obrigatório para vincular um documento a um produtoproductVariantId informado sem checkoutId no documentCreate
WDC113O documento foi criado, mas não foi possível vinculá-lo ao carrinhoO document foi criado e retornado, mas a gravação do vínculo no carrinho falhou. O id vem na extensão documentId
WDC114Limite de documentos vinculados atingidoO 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
WDC115O id do documento não é suportado pelo vínculoO 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
WDC200A requisição excedeu o tempo esperadoTempo limite excedido na consulta aos documents
📘

WDC101 x WDC106

Os dois correspondem a um 400 do serviço de documents, mas apontam consertos diferentes: o WDC101 diz que o problema está no document enviado, e o WDC106 que 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ão detail.

📘

WDC108 x WDC101

Em arquivos: o WDC108 verifica nome e tamanho do arquivo; o WDC101 com motivo de arquivo indica que o conteúdo não corresponde à extensão, como um PDF renomeado para .png.

📘

WDC109 x WDC102

Com WDC102, nenhuma operação de document funciona; com WDC109, só o envio de arquivo está impedido.

📘

WDC113: o document existe

Com WDC113, a resposta traz o document criado em data.documentCreate e o erro em errors. Não crie o document de novo: refaça só o vínculo com documentLink, usando o id da extensão documentId.

{
  "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 funcionalidade

Para 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