# Listar pedidos de produção

> Escopo: pedidos:ler. valor_centavos só com produtos:custos e custos.ver ou producao.receber de quem criou a chave.

URL: https://precificador3d.com.br/docs/api/referencia/listar-pedidos-producao

`GET https://api.precificador3d.com.br/v1/pedidos-producao`

Escopo: `pedidos:ler`. `valor_centavos` só com `produtos:custos` e `custos.ver` ou `producao.receber` de quem criou a chave.

Escopo: `pedidos:ler`.

## Parâmetros

| Nome | Onde | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- | --- |
| `limite` | query | integer | não | Itens por página, de 1 a 100. Acima de 25 conta como operação cara. (de 1 a 100; padrão 25) |
| `cursor` | query | string | não | Valor de `proximo_cursor` da página anterior. Opaco. (até 200 caracteres) |
| `ordem` | query | string | não | Ordenação. `-` na frente = decrescente. (padrão "-atualizado_em") Valores: `atualizado_em`, `-atualizado_em`, `criado_em`, `-criado_em`. |
| `atualizado_desde` | query | string (date-time) | não | Só o que mudou a partir deste instante. Use com `ordem=atualizado_em` para reconciliar depois de webhooks. |
| `If-None-Match` | header | string | não | ETag recebida antes. Se nada mudou, a resposta é `304` e não gasta a cota mensal. (até 100 caracteres) |
| `situacao` | query | string | não | Valores: `aberto`, `em_producao`, `finalizado`, `cancelado`. |
| `tipo` | query | string | não | Valores: `cliente`, `estoque`. |

## Resposta 200

Página de pedidos.

| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `dados` | array de PedidoProducao | sim | (0 a 100 itens) |
| `dados[].id` | string (uuid) | sim |  |
| `dados[].codigo` | string | sim |  |
| `dados[].tipo` | string | sim | Valores: `cliente`, `estoque`. |
| `dados[].origem` | string | sim | Valores: `cotacao`, `manual`, `repor`, `api`. |
| `dados[].cotacao_id` | string (uuid) \| null | sim |  |
| `dados[].cliente_nome` | string \| null | sim | null em pedido para estoque e depois da anonimização (LGPD). |
| `dados[].prazo` | string (date) \| null | sim |  |
| `dados[].prioridade` | string | sim | Valores: `normal`, `urgente`. |
| `dados[].situacao` | string | sim | Valores: `aberto`, `em_producao`, `finalizado`, `cancelado`. |
| `dados[].pagamento_situacao` | string \| null | sim | Valores: `nao_pago`, `sinal_pago`, `pago`, `null`. |
| `dados[].itens` | array de object | sim |  |
| `dados[].itens[].id` | string (uuid) | sim |  |
| `dados[].itens[].tipo` | string | sim | Valores: `catalogo`, `cotacao`, `avulso`. |
| `dados[].itens[].produto_id` | string (uuid) \| null | sim |  |
| `dados[].itens[].variacao_id` | string (uuid) \| null | sim |  |
| `dados[].itens[].nome` | string | sim |  |
| `dados[].itens[].quantidade` | integer | sim |  |
| `dados[].itens[].situacao` | string | sim | Valores: `ativo`, `finalizado`, `retirado`. |
| `dados[].itens[].etapa` | string \| null | sim | Nome da etapa atual do item. |
| `dados[].criado_em` | string (date-time) | sim |  |
| `dados[].atualizado_em` | string (date-time) | sim |  |
| `dados[].finalizado_em` | string (date-time) \| null | sim |  |
| `dados[].valor_centavos` | integer | não | [custos] Valor do pedido de cliente. (de 0 a 100000000000) |
| `proximo_cursor` | string \| null | sim | Cursor da próxima página, ou `null` no fim. |

```json
{
  "dados": [
    {
      "id": "a0b1c2d3-e4f5-4a6b-8c7d-9e0f1a2b3c4d",
      "codigo": "OP-0107",
      "tipo": "cliente",
      "origem": "api",
      "cotacao_id": null,
      "cliente_nome": "Ana Lima",
      "prazo": "2026-10-20",
      "prioridade": "normal",
      "situacao": "aberto",
      "pagamento_situacao": "nao_pago",
      "itens": [
        {
          "id": "e4f5a6b7-c8d9-4e0f-1a2b-3c4d5e6f7a8b",
          "tipo": "catalogo",
          "produto_id": "5a6b7c8d-9e0f-4a1b-2c3d-4e5f6a7b8c9d",
          "variacao_id": "6b7c8d9e-0f1a-4b2c-3d4e-5f6a7b8c9d0e",
          "nome": "Chaveiro Dragão · Azul",
          "quantidade": 200,
          "situacao": "ativo",
          "etapa": "Fila"
        }
      ],
      "criado_em": "2026-10-05T10:00:00-03:00",
      "atualizado_em": "2026-10-05T10:00:00-03:00",
      "finalizado_em": null
    }
  ]
}
```

## Outras respostas

- **304**: Nada mudou desde a ETag informada.
- **400** (`dados_invalidos`): Dados, filtro, cursor ou cabeçalho inválido.
- **401** (`nao_autenticado`): Chave ausente, malformada, desconhecida, revogada ou expirada (a resposta é a mesma para todos os casos).
- **403** (`escopo_insuficiente`): Escopo insuficiente, conta bloqueada, módulo desligado ou chave suspensa.
- **429** (`limite_excedido`): Limite de uso excedido (rajada, minuto, mês ou requisições simultâneas).
- **500** (`erro_interno`): Erro interno. O detalhe fica no log, ligado ao requisicao_id.
- **503** (`indisponivel`): API desligada, sob pressão (disjuntor aberto) ou no limite global da plataforma.

## Exemplos

**cURL**

```bash
curl "https://api.precificador3d.com.br/v1/pedidos-producao?limite=25" \
  -H "Authorization: Bearer $PC3D_CHAVE"
```

**JavaScript**

```js
const resposta = await fetch('https://api.precificador3d.com.br/v1/pedidos-producao?limite=25', {
  headers: {
    Authorization: `Bearer ${process.env.PC3D_CHAVE}`,
  },
});
if (!resposta.ok) {
  const erro = await resposta.json(); // application/problem+json
  throw new Error(`${erro.codigo}: ${erro.detail} (${erro.requisicao_id})`);
}
const dados = await resposta.json();
```

**Python**

```python
import os

import requests

resposta = requests.get(
    "https://api.precificador3d.com.br/v1/pedidos-producao",
    params={
        "limite": 25,
    },
    headers={
        "Authorization": f"Bearer {os.environ['PC3D_CHAVE']}",
    },
    timeout=10,
)
resposta.raise_for_status()
dados = resposta.json()
```
