MeuPedido/developer

Compatibilidade

O que está implementado do Open Delivery 1.4.0, o que é extensão MeuPedido e o que ainda não existe.

A API segue o Open Delivery 1.4.0 (Abrasel), módulos Order e Merchant, com o MeuPedido no papel de aplicação de pedidos: o pedido nasce no MeuPedido e o seu sistema o recebe e o conduz. Esta página é o inventário exato do que existe, para você saber o que pode reaproveitar de uma integração Open Delivery já feita e o que precisa tratar como específico do MeuPedido.

Legenda da coluna Situação:

  • Implementado segue o padrão 1.4.0. Uma integração Open Delivery genérica funciona sem mudança.
  • Extensão não existe no padrão, ou existe com comportamento diferente. Está documentado aqui e marcado nas páginas.
  • Não implementado: previsto no padrão, ainda não disponível. Chamadas a essas rotas devolvem 404.

Autenticação

Recurso do padrão 1.4.0SituaçãoObservação
POST /oauth/token com grant_type=client_credentialsImplementadoCorpo application/x-www-form-urlencoded (canônico). Alias POST /v1/oauth/token.
Credenciais em JSON no corpoExtensãoapplication/json com grant_type, client_id e client_secret, aceitando também camelCase.
Credenciais em HTTP BasicExtensãoAuthorization: Basic base64(client_id:client_secret) com grant_type no corpo.
Resposta do tokenImplementadoTraz access_token, token_type, expires_in e scope, mais as cópias camelCase accessToken, tokenType, expiresIn.
Escopo od.allNão implementadoUse os escopos granulares orders:read, orders:write, merchant:read e catalog:read.
Refresh tokenNão implementadoO token vale 3600 s. Peça outro com as mesmas credenciais.

Pedidos (módulo Order)

Recurso do padrão 1.4.0SituaçãoObservação
GET /v1/orders/{orderId}ImplementadoEstrutura do pedido campo a campo em Estrutura do pedido.
POST /v1/orders/{orderId}/confirmImplementadoLeva o pedido a ACCEPTED.
POST /v1/orders/{orderId}/readyForPickupImplementadoLeva o pedido a READY.
POST /v1/orders/{orderId}/dispatchImplementadoLeva o pedido a DELIVERY. Não vale para pedido INDOOR.
POST /v1/orders/{orderId}/deliveredImplementadoLeva o pedido a DONE.
POST /v1/orders/{orderId}/requestCancellationExtensãoNo padrão é um pedido de cancelamento que o outro lado aceita ou nega. No MeuPedido cancela imediatamente (CANCELLED). reason é opcional; code é ignorado.
POST /v1/orders/{orderId}/acceptCancellationNão implementadoNão há fluxo de aceite porque o cancelamento é imediato.
POST /v1/orders/{orderId}/denyCancellationNão implementadoIdem.
POST /v1/orders/{orderId}/startPreparationExtensãoLeva o pedido a PREPARING.
POST /v1/orders/{orderId}/pickedUpExtensãoLeva o pedido a DONE em pedidos de retirada ou mesa.
Header Idempotency-Key nas açõesExtensãoReplay da resposta gravada por 24 h; reuso com requisição diferente devolve 409.
Resposta 202 com status e situationExtensãoO padrão só define o 202. O corpo com accepted ou already_applied e o estado resultante é acréscimo.
Retrocesso de estadoExtensãoA partir de ACCEPTED, qualquer ação para um estado anterior é aceita (ex.: confirm em PREPARING volta a ACCEPTED) e não gera evento.
Valores monetários { value, currency }Implementadocurrency é sempre BRL.
Datas ISO 8601ImplementadoSempre em UTC com sufixo Z.

Eventos

Recurso do padrão 1.4.0SituaçãoObservação
GET /v1/events:pollingImplementadoQuery limit (padrão 100, máximo 200). Responde array vazio quando não há eventos, nunca 204.
POST /v1/events/acknowledgmentImplementadoCorpo [{ "id": "<eventId>" }]. Responde 202 com { "acknowledged": n }.
Alias GET /v1/events/:pollingExtensãoCaminho antigo, com barra antes de :polling. Continua funcionando por compatibilidade com integrações já feitas, mas o caminho oficial é /v1/events:polling. Não use em integrações novas.
Filtro eventType no pollingNão implementadoTodos os tipos vêm no mesmo feed. Filtre do seu lado.
Header x-polling-merchantsNão implementadoCada credencial pertence a uma loja; o feed já é por loja.
POST /v1/newEvent (push do padrão)Não implementadoPara receber eventos por push, use os webhooks MeuPedido.
Campo orderURL no eventoImplementadoURL completa do pedido, para GET com o mesmo token.
Campo sourceAppId no eventoImplementadoPresente quando houver.
Evento CREATEDImplementadoPedido criado, ou PIX confirmado no caso de pagamento online.
Evento CONFIRMEDImplementadoPedido ACCEPTED. metadata vem como {}.
Evento READY_FOR_PICKUPImplementadoPedido READY; também quando um TAKEOUT ou INDOOR vai a DELIVERY.
Evento DISPATCHEDImplementadoPedido de entrega em DELIVERY.
Evento CONCLUDEDImplementadoPedido DONE.
Evento CANCELLEDImplementadometadata traz reason e code (CONSUMER_CANCELLATION_REQUESTED ou OTHER_CANCELLATION_REASON).
Evento PICKUP_AREA_ASSIGNEDNão implementadoNunca emitido.
Evento DELIVEREDNão implementadoNunca emitido. A conclusão chega como CONCLUDED.
Evento CANCELLATION_REQUESTEDNão implementadoNunca emitido: o cancelamento é imediato.
Evento CANCELLATION_REQUEST_DENIEDNão implementadoNunca emitido.
Evento PREPARINGExtensãoPedido em preparo.
Evento MODIFIEDExtensãoConteúdo do pedido editado. Busque o pedido de novo em orderURL.
Eventos COURIER_*ExtensãoCOURIER_ASSIGNED, COURIER_ROUTE_STARTED, COURIER_PICKED_UP, COURIER_ARRIVED, COURIER_DELIVERED, COURIER_DELIVERY_FAILED, COURIER_UNASSIGNED, COURIER_ROUTE_COMPLETED. Trazem o bloco delivery com rota, entregador e status da parada.
Retenção de eventosExtensãoEventos confirmados são apagados após 30 dias; não confirmados permanecem no feed.

Webhooks

Recurso do padrão 1.4.0SituaçãoObservação
Entrega por webhookExtensãoO padrão prevê POST /v1/newEvent no lado do integrador. O MeuPedido entrega o mesmo envelope do polling na URL HTTPS configurada pelo lojista, com assinatura HMAC-SHA256 nos headers X-MeuPedido-*.
Modo de entrega por credencialExtensãoPOLLING, WEBHOOK ou BOTH, definido ao criar a credencial.
RetentativasExtensão5, 10 e 20 s; depois WEBHOOK_FAILED e o evento fica no polling. Após 20 falhas consecutivas a URL é desativada.
ConfirmaçãoExtensãoReceber por webhook não confirma o evento. POST /v1/events/acknowledgment continua obrigatório.

Loja e cardápio

Recurso do padrão 1.4.0SituaçãoObservação
GET /v1/merchant/{merchantId}ImplementadoEscopo merchant:read. O merchantId precisa ser o da credencial.
GET /v1/merchant/{merchantId}/menusImplementadoEscopo catalog:read. Array com um único cardápio.
Grupo "Tamanho" para variaçõesExtensãoProduto com vários preços vira grupo obrigatório com id {productId}-variacoes.
Item indisponívelExtensãoContinua no cardápio com status: "UNAVAILABLE" em vez de sumir.
Módulo Merchant do padrão (envio e atualização de cardápio pelo integrador)Não implementadoO cardápio é editado pelo lojista no painel do MeuPedido. A API oferece leitura.

Outros

RecursoSituaçãoObservação
Campo test no pedidoImplementadotrue em pedidos de loja de teste.
Campo preparationStartDateTimeImplementadoIgual a createdAt em pedidos INSTANT e a scheduledDateTimeStart em SCHEDULED.
Campo extraInfoImplementadoTexto livre, por exemplo "obs | origem=X | canal=Y | numeroCanal=Z".
Ambiente de sandboxNão implementadoUsa-se uma loja de teste em produção, criada pelo suporte sob pedido.
CORSExtensãoLiberado apenas para https://developer.meupedido.io, para o playground do portal. Integrações são servidor a servidor.

Como tratar as diferenças

  • Integração Open Delivery já pronta: aponte para https://api.meupedido.io/open-delivery, troque a rota de polling para /v1/events:polling se ainda usa a forma com barra, e ignore eventType que não conhece (as extensões PREPARING, MODIFIED e COURIER_*), confirmando o evento mesmo assim.
  • Cancelamento: não espere CANCELLATION_REQUESTED nem acceptCancellation. Quando requestCancellation responde 202, o pedido já está CANCELLED e o evento CANCELLED chega no feed.
  • Estados extras: PREPARING é opcional. Você pode ir de ACCEPTED direto para READY, DELIVERY ou DONE.

Quando um item desta lista mudar de situação, a mudança é publicada no Changelog.

Próximos passos

Nesta página