---
title: "Consultar una recolección"
method: GET
path: "/pickups/{id}"
tags: ["pickups"]
---

# Consultar una recolección

`GET /pickups/{id}`

## Request

- Base URL: `https://api.enviadores.com.mx/api/v1`
- URL: `https://api.enviadores.com.mx/api/v1/pickups/{id}`
- Auth: HTTP bearer

Estado de una solicitud de recolección propia — úsalo para dar seguimiento mientras está en `awaiting_confirmation` (el solicitante también recibe un correo cuando se resuelve). Visibilidad idéntica a la del envío al que pertenece, en paralelo deliberado con `GET /cancellations/{id}`. Requiere scope `pickups:read`.

## Path parameters

- `id` integer, required

## Headers

- `X-PDV-ID` string

## Response `200`

La recolección.

- object
  - `success` unknown, required
  - `data` object, required
    - `pickup` Pickup, required
      - `id` integer, required: Id numérico de la recolección.
      - `display_id` string, required: Live: formato `PR%08d`. Sandbox: `SBX-PU-<id>`.
      - `shipment_id` string, nullable, required
      - `status` 'pending' | 'scheduled' | 'awaiting_confirmation' | 'failed' | 'cancelled', required: Una solicitud SIEMPRE nace en `awaiting_confirmation` (se está gestionando; NO la presentes como confirmada). Pasa a `scheduled` cuando el equipo la confirma con la paquetería — ahí llegan `confirmed_window_*` y `confirmation_number`, y se envía el correo al solicitante. `failed` = no se pudo agendar (entregar en sucursal). `cancelled` = la canceló quien la pidió. `pending` no se usa. El sandbox devuelve `awaiting_confirmation`, igual que producción.
      - `carrier` string, nullable: Paquetería física que hará la recolección.
      - `requested_window_start` string, nullable: ISO-8601 UTC (Z). Inicio de la ventana solicitada.
      - `requested_window_end` string, nullable: ISO-8601 UTC (Z). Fin de la ventana solicitada.
      - `confirmed_window_start` string, nullable: ISO-8601 UTC (Z). Ventana confirmada por la paquetería, cuando la devuelve.
      - `confirmed_window_end` string, nullable: ISO-8601 UTC (Z).
      - `confirmation_number` string, nullable: Folio/referencia de recolección de la paquetería.
      - `created_at` string, nullable
      - `updated_at` string, nullable
  - `requestId` string, required: Correlación de logs; también en el header `X-Request-Id`.

## Other responses

- `401`: `UNAUTHORIZED` — credencial Bearer ausente/mal formada o llave desconocida/revocada (respuesta idéntica en ambos casos).
- `403`: `INSUFFICIENT_SCOPE` — a la llave le falta el scope requerido · `PDV_NOT_ALLOWED` — violación del carril X-PDV-ID. Nota de orden: el limitador por llave corre ANTES del gate de scope, así que una petición con scope incorrecto y el bucket agotado responde `429 RATE_LIMITED` (el 429 tiene precedencia sobre este 403).
- `404`: `NOT_FOUND` — no existe o el envío subyacente no pertenece al usuario de la llave (respuesta idéntica).
- `429`: `RATE_LIMITED` — bucket de la llave agotado. Espera `Retry-After` s (`details.retry_after_ms` para el hint fino). El limitador corre antes del gate de scope, por lo que un 429 tiene precedencia sobre un 403 `INSUFFICIENT_SCOPE`.
- `500`: `GET_ERROR`.

---

[API](https://skmtc.dev/enviadores/apis/enviadores-public-api.md) · [All operations](https://skmtc.dev/enviadores/apis/enviadores-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/enviadores/apis/enviadores-public-api/revisions/3633f08c889c?raw)
