---
title: "Editar un destinatario"
method: PATCH
path: "/recipients/{id}"
tags: ["addresses"]
---

# Editar un destinatario

`PATCH /recipients/{id}`

## Request

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

Actualización PARCIAL de un destinatario visible. Requiere scope `addresses:write`. `sender_id` es inmutable (no se re-asigna de remitente). Solo los campos presentes cambian; al menos uno. Los requeridos pueden cambiarse pero no vaciarse; los opcionales aceptan `null`. 404 idéntico para inexistente y no-visible.

## Path parameters

- `id` string, required

## Headers

- `X-PDV-ID` string

## Request body

- RecipientUpdateRequest: Actualización PARCIAL. `sender_id` NO puede cambiarse (los destinatarios no se re-asignan de remitente) → 422 si se envía. Misma disciplina que `SenderUpdateRequest`: al menos un campo, no vaciar requeridos, `null` limpia opcionales, unificar con OTRO destinatario del MISMO remitente → 409 `DUPLICATE_ADDRESS`.
  - `alias` string, nullable
  - `name` string
  - `phone` string
  - `email` string, email, nullable
  - `street` string
  - `number` string, nullable
  - `colonia` string
  - `city` string
  - `state` string
  - `postal_code` string
  - `country` 'MX'
  - `referencia` string, nullable
  - `delivery_instructions` string, nullable

## Response `200`

El destinatario actualizado.

- object
  - `success` unknown, required
  - `data` object, required
    - `recipient` Recipient, required: Recurso destinatario. Su `id` sirve como `to_id` en `POST /rates` y `POST /shipments` (requiere `from_id` del remitente dueño).
      - `id` string, required
      - `sender_id` string, required
      - `alias` string, nullable, required
      - `name` string, nullable, required
      - `phone` string, nullable, required
      - `email` string, nullable, required
      - `street` string, nullable, required
      - `number` string, nullable, required
      - `colonia` string, nullable, required
      - `city` string, nullable, required
      - `state` string, nullable, required
      - `postal_code` string, nullable, required
      - `referencia` string, nullable, required
      - `delivery_instructions` string, nullable, required
      - `created_at` string, nullable, required: ISO-8601 UTC (Z).
  - `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` — ruta desconocida, recurso ajeno/inexistente, o la API pública no está habilitada (respuestas indistinguibles por diseño).
- `409`: `DUPLICATE_ADDRESS` — la edición dejaría este destinatario idéntico a OTRO del MISMO remitente. La fila no se modifica.
- `422`: `VALIDATION_ERROR` (details.fields) — campo desconocido, `sender_id` presente (inmutable), requerido vaciado, `country` ≠ MX, o cuerpo sin campos editables.
- `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`: `SERVER_ERROR` — falla interna (p. ej. lectura de base de datos). Es transitoria; reintenta con backoff.

---

[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)
