Contactos

Actualizar un contacto

Actualiza parcialmente un contacto (envía solo los campos que cambian).

PATCH
/api/v1/contacts/{contactId}

Ejemplos de petición

curl https://app.filmo.io/api/v1/contacts/cont_8f2a1c \
  --request PATCH \
  --header "Authorization: Bearer $FILMO_API_KEY" \
  --header "Idempotency-Key: $(uuidgen 2>/dev/null || cat /proc/sys/kernel/random/uuid)" \
  --header 'Content-Type: application/json' \
  --data '{
  "role": "client",
  "status": "active",
  "emails": [
    {
      "email": "facturacion@example.com",
      "label": "Facturación"
    },
    {
      "email": "produccion@example.com",
      "label": "Producción"
    }
  ],
  "discountPercentage": 10
}'
{
  "data": {
    "id": "contact_9f3a2b",
    "name": "Example contact",
    "contactType": "person",
    "role": "client",
    "status": "active",
    "nif": "B00000000",
    "commercialName": "Example commercial name",
    "position": "Example position",
    "contactNumber": "2026-0001",
    "emails": [
      {
        "id": "email_9f3a2b",
        "label": "Main",
        "email": "ana.garcia@example.com",
        "isPrimary": true
      }
    ],
    "billingEmail": "ana.garcia@example.com",
    "phoneNumbers": [
      {
        "id": "phone_number_9f3a2b",
        "label": "Main",
        "number": "+34 600 000 000",
        "countryCode": "+34",
        "isPrimary": true
      }
    ],
    "websites": [
      {
        "id": "website_9f3a2b",
        "label": "Main",
        "url": "https://example.com/resource"
      }
    ],
    "addresses": [
      {
        "id": "address_9f3a2b",
        "label": "Main",
        "addressLine1": "Calle de Ejemplo 12",
        "addressLine2": "Calle de Ejemplo 12",
        "city": "Madrid",
        "province": "Madrid",
        "postcode": "28001",
        "country": "ES",
        "isMain": true
      }
    ],
    "folder": "Example folder",
    "discountPercentage": 1,
    "preferredLanguage": "es-ES",
    "currency": "EUR",
    "paymentMethod": {
      "type": "bank_transfer",
      "customValue": "Example custom value"
    },
    "paymentDays": [
      1
    ],
    "expirationDays": 1,
    "subscribedToMarketing": true,
    "isAppUser": true,
    "customFields": {
      "example": "example"
    },
    "createdAt": "2026-09-01T08:00:00.000Z",
    "updatedAt": "2026-09-01T08:00:00.000Z",
    "relatedContacts": [
      {
        "id": "related_contact_9f3a2b",
        "name": "Example related contact",
        "commercialName": "Example commercial name",
        "contactType": "person",
        "role": "client",
        "status": "active",
        "relationRole": "Example relation role"
      }
    ]
  }
}

Generado a partir del esquema

Las listas de emails, teléfonos y direcciones sustituyen por completo la lista existente. Devuelve el contacto actualizado en detalle.

Autorizaciones

Clave de API como Bearer, con el permiso de abajo. contacts:write

Cabeceras

Idempotency-Keystring

Identificador único de la petición, elegido por el cliente (sirve un UUID). Entre 1 y 255 caracteres: una cabecera vacía se rechaza con 400 validation_error, porque el cliente se creería protegido. Repetir la misma clave con el MISMO cuerpo en 24 h devuelve la respuesta guardada sin volver a ejecutar, con la cabecera Idempotent-Replay: true. Con un cuerpo DISTINTO devuelve 422. Es la forma segura de reintentar tras un tiempo de espera de red.

Límites: longitud mín. 1, longitud máx. 255

Ejemplo:"9f1c2f4e-3a5b-4f6d-8e7a-0b1c2d3e4f5a"

If-Matchstring

Bloqueo optimista: el ETag que leíste del recurso (o *). Si el recurso ha cambiado desde entonces, la escritura se rechaza con 412 precondition_failed antes de hacer nada; léelo de nuevo y reintenta. Sin la cabecera, la escritura siempre se realiza.

Ejemplo:"\"3sT3d9pBvZq4h2N0w8x1YkLmQ7c\""

Parámetros de ruta

contactIdstringObligatorio

Identificador del contacto.

Límites: longitud mín. 1

Cuerpo

application/json

Esquema del cuerpo: ContactUpdateBody

namestring

Nombre del contacto (persona o empresa).

Límites: longitud mín. 1, longitud máx. 200

contactTypestring

Tipo de contacto: person (particular) o company (negocio).

Opciones disponibles: person, company

rolestring

Rol del contacto: client, provider, lead, debtor, creditor, student, teacher o unspecified.

Opciones disponibles: client, provider, lead, debtor, creditor, student, teacher, unspecified

statusstring

Estado del contacto: active (operativo), inactive (desactivado) o archived (cerrado, conservado como histórico).

Opciones disponibles: active, inactive, archived

nifstring | null

NIF/CIF o número de identificación fiscal; null lo borra ("" también se normaliza a null).

Límites: longitud máx. 20

commercialNamestring | null

Nombre comercial; null lo borra.

Límites: longitud máx. 200

positionstring | null

Cargo o puesto; null lo borra.

Límites: longitud máx. 200

emailsobject[]

Lista de direcciones de correo electrónico que REEMPLAZA por completo la lista existente (máx. 20). Los ids internos los genera el servidor.

Límites: máx. 20 elementos

Mostrar atributos hijos
emails.emailstring<email>Obligatorio

Dirección de email; se valida el formato.

Límites: longitud máx. 200

emails.labelstring

Etiqueta descriptiva del email (p. ej. "Personal", "Facturación").

Límites: longitud máx. 100

emails.isPrimaryboolean

Marca este correo electrónico como el principal del contacto.

phoneNumbersobject[]

Lista de teléfonos que REEMPLAZA por completo la lista existente (máx. 20). Los ids internos los genera el servidor.

Límites: máx. 20 elementos

Mostrar atributos hijos
phoneNumbers.numberstringObligatorio

Número de teléfono.

Límites: longitud mín. 1, longitud máx. 50

phoneNumbers.labelstring

Etiqueta descriptiva del teléfono (p. ej. "Móvil", "Oficina").

Límites: longitud máx. 100

phoneNumbers.countryCodestring

Prefijo telefónico internacional del país (p. ej. "+34").

Límites: longitud máx. 10

phoneNumbers.isPrimaryboolean

Marca este teléfono como el principal del contacto.

websitesobject[]

Lista de sitios web que REEMPLAZA por completo la lista existente (máx. 20). Los ids internos los genera el servidor.

Límites: máx. 20 elementos

Mostrar atributos hijos
websites.urlstring<uri>Obligatorio

URL del sitio web; se valida el formato.

Límites: longitud máx. 300

websites.labelstring

Etiqueta descriptiva del sitio web (p. ej. "Web corporativa", "LinkedIn").

Límites: longitud máx. 100

addressesobject[]

Lista de direcciones que REEMPLAZA por completo la lista existente (máx. 20). Envía el id de cada dirección existente que quieras conservar; las direcciones sin id se crean con uno nuevo. Un id que no es una dirección de este contacto responde 400. Omitir una dirección que un pedido usa como dirección de facturación o de envío responde 409 address_in_use y no se cambia nada.

Límites: máx. 20 elementos

Mostrar atributos hijos
addresses.idstring

Identificador de una dirección existente para conservarla; omítelo para añadir una nueva.

Límites: longitud mín. 1

addresses.labelstring

Etiqueta descriptiva de la dirección (p. ej. "Facturación", "Envío").

Límites: longitud máx. 100

addresses.addressLine1stringObligatorio

Primera línea de la dirección (calle y número). Obligatorio.

Límites: longitud mín. 1, longitud máx. 300

addresses.addressLine2string

Segunda línea de la dirección (piso, puerta, etc.).

Límites: longitud máx. 300

addresses.citystring

Ciudad de la dirección.

Límites: longitud máx. 200

addresses.provincestring

Provincia o región de la dirección.

Límites: longitud máx. 200

addresses.postcodestring

Código postal de la dirección.

Límites: longitud máx. 20

addresses.countrystring

País de la dirección (código o nombre corto).

Límites: longitud máx. 10

addresses.isMainboolean

Marca esta dirección como la principal del contacto.

folderstring | null

Carpeta o agrupación organizativa; null la borra.

Límites: longitud máx. 200

contactNumberstring | null

Número de contacto (referencia interna); null lo borra.

Límites: longitud máx. 50

discountPercentagenumber | null

Porcentaje de descuento general del contacto (0-100); null lo borra.

Límites: mín. 0, máx. 100

subscribedToMarketingboolean

Si el contacto está suscrito a comunicaciones de marketing.

Respuesta

application/json

Respuesta correcta.

Esquema de la respuesta: ContactDetailDto

Sobre: ContactDetailResponse. meta.warnings solo aparece cuando la operación está obsoleta.

Cabeceras: X-Request-Id · RateLimit-Limit · RateLimit-Remaining · RateLimit-Reset · ETag · Idempotent-Replay

dataobject

El contacto completo, tal como lo devuelve la API.

Mostrar atributos hijos
data.idstring

Identificador único del contacto.

data.namestring

Nombre del contacto (persona o empresa).

data.contactTypestring

Tipo de contacto: person (particular) o company (negocio).

Opciones disponibles: person, company

data.rolestring

Rol del contacto: client, provider, lead, debtor, creditor, student, teacher o unspecified.

Opciones disponibles: client, provider, lead, debtor, creditor, student, teacher, unspecified

data.statusstring

Estado del contacto: active (operativo), inactive (desactivado) o archived (cerrado, conservado como histórico).

Opciones disponibles: active, inactive, archived

data.nifstring | null

NIF/CIF o número de identificación fiscal; null si no se ha registrado.

data.commercialNamestring | null

Nombre comercial; null si coincide con el nombre o no consta.

data.positionstring | null

Cargo o puesto de la persona de contacto; null si no está registrado.

data.contactNumberstring | null

Número de contacto asignado por la cuenta (referencia interna); null si no consta.

data.emailsobject[]

Lista de direcciones de correo electrónico del contacto.

Mostrar atributos hijos
data.emails.idstring

Identificador interno del correo electrónico dentro del contacto.

data.emails.labelstring | null

Etiqueta descriptiva del email; null si no tiene.

data.emails.emailstring

Dirección de email.

data.emails.isPrimaryboolean

Si este es el email principal del contacto.

data.billingEmailstring | null

Email de facturación dedicado; null significa que se usa el email principal.

data.phoneNumbersobject[]

Lista de teléfonos del contacto.

Mostrar atributos hijos
data.phoneNumbers.idstring

Identificador interno del teléfono dentro del contacto.

data.phoneNumbers.labelstring | null

Etiqueta descriptiva del teléfono; null si no tiene.

data.phoneNumbers.numberstring

Número de teléfono.

data.phoneNumbers.countryCodestring | null

Prefijo telefónico internacional del país (p. ej. "+34"); null si no consta.

data.phoneNumbers.isPrimaryboolean

Si este es el teléfono principal del contacto.

data.websitesobject[]

Lista de sitios web del contacto.

Mostrar atributos hijos
data.websites.idstring

Identificador interno del sitio web dentro del contacto.

data.websites.labelstring | null

Etiqueta descriptiva del sitio web; null si no tiene.

data.websites.urlstring

URL del sitio web.

data.addressesobject[]

Lista de direcciones del contacto.

Mostrar atributos hijos
data.addresses.idstring

Identificador interno de la dirección dentro del contacto.

data.addresses.labelstring | null

Etiqueta descriptiva de la dirección; null si no tiene.

data.addresses.addressLine1string | null

Primera línea de la dirección; null si no consta.

data.addresses.addressLine2string | null

Segunda línea de la dirección; null si no consta.

data.addresses.citystring | null

Ciudad; null si no consta.

data.addresses.provincestring | null

Provincia o región; null si no se ha registrado.

data.addresses.postcodestring | null

Código postal; null si no se ha registrado.

data.addresses.countrystring | null

País; null si no consta.

data.addresses.isMainboolean

Si esta es la dirección principal del contacto.

data.folderstring | null

Carpeta o agrupación organizativa; null si el contacto no está clasificado.

data.discountPercentagenumber | null

Porcentaje de descuento general del contacto (0-100); null si no hay descuento configurado.

data.preferredLanguagestring | null

Idioma preferido del contacto; null si no se ha registrado.

data.currencystring | null

Moneda por defecto del contacto como código ISO 4217; null si no consta.

data.paymentMethodobject | null

Método de pago preferido del contacto; null si no está configurado.

Mostrar atributos hijos
data.paymentMethod.typestring

Tipo de método de pago: bank_transfer, card, cash, sepa_direct_debit u other.

Opciones disponibles: bank_transfer, card, cash, other, sepa_direct_debit

data.paymentMethod.customValuestring | null

Detalle en texto libre cuando el tipo es "other" (por ejemplo, un método registrado antes de configurarse); null en caso contrario.

data.paymentDaysinteger[] | null

Días del mes en que el contacto hace pagos; null si no está configurado.

data.expirationDaysinteger | null

Días de vencimiento por defecto de las facturas del contacto; null si no está configurado.

data.subscribedToMarketingboolean

Si el contacto está suscrito a comunicaciones de marketing.

data.isAppUserboolean

Si el contacto tiene acceso a la app.

data.customFieldsobject<string, any>

Valores de los campos personalizados por identificador de campo personalizado; las definiciones están en /api/v1/custom-fields.

data.createdAtstring<date-time>

Fecha de creación en ISO 8601 con desplazamiento.

data.updatedAtstring<date-time>

Fecha de la última actualización en ISO 8601 con desplazamiento.

data.relatedContactsobject[]

Contactos relacionados con este contacto (p. ej. las personas de una empresa).

Mostrar atributos hijos
data.relatedContacts.idstring

Identificador único del contacto relacionado.

data.relatedContacts.namestring

Nombre del contacto relacionado.

data.relatedContacts.commercialNamestring | null

Nombre comercial del contacto relacionado; null si no consta.

data.relatedContacts.contactTypestring

Tipo del contacto relacionado: person o company.

Opciones disponibles: person, company

data.relatedContacts.rolestring

Rol del contacto relacionado.

Opciones disponibles: client, provider, lead, debtor, creditor, student, teacher, unspecified

data.relatedContacts.statusstring

Estado del contacto relacionado: active, inactive o archived.

Opciones disponibles: active, inactive, archived

data.relatedContacts.relationRolestring | null

Rol de la relación entre los dos contactos (p. ej. "empleado de"); null si no consta.

metaobject

Información adicional sobre la respuesta.

Mostrar atributos hijos
meta.warningsobject[]

Avisos del ciclo de vida; solo aparecen cuando la operación está obsoleta.

Mostrar atributos hijos
meta.warnings.codestring

Código de aviso estable.

Opciones disponibles: deprecated

meta.warnings.messagestring

Para personas: qué está obsoleto, hasta cuándo y qué usar.

meta.warnings.sunsetstring

Día (YYYY-MM-DD) en que la operación deja de estar disponible.

meta.warnings.replacementstring | null

operationId de la operación que hay que usar en su lugar, o null si no hay ninguna.

Errores

EstadoCódigosSignificado
400validation_errorConsulta o cuerpo mal formados. errors[] enumera cada campo erróneo con su código estable.
404not_foundNo existe o queda fuera del alcance de la clave de API.
409conflictEl estado actual del recurso impide la operación, ya hay en curso una petición con esa Idempotency-Key, u otra escritura condicional (If-Match) retuvo el recurso durante más de cinco segundos. errors[0].code indica cuál: in_progress y lock_timeout se resuelven reintentando; invalid_state no, porque el estado del recurso prohíbe la operación.
412precondition_failedLa etiqueta de entidad If-Match no coincide con la representación actual. Vuelve a leer el recurso y reintenta.
422idempotency_key_reusedLa misma clave se usó antes con un cuerpo distinto. Cambia la clave.

401, 403, 429, 500 los puede devolver cualquier operación. Errores

Obsolescencia

Esta operación no está obsoleta. Las obsolescencias se anuncian con la cabecera Deprecation y una fecha de retirada. Política de versiones

  • CRM

    Contacto

    El contacto, tal como lo devuelve la API.

¿Te ha resultado útil esta página?