{
  "item": [
    {
      "name": "Autenticação",
      "description": "Emissão do token de acesso (OAuth 2.0 `client_credentials`). É a única operação anônima da\nAPI, e por isso a única com limite por endereço IP em vez de por credencial.\n",
      "item": [
        {
          "name": "Obter token de acesso",
          "request": {
            "name": "Obter token de acesso",
            "description": {
              "content": "Troca `client_id` e `client_secret` por um token de acesso. É o fluxo `client_credentials`\ndo OAuth 2.0 (RFC 6749): não há login de usuário, redirecionamento nem refresh token.\n\nAs credenciais podem ser enviadas de três formas, e o corpo em formulário é a canônica:\n\n- `application/x-www-form-urlencoded` com `grant_type`, `client_id` e `client_secret`.\n- `application/json` com os mesmos campos, em snake_case ou camelCase (`grantType`,\n  `clientId`, `clientSecret`).\n- `Authorization: Basic base64(client_id:client_secret)` com apenas `grant_type` no corpo.\n  Quando corpo e cabeçalho trazem credenciais, o corpo prevalece.\n\nA resposta traz cada campo em snake_case (RFC 6749) e em camelCase (texto do padrão Open\nDelivery), com valores idênticos. O token é um JWT HS256 com as claims `merchant_id`,\n`client_id` e `scope`, válido por 3600 segundos. Trate-o como opaco.\n\nRenove antes de expirar, com margem de alguns minutos, e compartilhe um token por\ncredencial entre os workers do seu processo: pedir um token por requisição esgota o\nlimite do endpoint.\n\nErros seguem o RFC 6749 (`error` e `error_description`). O `401 invalid_client` vem só com\no código, de propósito: credencial inexistente e segredo errado recebem a mesma resposta\npara o endpoint não revelar quais `client_id` existem. Se o endpoint responder\n`401 invalid_client` para uma credencial que funcionava, ela foi pausada ou revogada pelo\nlojista: pare e avise o operador.\n\nLimites: 60 requisições por minuto por endereço IP e 10 falhas de autenticação por minuto\npor credencial. O segredo correto continua sendo aceito mesmo com a credencial no limite de\nfalhas, para que ninguém derrube a sua integração conhecendo só o seu `client_id`. O corpo\né limitado a 4 KB. O caminho `POST /v1/oauth/token` é um alias que responde igual, mantido\npor compatibilidade; use o caminho canônico.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "oauth",
                "token"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/x-www-form-urlencoded"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "urlencoded",
              "urlencoded": [
                {
                  "disabled": false,
                  "description": {
                    "content": "(Required) Único fluxo suportado.",
                    "type": "text/plain"
                  },
                  "key": "grant_type",
                  "value": "client_credentials"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador da credencial, exibido no painel do lojista. Formato `mp_` seguido de 24 caracteres hexadecimais.",
                    "type": "text/plain"
                  },
                  "key": "client_id",
                  "value": "{{clientId}}"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "(Required) Segredo mostrado uma única vez ao criar a credencial (43 caracteres, base64url). Nunca o coloque em código, log ou URL.",
                    "type": "text/plain"
                  },
                  "key": "client_secret",
                  "value": "{{clientSecret}}"
                }
              ]
            },
            "auth": {
              "type": "noauth"
            }
          },
          "response": [
            {
              "name": "Token emitido. Guarde `access_token` e o instante de expiração calculado a partir de `expires_in`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "oauth",
                    "token"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/x-www-form-urlencoded"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "urlencoded",
                  "urlencoded": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Único fluxo suportado.",
                        "type": "text/plain"
                      },
                      "key": "grant_type",
                      "value": "client_credentials"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da credencial, exibido no painel do lojista. Formato `mp_` seguido de 24 caracteres hexadecimais.",
                        "type": "text/plain"
                      },
                      "key": "client_id",
                      "value": "mp_7f3a9c1e5b2d4a6f8e0c1b3d"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Segredo mostrado uma única vez ao criar a credencial (43 caracteres, base64url). Nunca o coloque em código, log ou URL.",
                        "type": "text/plain"
                      },
                      "key": "client_secret",
                      "value": "cole-aqui-o-segredo-mostrado-no-painel"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"access_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ...\",\n  \"accessToken\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ...\",\n  \"token_type\": \"bearer\",\n  \"tokenType\": \"bearer\",\n  \"expires_in\": 3600,\n  \"expiresIn\": 3600,\n  \"scope\": \"orders:read orders:write merchant:read catalog:read\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Pedido inválido. `invalid_request` quando falta `grant_type`, `client_id` ou\n`client_secret`, quando o corpo não pôde ser lido no formato declarado ou quando o\ncabeçalho `Authorization: Basic` está malformado; `unsupported_grant_type` quando\n`grant_type` não é `client_credentials`. Corrija a requisição; repetir não resolve.",
              "originalRequest": {
                "url": {
                  "path": [
                    "oauth",
                    "token"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/x-www-form-urlencoded"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "urlencoded",
                  "urlencoded": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Único fluxo suportado.",
                        "type": "text/plain"
                      },
                      "key": "grant_type",
                      "value": "client_credentials"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da credencial, exibido no painel do lojista. Formato `mp_` seguido de 24 caracteres hexadecimais.",
                        "type": "text/plain"
                      },
                      "key": "client_id",
                      "value": "mp_7f3a9c1e5b2d4a6f8e0c1b3d"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Segredo mostrado uma única vez ao criar a credencial (43 caracteres, base64url). Nunca o coloque em código, log ou URL.",
                        "type": "text/plain"
                      },
                      "key": "client_secret",
                      "value": "cole-aqui-o-segredo-mostrado-no-painel"
                    }
                  ]
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_request\",\n  \"error_description\": \"Informe client_id e client_secret.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Credencial inexistente, segredo errado, ou credencial pausada ou revogada pelo\nlojista. Uma resposta só, sem `error_description`, de propósito. Não repita em loop:\nconfira o segredo e, se ele estava funcionando, avise o operador da loja.",
              "originalRequest": {
                "url": {
                  "path": [
                    "oauth",
                    "token"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/x-www-form-urlencoded"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "urlencoded",
                  "urlencoded": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Único fluxo suportado.",
                        "type": "text/plain"
                      },
                      "key": "grant_type",
                      "value": "client_credentials"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da credencial, exibido no painel do lojista. Formato `mp_` seguido de 24 caracteres hexadecimais.",
                        "type": "text/plain"
                      },
                      "key": "client_id",
                      "value": "mp_7f3a9c1e5b2d4a6f8e0c1b3d"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Segredo mostrado uma única vez ao criar a credencial (43 caracteres, base64url). Nunca o coloque em código, log ou URL.",
                        "type": "text/plain"
                      },
                      "key": "client_secret",
                      "value": "cole-aqui-o-segredo-mostrado-no-painel"
                    }
                  ]
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_client\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Corpo acima de 4 KB. Um pedido de token tem só três campos e cabe em 200 bytes.",
              "originalRequest": {
                "url": {
                  "path": [
                    "oauth",
                    "token"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/x-www-form-urlencoded"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "urlencoded",
                  "urlencoded": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Único fluxo suportado.",
                        "type": "text/plain"
                      },
                      "key": "grant_type",
                      "value": "client_credentials"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da credencial, exibido no painel do lojista. Formato `mp_` seguido de 24 caracteres hexadecimais.",
                        "type": "text/plain"
                      },
                      "key": "client_id",
                      "value": "mp_7f3a9c1e5b2d4a6f8e0c1b3d"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Segredo mostrado uma única vez ao criar a credencial (43 caracteres, base64url). Nunca o coloque em código, log ou URL.",
                        "type": "text/plain"
                      },
                      "key": "client_secret",
                      "value": "cole-aqui-o-segredo-mostrado-no-painel"
                    }
                  ]
                }
              },
              "status": "Request Entity Too Large",
              "code": 413,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_request\",\n  \"error_description\": \"O corpo excede 4096 bytes. Um pedido de token tem só grant_type, client_id e client_secret.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "`Content-Type` diferente de `application/x-www-form-urlencoded` e `application/json`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "oauth",
                    "token"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/x-www-form-urlencoded"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "urlencoded",
                  "urlencoded": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Único fluxo suportado.",
                        "type": "text/plain"
                      },
                      "key": "grant_type",
                      "value": "client_credentials"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da credencial, exibido no painel do lojista. Formato `mp_` seguido de 24 caracteres hexadecimais.",
                        "type": "text/plain"
                      },
                      "key": "client_id",
                      "value": "mp_7f3a9c1e5b2d4a6f8e0c1b3d"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Segredo mostrado uma única vez ao criar a credencial (43 caracteres, base64url). Nunca o coloque em código, log ou URL.",
                        "type": "text/plain"
                      },
                      "key": "client_secret",
                      "value": "cole-aqui-o-segredo-mostrado-no-painel"
                    }
                  ]
                }
              },
              "status": "Unsupported Media Type",
              "code": 415,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_request\",\n  \"error_description\": \"Content-Type não suportado. Use application/x-www-form-urlencoded ou application/json.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Limite atingido. Dois limites independentes produzem esta resposta: 60 requisições\npor minuto por endereço IP (corpo com `error` e `message`, escrito pelo limitador\nglobal) e 10 falhas de autenticação por minuto por credencial (corpo no formato do\nRFC 6749). Nos dois casos, espere o `Retry-After` antes de tentar de novo. No segundo,\nconfira o segredo: o correto continua sendo aceito.",
              "originalRequest": {
                "url": {
                  "path": [
                    "oauth",
                    "token"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/x-www-form-urlencoded"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "urlencoded",
                  "urlencoded": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Único fluxo suportado.",
                        "type": "text/plain"
                      },
                      "key": "grant_type",
                      "value": "client_credentials"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da credencial, exibido no painel do lojista. Formato `mp_` seguido de 24 caracteres hexadecimais.",
                        "type": "text/plain"
                      },
                      "key": "client_id",
                      "value": "mp_7f3a9c1e5b2d4a6f8e0c1b3d"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Segredo mostrado uma única vez ao criar a credencial (43 caracteres, base64url). Nunca o coloque em código, log ou URL.",
                        "type": "text/plain"
                      },
                      "key": "client_secret",
                      "value": "cole-aqui-o-segredo-mostrado-no-painel"
                    }
                  ]
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"rate_limit_exceeded\",\n  \"error_description\": \"Muitas tentativas para esta credencial.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Falha interna. A mensagem não descreve a causa de propósito; informe o `traceId` ao suporte. Repita com backoff exponencial.",
              "originalRequest": {
                "url": {
                  "path": [
                    "oauth",
                    "token"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/x-www-form-urlencoded"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "urlencoded",
                  "urlencoded": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Único fluxo suportado.",
                        "type": "text/plain"
                      },
                      "key": "grant_type",
                      "value": "client_credentials"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da credencial, exibido no painel do lojista. Formato `mp_` seguido de 24 caracteres hexadecimais.",
                        "type": "text/plain"
                      },
                      "key": "client_id",
                      "value": "mp_7f3a9c1e5b2d4a6f8e0c1b3d"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Segredo mostrado uma única vez ao criar a credencial (43 caracteres, base64url). Nunca o coloque em código, log ou URL.",
                        "type": "text/plain"
                      },
                      "key": "client_secret",
                      "value": "cole-aqui-o-segredo-mostrado-no-painel"
                    }
                  ]
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"internal_error\",\n  \"message\": \"Erro interno. Informe o traceId ao suporte.\",\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    },
    {
      "name": "Loja e cardápio",
      "description": "Dados cadastrais da loja e cardápio publicado, módulo Merchant do padrão. Somente leitura:\no lojista edita pelo painel e o seu sistema lê o resultado. O `merchantId` da rota precisa\nser o da credencial; qualquer outro responde `404`.\n",
      "item": [
        {
          "name": "Buscar loja",
          "request": {
            "name": "Buscar loja",
            "description": {
              "content": "Dados cadastrais da loja ligada à credencial: nome, documento, status, contatos, endereço\ne modalidades de atendimento (`services`). Somente leitura.\n\nO `merchantId` da rota precisa ser o da credencial. Ele está na claim `merchant_id` do\ntoken e em `merchant.id` de todo pedido. Qualquer outro id, mesmo de uma loja que exista,\nresponde `404` no formato ProblemDetails, sem distinção: a API não revela quais lojas\nexistem. Um id que não é GUID responde o mesmo `404`.\n\n`status` é `UNAVAILABLE` quando a loja está desativada ou fechada temporariamente. É status\nde loja, não ausência de loja: mostre \"fechado agora\" em vez de sumir com o restaurante.\nCampo sem valor vem como `null`. Para saber se algo mudou, compare `lastUpdate`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "merchant",
                ":merchantId"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "{{merchantId}}",
                  "key": "merchantId",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador da loja (GUID). Precisa ser o da credencial, o mesmo da claim `merchant_id` do token e de `merchant.id` de todo pedido. Qualquer outro valor responde `404`.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [
            {
              "name": "A loja da credencial.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "merchant",
                    ":merchantId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da loja (GUID). Precisa ser o da credencial, o mesmo da claim `merchant_id` do token e de `merchant.id` de todo pedido. Qualquer outro valor responde `404`.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d",
                      "key": "merchantId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"id\": \"6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d\",\n  \"name\": \"Loja de teste Acme\",\n  \"description\": \"Pizzas de fermentação natural, entrega e retirada.\",\n  \"document\": \"12345678000190\",\n  \"status\": \"AVAILABLE\",\n  \"contactEmails\": [\n    \"contato@acme.example\"\n  ],\n  \"contactPhones\": [\n    \"1140041234\"\n  ],\n  \"address\": {\n    \"country\": \"BR\",\n    \"state\": \"SP\",\n    \"city\": \"São Paulo\",\n    \"district\": \"Pinheiros\",\n    \"street\": \"Rua dos Pinheiros\",\n    \"number\": \"1000\",\n    \"postalCode\": \"05422001\",\n    \"complement\": null,\n    \"latitude\": -23.5656,\n    \"longitude\": -46.6898\n  },\n  \"services\": [\n    {\n      \"serviceType\": \"DELIVERY\",\n      \"status\": \"AVAILABLE\",\n      \"menuId\": \"6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d\"\n    },\n    {\n      \"serviceType\": \"TAKEOUT\",\n      \"status\": \"AVAILABLE\",\n      \"menuId\": \"6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d\"\n    }\n  ],\n  \"createdAt\": \"2025-03-12T14:02:11Z\",\n  \"lastUpdate\": \"2026-09-18T21:45:09Z\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Sem token, token expirado ou inválido: corpo vazio, com `WWW-Authenticate`. Peça um token\nnovo uma vez e repita a chamada. Credencial pausada ou revogada pelo lojista: corpo com\n`invalid_token`, imediato, mesmo para tokens dentro da validade; o endpoint de token\ntambém vai recusá-la. Pare e avise o operador.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "merchant",
                    ":merchantId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da loja (GUID). Precisa ser o da credencial, o mesmo da claim `merchant_id` do token e de `merchant.id` de todo pedido. Qualquer outro valor responde `404`.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d",
                      "key": "merchantId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "WWW-Authenticate",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"invalid_token\",\n  \"message\": \"A credencial foi pausada ou revogada pelo lojista.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O token é válido, mas a credencial não tem o escopo `merchant:read`. Não peça outro token; o lojista precisa criar uma credencial com o escopo.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "merchant",
                    ":merchantId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da loja (GUID). Precisa ser o da credencial, o mesmo da claim `merchant_id` do token e de `merchant.id` de todo pedido. Qualquer outro valor responde `404`.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d",
                      "key": "merchantId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"insufficient_scope\",\n  \"message\": \"A credencial não tem o escopo 'merchant:read'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O `merchantId` não é o da credencial, ou não é GUID. Formato ProblemDetails do ASP.NET, com `Content-Type: application/problem+json`. Use o id da claim `merchant_id` do token.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "merchant",
                    ":merchantId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da loja (GUID). Precisa ser o da credencial, o mesmo da claim `merchant_id` do token e de `merchant.id` de todo pedido. Qualquer outro valor responde `404`.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d",
                      "key": "merchantId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/problem+json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{\n  \"type\": \"https://tools.ietf.org/html/rfc9110#section-15.5.5\",\n  \"title\": \"Not Found\",\n  \"status\": 404,\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Mais de 600 requisições por minuto nesta credencial. Espere o `Retry-After` antes de tentar de novo; tentar antes não faz o limite abrir.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "merchant",
                    ":merchantId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da loja (GUID). Precisa ser o da credencial, o mesmo da claim `merchant_id` do token e de `merchant.id` de todo pedido. Qualquer outro valor responde `404`.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d",
                      "key": "merchantId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"rate_limit_exceeded\",\n  \"message\": \"Limite de requisições excedido.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Falha interna. A mensagem não descreve a causa de propósito; informe o `traceId` ao suporte. Repita com backoff exponencial.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "merchant",
                    ":merchantId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da loja (GUID). Precisa ser o da credencial, o mesmo da claim `merchant_id` do token e de `merchant.id` de todo pedido. Qualquer outro valor responde `404`.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d",
                      "key": "merchantId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"internal_error\",\n  \"message\": \"Erro interno. Informe o traceId ao suporte.\",\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Buscar cardápio",
          "request": {
            "name": "Buscar cardápio",
            "description": {
              "content": "O cardápio publicado da loja, completo, em uma resposta só: categorias, itens e grupos de\nopções. O padrão prevê que uma loja tenha mais de um cardápio, por isso a resposta é um\narray; no MeuPedido cada loja tem um único cardápio, então o array traz sempre um elemento,\ncujo `id` é o `menuId` referenciado em `services` da loja.\n\nO cardápio é normalizado: categorias apontam para itens por id (`itemOfferIds`), itens\napontam para grupos de opções por id (`optionGroupIds`). Monte índices por id em memória\nantes de percorrer.\n\nDuas traduções merecem atenção. Um produto com variações de tamanho vira um item mais um\ngrupo obrigatório de escolha única chamado **Tamanho**, com id `{productId}-variacoes`,\nem que cada opção é uma variação com o próprio preço, da mais barata para a mais cara; o\n`price` do item é o da primeira opção desse grupo, ou seja, o da variação mais barata. E\nitem pausado é enviado como `UNAVAILABLE`, nunca omitido: os ids ficam estáveis e um\npedido antigo sempre aponta para um item que existe.\n\nNão existe evento de cardápio. Para manter uma cópia local, busque em um intervalo que\nfaça sentido para a sua operação; cada chamada conta no limite de 600 por minuto. O\n`merchantId` segue a mesma regra de `getMerchant`: precisa ser o da credencial.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "merchant",
                ":merchantId",
                "menus"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "{{merchantId}}",
                  "key": "merchantId",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador da loja (GUID). Precisa ser o da credencial, o mesmo da claim `merchant_id` do token e de `merchant.id` de todo pedido. Qualquer outro valor responde `404`.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [
            {
              "name": "Lista com o cardápio da loja. Sempre um elemento.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "merchant",
                    ":merchantId",
                    "menus"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da loja (GUID). Precisa ser o da credencial, o mesmo da claim `merchant_id` do token e de `merchant.id` de todo pedido. Qualquer outro valor responde `404`.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d",
                      "key": "merchantId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "[\n  {\n    \"id\": \"6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d\",\n    \"name\": \"Cardápio Loja de teste Acme\",\n    \"categories\": [\n      {\n        \"id\": \"5b7e1f3a-9c2d-4e6b-8a1f-0d3c7e9b2a54\",\n        \"name\": \"Pizzas\",\n        \"description\": \"Massa de fermentação natural, 35 cm ou 25 cm.\",\n        \"index\": 0,\n        \"status\": \"AVAILABLE\",\n        \"itemOfferIds\": [\n          \"3c2b1a09-8f7e-4d6c-b5a4-9382716f5e4d\"\n        ]\n      }\n    ],\n    \"items\": [\n      {\n        \"id\": \"3c2b1a09-8f7e-4d6c-b5a4-9382716f5e4d\",\n        \"name\": \"Pizza Margherita\",\n        \"description\": \"Molho de tomate, mussarela de búfala e manjericão.\",\n        \"externalCode\": \"PZ-001\",\n        \"status\": \"AVAILABLE\",\n        \"image\": \"https://cdn.meupedido.io/lojas/acme/pizza-margherita.jpg\",\n        \"price\": {\n          \"value\": 39.9,\n          \"originalValue\": null,\n          \"currency\": \"BRL\"\n        },\n        \"optionGroupIds\": [\n          \"3c2b1a09-8f7e-4d6c-b5a4-9382716f5e4d-variacoes\",\n          \"2c8e4b1d-7f3a-4d9e-a5c6-1b0f8d3e7a92\"\n        ]\n      }\n    ],\n    \"optionGroups\": [\n      {\n        \"id\": \"3c2b1a09-8f7e-4d6c-b5a4-9382716f5e4d-variacoes\",\n        \"name\": \"Tamanho\",\n        \"description\": null,\n        \"index\": 0,\n        \"status\": \"AVAILABLE\",\n        \"minPermitted\": 1,\n        \"maxPermitted\": 1,\n        \"options\": [\n          {\n            \"id\": \"9e3b5d7f-2c1a-4f6e-8d4b-6a0c2f9e1b58\",\n            \"name\": \"Média\",\n            \"externalCode\": \"9e3b5d7f-2c1a-4f6e-8d4b-6a0c2f9e1b58\",\n            \"index\": 0,\n            \"status\": \"AVAILABLE\",\n            \"price\": {\n              \"value\": 39.9,\n              \"originalValue\": null,\n              \"currency\": \"BRL\"\n            }\n          },\n          {\n            \"id\": \"4d1a7c3e-8b5f-4e2a-9c6d-3f0b1e8a5d27\",\n            \"name\": \"Grande\",\n            \"externalCode\": \"4d1a7c3e-8b5f-4e2a-9c6d-3f0b1e8a5d27\",\n            \"index\": 1,\n            \"status\": \"AVAILABLE\",\n            \"price\": {\n              \"value\": 49.9,\n              \"originalValue\": null,\n              \"currency\": \"BRL\"\n            }\n          }\n        ]\n      },\n      {\n        \"id\": \"2c8e4b1d-7f3a-4d9e-a5c6-1b0f8d3e7a92\",\n        \"name\": \"Adicionais\",\n        \"description\": \"Escolha até 3.\",\n        \"index\": 1,\n        \"status\": \"AVAILABLE\",\n        \"minPermitted\": 0,\n        \"maxPermitted\": 3,\n        \"options\": [\n          {\n            \"id\": \"b8a7c6d5-e4f3-4210-9876-543210fedcba\",\n            \"name\": \"Borda recheada\",\n            \"externalCode\": \"b8a7c6d5-e4f3-4210-9876-543210fedcba\",\n            \"index\": 0,\n            \"status\": \"AVAILABLE\",\n            \"price\": {\n              \"value\": 8,\n              \"originalValue\": null,\n              \"currency\": \"BRL\"\n            }\n          }\n        ]\n      }\n    ]\n  }\n]",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Sem token, token expirado ou inválido: corpo vazio, com `WWW-Authenticate`. Peça um token\nnovo uma vez e repita a chamada. Credencial pausada ou revogada pelo lojista: corpo com\n`invalid_token`, imediato, mesmo para tokens dentro da validade; o endpoint de token\ntambém vai recusá-la. Pare e avise o operador.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "merchant",
                    ":merchantId",
                    "menus"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da loja (GUID). Precisa ser o da credencial, o mesmo da claim `merchant_id` do token e de `merchant.id` de todo pedido. Qualquer outro valor responde `404`.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d",
                      "key": "merchantId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "WWW-Authenticate",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"invalid_token\",\n  \"message\": \"A credencial foi pausada ou revogada pelo lojista.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O token é válido, mas a credencial não tem o escopo `catalog:read`. Não peça outro token; o lojista precisa criar uma credencial com o escopo.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "merchant",
                    ":merchantId",
                    "menus"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da loja (GUID). Precisa ser o da credencial, o mesmo da claim `merchant_id` do token e de `merchant.id` de todo pedido. Qualquer outro valor responde `404`.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d",
                      "key": "merchantId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"insufficient_scope\",\n  \"message\": \"A credencial não tem o escopo 'catalog:read'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O `merchantId` não é o da credencial, ou não é GUID. Formato ProblemDetails do ASP.NET, com `Content-Type: application/problem+json`. Use o id da claim `merchant_id` do token.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "merchant",
                    ":merchantId",
                    "menus"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da loja (GUID). Precisa ser o da credencial, o mesmo da claim `merchant_id` do token e de `merchant.id` de todo pedido. Qualquer outro valor responde `404`.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d",
                      "key": "merchantId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/problem+json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{\n  \"type\": \"https://tools.ietf.org/html/rfc9110#section-15.5.5\",\n  \"title\": \"Not Found\",\n  \"status\": 404,\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Mais de 600 requisições por minuto nesta credencial. Espere o `Retry-After` antes de tentar de novo; tentar antes não faz o limite abrir.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "merchant",
                    ":merchantId",
                    "menus"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da loja (GUID). Precisa ser o da credencial, o mesmo da claim `merchant_id` do token e de `merchant.id` de todo pedido. Qualquer outro valor responde `404`.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d",
                      "key": "merchantId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"rate_limit_exceeded\",\n  \"message\": \"Limite de requisições excedido.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Falha interna. A mensagem não descreve a causa de propósito; informe o `traceId` ao suporte. Repita com backoff exponencial.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "merchant",
                    ":merchantId",
                    "menus"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador da loja (GUID). Precisa ser o da credencial, o mesmo da claim `merchant_id` do token e de `merchant.id` de todo pedido. Qualquer outro valor responde `404`.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d",
                      "key": "merchantId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"internal_error\",\n  \"message\": \"Erro interno. Informe o traceId ao suporte.\",\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    },
    {
      "name": "Pedidos",
      "description": "Leitura do pedido completo e ações do ciclo de vida, módulo Order do padrão. Uma ação pela\nAPI percorre as mesmas regras que um clique no painel do lojista: mesma validação, mesmo\nhistórico, mesmos efeitos, com a credencial registrada como ator.\n",
      "item": [
        {
          "name": "Buscar pedido",
          "request": {
            "name": "Buscar pedido",
            "description": {
              "content": "O pedido completo, no formato do padrão Open Delivery 1.4.0. É o mesmo corpo para qualquer\norigem: app, site, cardápio digital, mesa ou marketplace produzem a mesma estrutura, com a\norigem exposta em `extraInfo` (`origem=`, `canal=`, `numeroCanal=`).\n\nÉ o que você lê depois de receber um evento `CREATED` ou `MODIFIED`: o envelope traz só\n`orderId` e `orderURL`, e esta operação devolve o pedido de agora, e não uma fotografia do\ninstante da transição. Use `id` como chave; `displayId` é o número curto que a loja e o\ncliente veem e se repete ao longo do tempo.\n\nRegras do formato: campo sem valor vem como `null` (a chave está sempre lá); datas em UTC\ncom `Z`; dinheiro como `{ value, currency }`, copiado do que a loja cobrou, nunca\nrecalculado. `delivery` só existe em pedido `DELIVERY`; `takeout`, em `TAKEOUT` e `INDOOR`;\n`schedule`, em pedido `SCHEDULED`. `test: true` marca pedido de loja de teste: não o leve\npara o seu faturamento.\n\nPedido inexistente e pedido de outra loja respondem o mesmo `404 order_not_found`, sem\ndistinção, para a rota não revelar quais ids existem. Um `orderId` que não é GUID responde\n`404` no formato ProblemDetails do ASP.NET.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "orders",
                ":orderId"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "{{orderId}}",
                  "key": "orderId",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [
            {
              "name": "O pedido, no formato do padrão.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"id\": \"9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e\",\n  \"displayId\": \"1042\",\n  \"type\": \"DELIVERY\",\n  \"orderTiming\": \"INSTANT\",\n  \"createdAt\": \"2026-09-19T14:32:10Z\",\n  \"preparationStartDateTime\": \"2026-09-19T14:32:10Z\",\n  \"merchant\": {\n    \"id\": \"6d2f4c8a-1b3e-4f5a-9c7d-2e8b0a1f3c5d\",\n    \"name\": \"Loja de teste Acme\"\n  },\n  \"customer\": {\n    \"id\": \"a4b5c6d7-e8f9-4a0b-8c1d-2e3f4a5b6c7d\",\n    \"name\": \"Ana Souza\",\n    \"phone\": {\n      \"number\": \"11999990000\",\n      \"extension\": null\n    },\n    \"documentNumber\": null,\n    \"email\": null,\n    \"ordersCountOnMerchant\": null\n  },\n  \"items\": [\n    {\n      \"id\": \"f1e2d3c4-b5a6-4978-8a9b-0c1d2e3f4a5b\",\n      \"index\": null,\n      \"name\": \"Pizza Margherita Grande\",\n      \"externalCode\": \"3c2b1a09-8f7e-4d6c-b5a4-9382716f5e4d\",\n      \"unit\": null,\n      \"ean\": null,\n      \"quantity\": 1,\n      \"specialInstructions\": \"Sem manjericão\",\n      \"unitPrice\": {\n        \"value\": 49.9,\n        \"currency\": \"BRL\"\n      },\n      \"optionsPrice\": {\n        \"value\": 8,\n        \"currency\": \"BRL\"\n      },\n      \"totalPrice\": {\n        \"value\": 57.9,\n        \"currency\": \"BRL\"\n      },\n      \"options\": [\n        {\n          \"id\": \"0a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d\",\n          \"index\": null,\n          \"name\": \"Borda recheada\",\n          \"externalCode\": \"b8a7c6d5-e4f3-4210-9876-543210fedcba\",\n          \"quantity\": 1,\n          \"unit\": null,\n          \"unitPrice\": {\n            \"value\": 8,\n            \"currency\": \"BRL\"\n          },\n          \"price\": {\n            \"value\": 8,\n            \"currency\": \"BRL\"\n          },\n          \"groupName\": null\n        }\n      ]\n    }\n  ],\n  \"otherFees\": [\n    {\n      \"name\": \"Taxa de entrega\",\n      \"type\": \"DELIVERY\",\n      \"receivedBy\": \"MERCHANT\",\n      \"price\": {\n        \"value\": 7,\n        \"currency\": \"BRL\"\n      }\n    }\n  ],\n  \"discounts\": null,\n  \"total\": {\n    \"items\": {\n      \"value\": 57.9,\n      \"currency\": \"BRL\"\n    },\n    \"otherFees\": {\n      \"value\": 7,\n      \"currency\": \"BRL\"\n    },\n    \"discount\": {\n      \"value\": 0,\n      \"currency\": \"BRL\"\n    },\n    \"orderAmount\": {\n      \"value\": 64.9,\n      \"currency\": \"BRL\"\n    }\n  },\n  \"payments\": {\n    \"prepaid\": 0,\n    \"pending\": 64.9,\n    \"methods\": [\n      {\n        \"value\": 64.9,\n        \"currency\": \"BRL\",\n        \"method\": \"CREDIT\",\n        \"methodInfo\": \"Cartão de crédito\",\n        \"type\": \"OFFLINE\",\n        \"changeFor\": null,\n        \"brand\": null,\n        \"transaction\": null\n      }\n    ]\n  },\n  \"delivery\": {\n    \"deliveryDateTime\": null,\n    \"estimatedDeliveryDateTime\": null,\n    \"deliveredBy\": \"MERCHANT\",\n    \"deliveryAddress\": {\n      \"country\": \"BR\",\n      \"state\": \"SP\",\n      \"city\": \"São Paulo\",\n      \"district\": \"Pinheiros\",\n      \"street\": \"Rua dos Pinheiros\",\n      \"number\": \"1000\",\n      \"postalCode\": \"05422001\",\n      \"complement\": \"Apto 42\",\n      \"reference\": null,\n      \"formattedAddress\": null,\n      \"coordinates\": {\n        \"latitude\": -23.5656,\n        \"longitude\": -46.6898\n      }\n    }\n  },\n  \"takeout\": null,\n  \"schedule\": null,\n  \"extraInfo\": \"Interfone 42 | origem=SITE\",\n  \"test\": true\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Sem token, token expirado ou inválido: corpo vazio, com `WWW-Authenticate`. Peça um token\nnovo uma vez e repita a chamada. Credencial pausada ou revogada pelo lojista: corpo com\n`invalid_token`, imediato, mesmo para tokens dentro da validade; o endpoint de token\ntambém vai recusá-la. Pare e avise o operador.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "WWW-Authenticate",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"invalid_token\",\n  \"message\": \"A credencial foi pausada ou revogada pelo lojista.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O token é válido, mas a credencial não tem o escopo `orders:read`. Não peça outro token; o lojista precisa criar uma credencial com o escopo.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"insufficient_scope\",\n  \"message\": \"A credencial não tem o escopo 'orders:read'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "`order_not_found` (`Content-Type: application/json`): o pedido não existe ou não pertence\nà loja da credencial, sem distinção. Um `orderId` que não é GUID responde no formato\nProblemDetails do ASP.NET, com `Content-Type: application/problem+json`. Nos dois casos,\nnão repita: confira o id.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"order_not_found\",\n  \"message\": \"Pedido não localizado.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Mais de 600 requisições por minuto nesta credencial. Espere o `Retry-After` antes de tentar de novo; tentar antes não faz o limite abrir.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"rate_limit_exceeded\",\n  \"message\": \"Limite de requisições excedido.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Falha interna. A mensagem não descreve a causa de propósito; informe o `traceId` ao suporte. Repita com backoff exponencial.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"internal_error\",\n  \"message\": \"Erro interno. Informe o traceId ao suporte.\",\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Confirmar pedido",
          "request": {
            "name": "Confirmar pedido",
            "description": {
              "content": "A loja aceitou o pedido. A situação passa a `ACCEPTED`, o lojista e o cliente veem a\nmudança e um evento `CONFIRMED` entra no feed. É a primeira ação de todo pedido: um\npedido `PENDING` só sai dali por `confirm` ou por cancelamento.\n\nA resposta é `202` com `status: \"accepted\"` quando a transição foi aplicada, ou\n`status: \"already_applied\"` quando o pedido já estava em `ACCEPTED`. O segundo caso não é\nerro, de propósito: é o comando reenviado depois de um timeout, e tratá-lo como falha\nfaria o seu sistema mostrar erro numa operação que já está feita. Em pedido que já\navançou (`PREPARING`, `READY`, `DELIVERY`), `confirm` é um retrocesso: é aceito, devolve\no pedido a `ACCEPTED` e não gera evento. O mesmo vale a partir de `DONE`: a API pode\nreabrir um pedido concluído para corrigir um engano, como o painel faz.\n\nEnvie `Idempotency-Key` desde o início: a resposta da primeira execução é gravada por 24\nhoras e devolvida em toda repetição com a mesma chave. A chave tem no máximo 128\ncaracteres; acima disso a resposta é `400 invalid_idempotency_key` e nada é executado.\nMesma chave com outra rota ou outro corpo responde `409`. `422 invalid_transition` (em\npedido `CANCELLED`, que é final) é bug de fluxo, não erro transitório: repetir não resolve.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "orders",
                ":orderId",
                "confirm"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "{{orderId}}",
                  "key": "orderId",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": {
                  "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                  "type": "text/plain"
                },
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {}
          },
          "response": [
            {
              "name": "Transição aplicada, ou já aplicada antes. `situation` é a situação atual do pedido.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Accepted",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"accepted\",\n  \"situation\": \"ACCEPTED\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A `Idempotency-Key` passou de 128 caracteres, o tamanho que a API grava. Nada foi executado e o pedido continua como estava. Encurte a chave (um UUID basta) e repita; a mesma chave longa responde sempre isto.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_idempotency_key\",\n  \"message\": \"A chave de idempotência tem no máximo 128 caracteres.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Sem token, token expirado ou inválido: corpo vazio, com `WWW-Authenticate`. Peça um token\nnovo uma vez e repita a chamada. Credencial pausada ou revogada pelo lojista: corpo com\n`invalid_token`, imediato, mesmo para tokens dentro da validade; o endpoint de token\ntambém vai recusá-la. Pare e avise o operador.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "WWW-Authenticate",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"invalid_token\",\n  \"message\": \"A credencial foi pausada ou revogada pelo lojista.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O token é válido, mas a credencial não tem o escopo `orders:write`. Não peça outro token; o lojista precisa criar uma credencial com o escopo.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"insufficient_scope\",\n  \"message\": \"A credencial não tem o escopo 'orders:write'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "`order_not_found` (`Content-Type: application/json`): o pedido não existe ou não pertence\nà loja da credencial, sem distinção. Um `orderId` que não é GUID responde no formato\nProblemDetails do ASP.NET, com `Content-Type: application/problem+json`. Nos dois casos,\nnão repita: confira o id.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"order_not_found\",\n  \"message\": \"Pedido não localizado.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A mesma `Idempotency-Key` já foi usada nesta credencial com outra rota, outra ação ou outro corpo. Nada foi executado. Gere uma chave nova para a nova intenção.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"idempotency_key_reuse\",\n  \"message\": \"Esta chave de idempotência já foi usada com outro conteúdo.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A transição não é permitida a partir da situação atual. `message` explica em pt-BR. Não repita.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_transition\",\n  \"message\": \"Pedido cancelado não muda mais de situação.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Mais de 600 requisições por minuto nesta credencial. Espere o `Retry-After` antes de tentar de novo; tentar antes não faz o limite abrir.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"rate_limit_exceeded\",\n  \"message\": \"Limite de requisições excedido.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Falha interna. A mensagem não descreve a causa de propósito; informe o `traceId` ao suporte. Repita com backoff exponencial.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "confirm"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"internal_error\",\n  \"message\": \"Erro interno. Informe o traceId ao suporte.\",\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Iniciar preparo",
          "request": {
            "name": "Iniciar preparo",
            "description": {
              "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nA cozinha começou. A situação passa a `PREPARING` e um evento `PREPARING` entra no feed.\nÉ opcional: um pedido `ACCEPTED` pode ir direto para `READY`, `DELIVERY` ou `DONE`. Existe\nporque o PDV que integra conosco precisa dizer à tela da loja e ao cliente que o pedido\nestá em produção, e o padrão não descreve esse fato.\n\nSó é aceito a partir de `ACCEPTED` (ou como retrocesso a partir de `READY` e `DELIVERY`,\nsem evento). Em pedido `PENDING` responde `422`: confirme primeiro. Mesma semântica de\n`202 accepted` e `already_applied`, `Idempotency-Key`, `400`, `409` e `422` de\n`confirmOrder`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "orders",
                ":orderId",
                "startPreparation"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "{{orderId}}",
                  "key": "orderId",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": {
                  "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                  "type": "text/plain"
                },
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {}
          },
          "response": [
            {
              "name": "Transição aplicada, ou já aplicada antes.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "startPreparation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Accepted",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"accepted\",\n  \"situation\": \"PREPARING\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A `Idempotency-Key` passou de 128 caracteres, o tamanho que a API grava. Nada foi executado e o pedido continua como estava. Encurte a chave (um UUID basta) e repita; a mesma chave longa responde sempre isto.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "startPreparation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_idempotency_key\",\n  \"message\": \"A chave de idempotência tem no máximo 128 caracteres.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Sem token, token expirado ou inválido: corpo vazio, com `WWW-Authenticate`. Peça um token\nnovo uma vez e repita a chamada. Credencial pausada ou revogada pelo lojista: corpo com\n`invalid_token`, imediato, mesmo para tokens dentro da validade; o endpoint de token\ntambém vai recusá-la. Pare e avise o operador.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "startPreparation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "WWW-Authenticate",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"invalid_token\",\n  \"message\": \"A credencial foi pausada ou revogada pelo lojista.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O token é válido, mas a credencial não tem o escopo `orders:write`. Não peça outro token; o lojista precisa criar uma credencial com o escopo.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "startPreparation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"insufficient_scope\",\n  \"message\": \"A credencial não tem o escopo 'orders:write'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "`order_not_found` (`Content-Type: application/json`): o pedido não existe ou não pertence\nà loja da credencial, sem distinção. Um `orderId` que não é GUID responde no formato\nProblemDetails do ASP.NET, com `Content-Type: application/problem+json`. Nos dois casos,\nnão repita: confira o id.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "startPreparation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"order_not_found\",\n  \"message\": \"Pedido não localizado.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A mesma `Idempotency-Key` já foi usada nesta credencial com outra rota, outra ação ou outro corpo. Nada foi executado. Gere uma chave nova para a nova intenção.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "startPreparation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"idempotency_key_reuse\",\n  \"message\": \"Esta chave de idempotência já foi usada com outro conteúdo.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A transição não é permitida a partir da situação atual. Não repita.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "startPreparation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_transition\",\n  \"message\": \"Não existe passo de 'PENDING' para 'PREPARING'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Mais de 600 requisições por minuto nesta credencial. Espere o `Retry-After` antes de tentar de novo; tentar antes não faz o limite abrir.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "startPreparation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"rate_limit_exceeded\",\n  \"message\": \"Limite de requisições excedido.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Falha interna. A mensagem não descreve a causa de propósito; informe o `traceId` ao suporte. Repita com backoff exponencial.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "startPreparation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"internal_error\",\n  \"message\": \"Erro interno. Informe o traceId ao suporte.\",\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Pronto para retirada",
          "request": {
            "name": "Pronto para retirada",
            "description": {
              "content": "O pedido está pronto: para sair para entrega, para o cliente retirar ou para ser servido\nna mesa. A situação passa a `READY` e um evento `READY_FOR_PICKUP` entra no feed.\n\nAceito a partir de `ACCEPTED` e `PREPARING`; como retrocesso, a partir de `DELIVERY` e\nde `DONE` (sem evento). Em pedido `PENDING` responde `422`: confirme primeiro. Em pedido\n`CANCELLED` responde `422`. Mesma semântica de `202 accepted` e `already_applied`,\n`Idempotency-Key`, `400`, `409` e `422` de `confirmOrder`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "orders",
                ":orderId",
                "readyForPickup"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "{{orderId}}",
                  "key": "orderId",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": {
                  "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                  "type": "text/plain"
                },
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {}
          },
          "response": [
            {
              "name": "Transição aplicada, ou já aplicada antes.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "readyForPickup"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Accepted",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"accepted\",\n  \"situation\": \"READY\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A `Idempotency-Key` passou de 128 caracteres, o tamanho que a API grava. Nada foi executado e o pedido continua como estava. Encurte a chave (um UUID basta) e repita; a mesma chave longa responde sempre isto.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "readyForPickup"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_idempotency_key\",\n  \"message\": \"A chave de idempotência tem no máximo 128 caracteres.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Sem token, token expirado ou inválido: corpo vazio, com `WWW-Authenticate`. Peça um token\nnovo uma vez e repita a chamada. Credencial pausada ou revogada pelo lojista: corpo com\n`invalid_token`, imediato, mesmo para tokens dentro da validade; o endpoint de token\ntambém vai recusá-la. Pare e avise o operador.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "readyForPickup"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "WWW-Authenticate",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"invalid_token\",\n  \"message\": \"A credencial foi pausada ou revogada pelo lojista.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O token é válido, mas a credencial não tem o escopo `orders:write`. Não peça outro token; o lojista precisa criar uma credencial com o escopo.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "readyForPickup"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"insufficient_scope\",\n  \"message\": \"A credencial não tem o escopo 'orders:write'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "`order_not_found` (`Content-Type: application/json`): o pedido não existe ou não pertence\nà loja da credencial, sem distinção. Um `orderId` que não é GUID responde no formato\nProblemDetails do ASP.NET, com `Content-Type: application/problem+json`. Nos dois casos,\nnão repita: confira o id.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "readyForPickup"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"order_not_found\",\n  \"message\": \"Pedido não localizado.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A mesma `Idempotency-Key` já foi usada nesta credencial com outra rota, outra ação ou outro corpo. Nada foi executado. Gere uma chave nova para a nova intenção.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "readyForPickup"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"idempotency_key_reuse\",\n  \"message\": \"Esta chave de idempotência já foi usada com outro conteúdo.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A transição não é permitida a partir da situação atual. Não repita.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "readyForPickup"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_transition\",\n  \"message\": \"Não existe passo de 'PENDING' para 'READY'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Mais de 600 requisições por minuto nesta credencial. Espere o `Retry-After` antes de tentar de novo; tentar antes não faz o limite abrir.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "readyForPickup"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"rate_limit_exceeded\",\n  \"message\": \"Limite de requisições excedido.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Falha interna. A mensagem não descreve a causa de propósito; informe o `traceId` ao suporte. Repita com backoff exponencial.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "readyForPickup"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"internal_error\",\n  \"message\": \"Erro interno. Informe o traceId ao suporte.\",\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Despachar pedido",
          "request": {
            "name": "Despachar pedido",
            "description": {
              "content": "O pedido saiu para entrega. A situação passa a `DELIVERY` e um evento `DISPATCHED` entra\nno feed. Só faz sentido em pedido do tipo `DELIVERY`: em pedido `INDOOR` responde `422`,\nporque a situação não existe para mesa (a mensagem cita o nome interno do tipo, `TABLE`);\nem `TAKEOUT`, prefira `readyForPickup` seguido de `pickedUp`.\n\nAceito a partir de `ACCEPTED`, `PREPARING` e `READY`. Em pedido `PENDING` responde `422`:\nconfirme primeiro. Mesma semântica de `202 accepted` e `already_applied`,\n`Idempotency-Key`, `400`, `409` e `422` de `confirmOrder`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "orders",
                ":orderId",
                "dispatch"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "{{orderId}}",
                  "key": "orderId",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": {
                  "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                  "type": "text/plain"
                },
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {}
          },
          "response": [
            {
              "name": "Transição aplicada, ou já aplicada antes.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "dispatch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Accepted",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"accepted\",\n  \"situation\": \"DELIVERY\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A `Idempotency-Key` passou de 128 caracteres, o tamanho que a API grava. Nada foi executado e o pedido continua como estava. Encurte a chave (um UUID basta) e repita; a mesma chave longa responde sempre isto.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "dispatch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_idempotency_key\",\n  \"message\": \"A chave de idempotência tem no máximo 128 caracteres.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Sem token, token expirado ou inválido: corpo vazio, com `WWW-Authenticate`. Peça um token\nnovo uma vez e repita a chamada. Credencial pausada ou revogada pelo lojista: corpo com\n`invalid_token`, imediato, mesmo para tokens dentro da validade; o endpoint de token\ntambém vai recusá-la. Pare e avise o operador.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "dispatch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "WWW-Authenticate",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"invalid_token\",\n  \"message\": \"A credencial foi pausada ou revogada pelo lojista.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O token é válido, mas a credencial não tem o escopo `orders:write`. Não peça outro token; o lojista precisa criar uma credencial com o escopo.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "dispatch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"insufficient_scope\",\n  \"message\": \"A credencial não tem o escopo 'orders:write'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "`order_not_found` (`Content-Type: application/json`): o pedido não existe ou não pertence\nà loja da credencial, sem distinção. Um `orderId` que não é GUID responde no formato\nProblemDetails do ASP.NET, com `Content-Type: application/problem+json`. Nos dois casos,\nnão repita: confira o id.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "dispatch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"order_not_found\",\n  \"message\": \"Pedido não localizado.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A mesma `Idempotency-Key` já foi usada nesta credencial com outra rota, outra ação ou outro corpo. Nada foi executado. Gere uma chave nova para a nova intenção.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "dispatch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"idempotency_key_reuse\",\n  \"message\": \"Esta chave de idempotência já foi usada com outro conteúdo.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A transição não é permitida a partir da situação atual ou para este tipo de pedido. Não repita.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "dispatch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_transition\",\n  \"message\": \"A situação 'DELIVERY' não existe em pedido do tipo 'TABLE'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Mais de 600 requisições por minuto nesta credencial. Espere o `Retry-After` antes de tentar de novo; tentar antes não faz o limite abrir.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "dispatch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"rate_limit_exceeded\",\n  \"message\": \"Limite de requisições excedido.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Falha interna. A mensagem não descreve a causa de propósito; informe o `traceId` ao suporte. Repita com backoff exponencial.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "dispatch"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"internal_error\",\n  \"message\": \"Erro interno. Informe o traceId ao suporte.\",\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Pedido retirado",
          "request": {
            "name": "Pedido retirado",
            "description": {
              "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nO cliente retirou o pedido no balcão, ou foi servido na mesa. Encerra o pedido: a situação\npassa a `DONE` e um evento `CONCLUDED` entra no feed. É o fechamento natural de pedido\n`TAKEOUT` e `INDOOR`, cujo caminho termina em `readyForPickup` seguido de `pickedUp`.\n\n`pickedUp` e `delivered` levam à mesma situação, porque para a loja os dois significam\npedido encerrado. Use o que descreve o que aconteceu. Aceito a partir de `ACCEPTED`,\n`PREPARING`, `READY` e `DELIVERY`; em pedido `PENDING` ou `CANCELLED` responde `422`.\n`DONE` é final para avanço: só um retrocesso corretivo (`confirm`, `startPreparation`,\n`readyForPickup`, `dispatch`) ou uma decisão externa (estorno, canal) o tira dali;\n`requestCancellation` responde `422`.\nMesma semântica de `202 accepted` e `already_applied`, `Idempotency-Key`, `400`, `409` e\n`422` de `confirmOrder`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "orders",
                ":orderId",
                "pickedUp"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "{{orderId}}",
                  "key": "orderId",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": {
                  "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                  "type": "text/plain"
                },
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {}
          },
          "response": [
            {
              "name": "Transição aplicada, ou já aplicada antes.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "pickedUp"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Accepted",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"accepted\",\n  \"situation\": \"DONE\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A `Idempotency-Key` passou de 128 caracteres, o tamanho que a API grava. Nada foi executado e o pedido continua como estava. Encurte a chave (um UUID basta) e repita; a mesma chave longa responde sempre isto.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "pickedUp"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_idempotency_key\",\n  \"message\": \"A chave de idempotência tem no máximo 128 caracteres.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Sem token, token expirado ou inválido: corpo vazio, com `WWW-Authenticate`. Peça um token\nnovo uma vez e repita a chamada. Credencial pausada ou revogada pelo lojista: corpo com\n`invalid_token`, imediato, mesmo para tokens dentro da validade; o endpoint de token\ntambém vai recusá-la. Pare e avise o operador.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "pickedUp"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "WWW-Authenticate",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"invalid_token\",\n  \"message\": \"A credencial foi pausada ou revogada pelo lojista.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O token é válido, mas a credencial não tem o escopo `orders:write`. Não peça outro token; o lojista precisa criar uma credencial com o escopo.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "pickedUp"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"insufficient_scope\",\n  \"message\": \"A credencial não tem o escopo 'orders:write'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "`order_not_found` (`Content-Type: application/json`): o pedido não existe ou não pertence\nà loja da credencial, sem distinção. Um `orderId` que não é GUID responde no formato\nProblemDetails do ASP.NET, com `Content-Type: application/problem+json`. Nos dois casos,\nnão repita: confira o id.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "pickedUp"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"order_not_found\",\n  \"message\": \"Pedido não localizado.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A mesma `Idempotency-Key` já foi usada nesta credencial com outra rota, outra ação ou outro corpo. Nada foi executado. Gere uma chave nova para a nova intenção.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "pickedUp"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"idempotency_key_reuse\",\n  \"message\": \"Esta chave de idempotência já foi usada com outro conteúdo.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A transição não é permitida a partir da situação atual. Não repita.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "pickedUp"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_transition\",\n  \"message\": \"Pedido cancelado não muda mais de situação.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Mais de 600 requisições por minuto nesta credencial. Espere o `Retry-After` antes de tentar de novo; tentar antes não faz o limite abrir.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "pickedUp"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"rate_limit_exceeded\",\n  \"message\": \"Limite de requisições excedido.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Falha interna. A mensagem não descreve a causa de propósito; informe o `traceId` ao suporte. Repita com backoff exponencial.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "pickedUp"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"internal_error\",\n  \"message\": \"Erro interno. Informe o traceId ao suporte.\",\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Pedido entregue",
          "request": {
            "name": "Pedido entregue",
            "description": {
              "content": "O pedido foi entregue ao cliente. Encerra o pedido: a situação passa a `DONE` e um evento\n`CONCLUDED` entra no feed. O evento é `CONCLUDED`, e não `DELIVERED`, porque o MeuPedido\ntem um único estado final, válido para entrega e retirada; afirmar uma entrega num pedido\nretirado seria mentir num campo que o seu sistema usa para decidir.\n\nAceito a partir de `ACCEPTED`, `PREPARING`, `READY` e `DELIVERY`; em pedido `PENDING` ou\n`CANCELLED` responde `422`. Mesma semântica de `202 accepted` e `already_applied`,\n`Idempotency-Key`, `400`, `409` e `422` de `confirmOrder`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "orders",
                ":orderId",
                "delivered"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "{{orderId}}",
                  "key": "orderId",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": {
                  "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                  "type": "text/plain"
                },
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {}
          },
          "response": [
            {
              "name": "Transição aplicada, ou já aplicada antes.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "delivered"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Accepted",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"accepted\",\n  \"situation\": \"DONE\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A `Idempotency-Key` passou de 128 caracteres, o tamanho que a API grava. Nada foi executado e o pedido continua como estava. Encurte a chave (um UUID basta) e repita; a mesma chave longa responde sempre isto.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "delivered"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_idempotency_key\",\n  \"message\": \"A chave de idempotência tem no máximo 128 caracteres.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Sem token, token expirado ou inválido: corpo vazio, com `WWW-Authenticate`. Peça um token\nnovo uma vez e repita a chamada. Credencial pausada ou revogada pelo lojista: corpo com\n`invalid_token`, imediato, mesmo para tokens dentro da validade; o endpoint de token\ntambém vai recusá-la. Pare e avise o operador.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "delivered"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "WWW-Authenticate",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"invalid_token\",\n  \"message\": \"A credencial foi pausada ou revogada pelo lojista.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O token é válido, mas a credencial não tem o escopo `orders:write`. Não peça outro token; o lojista precisa criar uma credencial com o escopo.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "delivered"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"insufficient_scope\",\n  \"message\": \"A credencial não tem o escopo 'orders:write'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "`order_not_found` (`Content-Type: application/json`): o pedido não existe ou não pertence\nà loja da credencial, sem distinção. Um `orderId` que não é GUID responde no formato\nProblemDetails do ASP.NET, com `Content-Type: application/problem+json`. Nos dois casos,\nnão repita: confira o id.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "delivered"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"order_not_found\",\n  \"message\": \"Pedido não localizado.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A mesma `Idempotency-Key` já foi usada nesta credencial com outra rota, outra ação ou outro corpo. Nada foi executado. Gere uma chave nova para a nova intenção.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "delivered"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"idempotency_key_reuse\",\n  \"message\": \"Esta chave de idempotência já foi usada com outro conteúdo.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A transição não é permitida a partir da situação atual. Não repita.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "delivered"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_transition\",\n  \"message\": \"Não existe passo de 'PENDING' para 'DONE'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Mais de 600 requisições por minuto nesta credencial. Espere o `Retry-After` antes de tentar de novo; tentar antes não faz o limite abrir.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "delivered"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"rate_limit_exceeded\",\n  \"message\": \"Limite de requisições excedido.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Falha interna. A mensagem não descreve a causa de propósito; informe o `traceId` ao suporte. Repita com backoff exponencial.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "delivered"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"internal_error\",\n  \"message\": \"Erro interno. Informe o traceId ao suporte.\",\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Cancelar pedido",
          "request": {
            "name": "Cancelar pedido",
            "description": {
              "content": "Cancela o pedido **imediatamente**. Apesar do nome herdado do padrão, não existe etapa de\naprovação: a situação passa a `CANCELLED` na hora, a resposta já vem com\n`situation: \"CANCELLED\"` e um evento `CANCELLED` entra no feed, com `metadata.reason`\nigual ao motivo informado e `metadata.code` igual a `OTHER_CANCELLATION_REASON`\n(cancelamento pela loja ou pela API). No padrão 1.4.0 esta operação é um pedido de\ncancelamento que o outro lado aceita ou nega; `acceptCancellation` e `denyCancellation`\nnão existem aqui porque não há nada a aprovar.\n\nO corpo é opcional. `reason` é registrado no histórico do pedido e mostrado ao lojista;\nsem ele, o motivo é \"Cancelamento solicitado pela API pública.\". São no máximo 500\ncaracteres: acima disso a resposta é `400 invalid_cancellation_reason` e o pedido **não**\né cancelado. `code` é aceito por compatibilidade com o padrão e **ignorado**: o `code` do\nevento `CANCELLED` deriva de quem cancelou, não deste campo. Enviar sem corpo e sem\n`Content-Type` também funciona.\n\nAceito em qualquer situação, exceto `DONE` (`422`: pedido concluído não é cancelado por\naqui). `CANCELLED` é final: nenhuma ação tira o pedido dessa situação. Cancelar de novo\nresponde `202 already_applied`. Mesma semântica de `Idempotency-Key`, `400`, `409` e `422`\nde `confirmOrder`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "orders",
                ":orderId",
                "requestCancellation"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "{{orderId}}",
                  "key": "orderId",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": {
                  "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                  "type": "text/plain"
                },
                "key": "Idempotency-Key",
                "value": "{{$guid}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"Produto em falta.\",\n  \"code\": \"OTHER_CANCELLATION_REASON\"\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Pedido cancelado, ou já estava cancelado.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "requestCancellation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Produto em falta.\",\n  \"code\": \"OTHER_CANCELLATION_REASON\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Accepted",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"accepted\",\n  \"situation\": \"CANCELLED\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "`invalid_cancellation_reason` (`Content-Type: application/json`): `reason` passou de 500\ncaracteres, o tamanho que o histórico do pedido grava. `invalid_idempotency_key`: a\n`Idempotency-Key` passou de 128. Corpo que não é JSON válido para esta operação responde\nno formato ValidationProblemDetails do ASP.NET, com `Content-Type: application/problem+json`\ne `errors` apontando o campo. Nos três casos o pedido continua como estava; corrija a\nrequisição, repetir não muda a resposta.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "requestCancellation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Produto em falta.\",\n  \"code\": \"OTHER_CANCELLATION_REASON\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_cancellation_reason\",\n  \"message\": \"O motivo do cancelamento tem no máximo 500 caracteres.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Sem token, token expirado ou inválido: corpo vazio, com `WWW-Authenticate`. Peça um token\nnovo uma vez e repita a chamada. Credencial pausada ou revogada pelo lojista: corpo com\n`invalid_token`, imediato, mesmo para tokens dentro da validade; o endpoint de token\ntambém vai recusá-la. Pare e avise o operador.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "requestCancellation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Produto em falta.\",\n  \"code\": \"OTHER_CANCELLATION_REASON\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "WWW-Authenticate",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"invalid_token\",\n  \"message\": \"A credencial foi pausada ou revogada pelo lojista.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O token é válido, mas a credencial não tem o escopo `orders:write`. Não peça outro token; o lojista precisa criar uma credencial com o escopo.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "requestCancellation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Produto em falta.\",\n  \"code\": \"OTHER_CANCELLATION_REASON\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"insufficient_scope\",\n  \"message\": \"A credencial não tem o escopo 'orders:write'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "`order_not_found` (`Content-Type: application/json`): o pedido não existe ou não pertence\nà loja da credencial, sem distinção. Um `orderId` que não é GUID responde no formato\nProblemDetails do ASP.NET, com `Content-Type: application/problem+json`. Nos dois casos,\nnão repita: confira o id.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "requestCancellation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Produto em falta.\",\n  \"code\": \"OTHER_CANCELLATION_REASON\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"order_not_found\",\n  \"message\": \"Pedido não localizado.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "A mesma `Idempotency-Key` já foi usada nesta credencial com outra rota, outra ação ou outro corpo. Nada foi executado. Gere uma chave nova para a nova intenção.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "requestCancellation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Produto em falta.\",\n  \"code\": \"OTHER_CANCELLATION_REASON\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"idempotency_key_reuse\",\n  \"message\": \"Esta chave de idempotência já foi usada com outro conteúdo.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "`Content-Type` diferente de `application/json` com corpo presente. Formato ProblemDetails do ASP.NET, com `Content-Type: application/problem+json`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "requestCancellation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/problem+json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Produto em falta.\",\n  \"code\": \"OTHER_CANCELLATION_REASON\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unsupported Media Type",
              "code": 415,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{\n  \"type\": \"https://tools.ietf.org/html/rfc9110#section-15.5.16\",\n  \"title\": \"Unsupported Media Type\",\n  \"status\": 415,\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O pedido está em `DONE` e não pode ser cancelado por aqui. Não repita.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "requestCancellation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Produto em falta.\",\n  \"code\": \"OTHER_CANCELLATION_REASON\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"invalid_transition\",\n  \"message\": \"Pedido concluído não é cancelado pelo painel. Use estorno.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Mais de 600 requisições por minuto nesta credencial. Espere o `Retry-After` antes de tentar de novo; tentar antes não faz o limite abrir.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "requestCancellation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Produto em falta.\",\n  \"code\": \"OTHER_CANCELLATION_REASON\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"rate_limit_exceeded\",\n  \"message\": \"Limite de requisições excedido.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Falha interna. A mensagem não descreve a causa de propósito; informe o `traceId` ao suporte. Repita com backoff exponencial.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "orders",
                    ":orderId",
                    "requestCancellation"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Identificador do pedido (GUID). É o `orderId` dos eventos e o `id` do pedido. Um valor que não é GUID responde `404` no formato ProblemDetails.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e",
                      "key": "orderId"
                    }
                  ]
                },
                "header": [
                  {
                    "disabled": false,
                    "description": {
                      "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nChave de idempotência, qualquer string de **até 128 caracteres** escolhida por você, única\npor credencial (um UUID por tentativa lógica, ou um valor derivado como\n`confirm-{orderId}`). Mesma chave com a mesma requisição (mesma rota, mesma ação, mesmo\ncorpo) devolve a resposta gravada na primeira execução, com o mesmo status e o mesmo corpo,\nsem executar de novo, por 24 horas. Mesma chave com requisição diferente responde\n`409 idempotency_key_reuse`. Respostas `202`, `404` e `422` são gravadas; `5xx` não, para\nque a repetição execute de verdade. Em timeout, repita com a mesma chave.\n\nAcima de 128 caracteres a resposta é `400 invalid_idempotency_key` e **nada é executado**:\n128 é o tamanho que a API grava, e aceitar uma chave maior seria aplicar o comando sem a\nproteção que você pediu.\n\nEste parâmetro não traz `example` de propósito: a chave muda a cada intenção nova, e um\nvalor fixo, repetido do playground ou do cURL copiado numa segunda ação, responderia `409`.\n",
                      "type": "text/plain"
                    },
                    "key": "Idempotency-Key",
                    "value": "string"
                  },
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reason\": \"Produto em falta.\",\n  \"code\": \"OTHER_CANCELLATION_REASON\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"internal_error\",\n  \"message\": \"Erro interno. Informe o traceId ao suporte.\",\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    },
    {
      "name": "Eventos",
      "description": "Feed de eventos por polling e confirmação de recebimento. Um evento é o aviso de que algo\naconteceu com um pedido; ele nunca traz o pedido, que está em `orderURL`. Evento não\nconfirmado volta na próxima consulta (entrega at-least-once).\n",
      "item": [
        {
          "name": "Consultar eventos",
          "request": {
            "name": "Consultar eventos",
            "description": {
              "content": "Os eventos pendentes da sua credencial, em ordem de `createdAt`, do mais antigo para o\nmais novo. Cada item é um envelope com `eventId`, `eventType`, `orderId`, `orderURL` e\n`createdAt`; o envelope **nunca traz o pedido**. Para `CREATED` e `MODIFIED`, faça `GET`\nem `orderURL` e leia o pedido de agora.\n\nA resposta é `200` com um array, vazio quando não há nada. A API nunca responde `204`.\n\nConsultar não confirma. Um evento devolvido aqui continua pendente até você chamar\n`POST /v1/events/acknowledgment` com o `eventId`; enquanto isso, ele volta em toda\nconsulta. É a garantia at-least-once: se o seu processo cair entre a consulta e a\ngravação, nada se perde. Por isso o mesmo `eventId` pode chegar mais de uma vez: trate-o\ncomo chave única e grave-o na mesma transação em que aplica o efeito.\n\nO estado \"o que ainda falta\" vive na API, por credencial. Não há cursor, `since` nem\nfiltro por tipo; duas credenciais na mesma loja têm feeds independentes; uma credencial\ncriada hoje não recebe os eventos de ontem; uma pausada acumula e entrega quando retomada.\nEventos confirmados são apagados após 30 dias; não confirmados, nunca.\n\nConsulte a cada 5 a 10 segundos em operação normal. Se a resposta vier cheia (`limit`\nitens), consulte de novo logo depois de confirmar, sem esperar o intervalo. Em `429`,\nrespeite o `Retry-After`. Os campos opcionais do envelope (`sourceAppId`, `metadata`,\n`delivery`) só aparecem quando têm valor. O caminho antigo `/v1/events/:polling`, com\nbarra, continua respondendo por compatibilidade e não deve ser usado em integração nova.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "events:polling"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "description": {
                    "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nQuantidade máxima de eventos na resposta. Padrão 100, máximo 200: valores maiores são\nreduzidos para 200 e valores menores que 1, elevados para 1. Se a resposta vier cheia,\nconsulte de novo logo depois de confirmar.\n",
                    "type": "text/plain"
                  },
                  "key": "limit",
                  "value": "100"
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [
            {
              "name": "Eventos pendentes. Array vazio quando não há nada.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events:polling"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nQuantidade máxima de eventos na resposta. Padrão 100, máximo 200: valores maiores são\nreduzidos para 200 e valores menores que 1, elevados para 1. Se a resposta vier cheia,\nconsulte de novo logo depois de confirmar.\n",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "100"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "[\n  {\n    \"eventId\": \"c0a8f1e2-3d4b-4c5a-9e6f-7a8b9c0d1e2f\",\n    \"eventType\": \"CREATED\",\n    \"orderId\": \"9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e\",\n    \"orderURL\": \"https://api.meupedido.io/open-delivery/v1/orders/9b1e2d3c-4f5a-4b6c-8d7e-0f1a2b3c4d5e\",\n    \"createdAt\": \"2026-09-19T14:32:10Z\"\n  },\n  {\n    \"eventId\": \"e2c0f3a4-5d6b-4e7c-9f8a-0b1c2d3e4f5a\",\n    \"eventType\": \"CANCELLED\",\n    \"orderId\": \"7c4d5e6f-8a9b-4c0d-9e1f-2a3b4c5d6e7f\",\n    \"orderURL\": \"https://api.meupedido.io/open-delivery/v1/orders/7c4d5e6f-8a9b-4c0d-9e1f-2a3b4c5d6e7f\",\n    \"createdAt\": \"2026-09-19T14:33:40Z\",\n    \"metadata\": {\n      \"reason\": \"Cliente desistiu do pedido.\",\n      \"code\": \"CONSUMER_CANCELLATION_REQUESTED\"\n    }\n  }\n]",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "`limit` não é um inteiro, como em `?limit=abc` ou num valor fora de int32. Formato\nValidationProblemDetails do ASP.NET, com `Content-Type: application/problem+json`, e\n`errors` aponta o parâmetro. Estar fora da faixa não é erro: 0 ou menos vira 1, e acima\nde 200 vira 200.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events:polling"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nQuantidade máxima de eventos na resposta. Padrão 100, máximo 200: valores maiores são\nreduzidos para 200 e valores menores que 1, elevados para 1. Se a resposta vier cheia,\nconsulte de novo logo depois de confirmar.\n",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "100"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/problem+json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{\n  \"type\": \"https://tools.ietf.org/html/rfc9110#section-15.5.1\",\n  \"title\": \"One or more validation errors occurred.\",\n  \"status\": 400,\n  \"errors\": {\n    \"limit\": [\n      \"The value 'abc' is not valid.\"\n    ]\n  },\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Sem token, token expirado ou inválido: corpo vazio, com `WWW-Authenticate`. Peça um token\nnovo uma vez e repita a chamada. Credencial pausada ou revogada pelo lojista: corpo com\n`invalid_token`, imediato, mesmo para tokens dentro da validade; o endpoint de token\ntambém vai recusá-la. Pare e avise o operador.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events:polling"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nQuantidade máxima de eventos na resposta. Padrão 100, máximo 200: valores maiores são\nreduzidos para 200 e valores menores que 1, elevados para 1. Se a resposta vier cheia,\nconsulte de novo logo depois de confirmar.\n",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "100"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "WWW-Authenticate",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"invalid_token\",\n  \"message\": \"A credencial foi pausada ou revogada pelo lojista.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O token é válido, mas a credencial não tem o escopo `orders:read`. Não peça outro token; o lojista precisa criar uma credencial com o escopo.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events:polling"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nQuantidade máxima de eventos na resposta. Padrão 100, máximo 200: valores maiores são\nreduzidos para 200 e valores menores que 1, elevados para 1. Se a resposta vier cheia,\nconsulte de novo logo depois de confirmar.\n",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "100"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"insufficient_scope\",\n  \"message\": \"A credencial não tem o escopo 'orders:read'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Mais de 600 requisições por minuto nesta credencial. Espere o `Retry-After` antes de tentar de novo; tentar antes não faz o limite abrir.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events:polling"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nQuantidade máxima de eventos na resposta. Padrão 100, máximo 200: valores maiores são\nreduzidos para 200 e valores menores que 1, elevados para 1. Se a resposta vier cheia,\nconsulte de novo logo depois de confirmar.\n",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "100"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"rate_limit_exceeded\",\n  \"message\": \"Limite de requisições excedido.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Falha interna. A mensagem não descreve a causa de propósito; informe o `traceId` ao suporte. Repita com backoff exponencial.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events:polling"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "Extensão MeuPedido: não existe no padrão 1.4.0.\n\nQuantidade máxima de eventos na resposta. Padrão 100, máximo 200: valores maiores são\nreduzidos para 200 e valores menores que 1, elevados para 1. Se a resposta vier cheia,\nconsulte de novo logo depois de confirmar.\n",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "100"
                    }
                  ],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"internal_error\",\n  \"message\": \"Erro interno. Informe o traceId ao suporte.\",\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Confirmar eventos",
          "request": {
            "name": "Confirmar eventos",
            "description": {
              "content": "Confirma o recebimento dos eventos e os tira do feed da sua credencial. Chame depois de\nprocessar e gravar; nunca antes. É a confirmação, e só ela, que move o feed: consultar não\nconfirma, e receber por webhook também não.\n\nO corpo é um array de objetos com o `id` de cada evento (o `eventId` do envelope). Envie\na lista inteira de um ciclo num POST só, e não um POST por evento. A resposta é `202` com\n`acknowledged`, a quantidade que saiu do feed. Ids que não pertencem à sua credencial, ids\nrepetidos, ids já confirmados e valores que não são GUID são ignorados em silêncio: a\nresposta continua `202`, apenas com a contagem menor. Isso é de propósito, para a operação\nnão virar um oráculo de quais eventos existem para outro consumidor. Um array vazio, ou\nnenhum corpo, responde `202` com `acknowledged: 0`.\n\nO padrão 1.4.0 pede também `orderId` e `eventType` em cada item; esta API aceita só o\n`id` e ignora os demais campos, então um cliente aderente que envie os três funciona.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "events",
                "acknowledgment"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "[\n  {\n    \"id\": \"{{eventId}}\"\n  }\n]",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Confirmação registrada. `acknowledged` é quantos eventos saíram do feed.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events",
                    "acknowledgment"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "[\n  {\n    \"id\": \"c0a8f1e2-3d4b-4c5a-9e6f-7a8b9c0d1e2f\"\n  },\n  {\n    \"id\": \"e2c0f3a4-5d6b-4e7c-9f8a-0b1c2d3e4f5a\"\n  }\n]",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Accepted",
              "code": 202,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"acknowledged\": 2\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O corpo não é JSON válido para esta operação. Formato ValidationProblemDetails do ASP.NET, com `Content-Type: application/problem+json`; `errors` aponta o campo. Corrija a requisição.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events",
                    "acknowledgment"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/problem+json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "[\n  {\n    \"id\": \"c0a8f1e2-3d4b-4c5a-9e6f-7a8b9c0d1e2f\"\n  },\n  {\n    \"id\": \"e2c0f3a4-5d6b-4e7c-9f8a-0b1c2d3e4f5a\"\n  }\n]",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{\n  \"type\": \"https://tools.ietf.org/html/rfc9110#section-15.5.1\",\n  \"title\": \"One or more validation errors occurred.\",\n  \"status\": 400,\n  \"errors\": {\n    \"$\": [\n      \"'<' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0.\"\n    ]\n  },\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Sem token, token expirado ou inválido: corpo vazio, com `WWW-Authenticate`. Peça um token\nnovo uma vez e repita a chamada. Credencial pausada ou revogada pelo lojista: corpo com\n`invalid_token`, imediato, mesmo para tokens dentro da validade; o endpoint de token\ntambém vai recusá-la. Pare e avise o operador.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events",
                    "acknowledgment"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "[\n  {\n    \"id\": \"c0a8f1e2-3d4b-4c5a-9e6f-7a8b9c0d1e2f\"\n  },\n  {\n    \"id\": \"e2c0f3a4-5d6b-4e7c-9f8a-0b1c2d3e4f5a\"\n  }\n]",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "WWW-Authenticate",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"invalid_token\",\n  \"message\": \"A credencial foi pausada ou revogada pelo lojista.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "O token é válido, mas a credencial não tem o escopo `orders:read`. Não peça outro token; o lojista precisa criar uma credencial com o escopo.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events",
                    "acknowledgment"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "[\n  {\n    \"id\": \"c0a8f1e2-3d4b-4c5a-9e6f-7a8b9c0d1e2f\"\n  },\n  {\n    \"id\": \"e2c0f3a4-5d6b-4e7c-9f8a-0b1c2d3e4f5a\"\n  }\n]",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"insufficient_scope\",\n  \"message\": \"A credencial não tem o escopo 'orders:read'.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "`Content-Type` diferente de `application/json` com corpo presente. Formato ProblemDetails do ASP.NET, com `Content-Type: application/problem+json`.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events",
                    "acknowledgment"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/problem+json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "[\n  {\n    \"id\": \"c0a8f1e2-3d4b-4c5a-9e6f-7a8b9c0d1e2f\"\n  },\n  {\n    \"id\": \"e2c0f3a4-5d6b-4e7c-9f8a-0b1c2d3e4f5a\"\n  }\n]",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unsupported Media Type",
              "code": 415,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/problem+json"
                }
              ],
              "body": "{\n  \"type\": \"https://tools.ietf.org/html/rfc9110#section-15.5.16\",\n  \"title\": \"Unsupported Media Type\",\n  \"status\": 415,\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Mais de 600 requisições por minuto nesta credencial. Espere o `Retry-After` antes de tentar de novo; tentar antes não faz o limite abrir.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events",
                    "acknowledgment"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "[\n  {\n    \"id\": \"c0a8f1e2-3d4b-4c5a-9e6f-7a8b9c0d1e2f\"\n  },\n  {\n    \"id\": \"e2c0f3a4-5d6b-4e7c-9f8a-0b1c2d3e4f5a\"\n  }\n]",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"error\": \"rate_limit_exceeded\",\n  \"message\": \"Limite de requisições excedido.\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "name": "Falha interna. A mensagem não descreve a causa de propósito; informe o `traceId` ao suporte. Repita com backoff exponencial.",
              "originalRequest": {
                "url": {
                  "path": [
                    "v1",
                    "events",
                    "acknowledgment"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "[\n  {\n    \"id\": \"c0a8f1e2-3d4b-4c5a-9e6f-7a8b9c0d1e2f\"\n  },\n  {\n    \"id\": \"e2c0f3a4-5d6b-4e7c-9f8a-0b1c2d3e4f5a\"\n  }\n]",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"error\": \"internal_error\",\n  \"message\": \"Erro interno. Informe o traceId ao suporte.\",\n  \"traceId\": \"00-8a3f1c2e9b4d5f6a7b8c9d0e1f2a3b4c-5d6e7f8a9b0c1d2e-00\"\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    }
  ],
  "auth": {
    "type": "oauth2",
    "oauth2": [
      {
        "key": "accessToken",
        "value": "{{accessToken}}",
        "type": "string"
      },
      {
        "key": "addTokenTo",
        "value": "header",
        "type": "string"
      },
      {
        "key": "headerPrefix",
        "value": "Bearer",
        "type": "string"
      },
      {
        "key": "tokenType",
        "value": "Bearer",
        "type": "string"
      },
      {
        "key": "grant_type",
        "value": "client_credentials",
        "type": "string"
      },
      {
        "key": "accessTokenUrl",
        "value": "{{baseUrl}}/oauth/token",
        "type": "string"
      },
      {
        "key": "clientId",
        "value": "{{clientId}}",
        "type": "string"
      },
      {
        "key": "clientSecret",
        "value": "{{clientSecret}}",
        "type": "string"
      },
      {
        "key": "scope",
        "value": "orders:read orders:write merchant:read catalog:read",
        "type": "string"
      },
      {
        "key": "client_authentication",
        "value": "body",
        "type": "string"
      },
      {
        "key": "tokenName",
        "value": "MeuPedido",
        "type": "string"
      }
    ]
  },
  "event": [],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.meupedido.io/open-delivery",
      "description": "URL base da API. Há um único ambiente, o de produção."
    },
    {
      "key": "clientId",
      "value": "",
      "description": "client_id da credencial, exibido no painel do lojista."
    },
    {
      "key": "clientSecret",
      "value": "",
      "description": "client_secret mostrado uma única vez ao criar a credencial.",
      "type": "secret"
    },
    {
      "key": "accessToken",
      "value": "",
      "description": "Token emitido por POST /oauth/token. Preencha à mão ou use \"Get New Access Token\" na aba Authorization da coleção.",
      "type": "secret"
    },
    {
      "key": "merchantId",
      "value": "",
      "description": "Id da loja da credencial (claim merchant_id do token, merchant.id de todo pedido)."
    },
    {
      "key": "orderId",
      "value": "",
      "description": "Id do pedido (orderId dos eventos)."
    },
    {
      "key": "eventId",
      "value": "",
      "description": "Id do evento a confirmar (eventId do envelope)."
    }
  ],
  "info": {
    "name": "MeuPedido Open Delivery API",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": {
      "content": "A API pública do MeuPedido implementa os módulos **Order** e **Merchant** do padrão\n[Open Delivery 1.4.0](https://www.opendelivery.org.br), com o MeuPedido no papel de\n**aplicação de pedidos**: o pedido nasce no MeuPedido (cardápio digital, app, mesa ou\nmarketplace integrado) e o seu sistema, tipicamente um PDV ou um hub, recebe o aviso, lê o\npedido e o conduz até o fim.\n\nO ciclo de uma integração é sempre o mesmo: obter um token, consultar os eventos pendentes,\nbuscar o pedido em `orderURL`, confirmar o recebimento do evento e avançar o pedido com as\nações de ciclo de vida. O guia passo a passo está em\n[Primeiros passos](https://developer.meupedido.io/pt-BR/docs/getting-started).\n\n## Ambiente\n\nHá um único ambiente, o de produção, em `https://api.meupedido.io/open-delivery`. Para\nexperimentar sem tocar uma loja real, use a credencial de uma\n[loja de teste](https://developer.meupedido.io/pt-BR/docs/getting-started/first-steps/test-store):\nos pedidos dela chegam com `test: true`.\n\n## Autenticação\n\nOAuth 2.0 `client_credentials`. Troque `client_id` e `client_secret` por um token em\n`POST /oauth/token` e envie `Authorization: Bearer <access_token>` em toda chamada. O token\nvale 3600 segundos e não há refresh token: peça outro com as mesmas credenciais. Os escopos\n(`orders:read`, `orders:write`, `merchant:read`, `catalog:read`) são definidos ao criar a\ncredencial e viajam no token.\n\n## Convenções\n\n- Datas em ISO 8601, UTC, com sufixo `Z`.\n- Valores monetários como `{ \"value\": 49.9, \"currency\": \"BRL\" }`.\n- Ids de pedido, evento e loja são GUIDs.\n- No pedido, campo sem valor vem como `null`; no envelope de evento, campo opcional sem valor\n  é omitido.\n- Erros das rotas de negócio: `{ \"error\": \"<código estável>\", \"message\": \"<texto em pt-BR>\" }`.\n  O endpoint de token usa o formato do RFC 6749 (`error` e `error_description`).\n- Só HTTPS, servidor a servidor. Chamadas de navegador são aceitas apenas a partir de\n  `https://developer.meupedido.io` (playground do portal).\n\n## Limites\n\n600 requisições por minuto por credencial nas rotas autenticadas; 60 por minuto por endereço\nIP no endpoint de token, mais 10 falhas de autenticação por minuto por credencial. Ao exceder,\n`429` com `Retry-After`.\n\n## Extensões\n\nO que não existe no padrão 1.4.0 está marcado com `x-meupedido-extension: true` e com a frase\n\"Extensão MeuPedido\" na descrição: as ações `startPreparation` e `pickedUp`, o parâmetro\n`limit` da consulta de eventos, o cabeçalho `Idempotency-Key`, os tipos de evento além dos seis\ndo padrão e a entrega por webhook.\n\n## Suporte\n\nPortal: [developer.meupedido.io](https://developer.meupedido.io). Atendimento pelo\nWhatsApp: [wa.me/5511955021289](https://wa.me/5511955021289).\n\n## Crédito\n\nEste contrato é derivado e adaptado da *Open Delivery API Specification* 1.4.0, publicada pela\nAbrasel Nacional sob a licença Apache 2.0\n([github.com/Abrasel-Nacional/opendelivery](https://github.com/Abrasel-Nacional/opendelivery)).\nDescrições de campos do padrão foram traduzidas e ajustadas ao comportamento real desta API.\n\n\nContact Support:\n Name: MeuPedido Developers",
      "type": "text/plain"
    }
  }
}
