Skip to content

Crear contacto

POST /api/v1/contacts

Este endpoint permite registrar un nuevo contacto en la plataforma.

Además de los datos básicos como nombre y documento, permite registrar múltiples vías de contacto (teléfonos, correos) y campos adicionales personalizados, lo que lo convierte en un punto de entrada flexible para la creación de nuevos registros. El sistema valida la unicidad de las vías de contacto dentro del equipo y aplica las reglas de negocio definidas para los campos adicionales.

ℹ Recuerda que:

La URL base para todas las solicitudes es: https://tu-dominio.c3.pe

Importante: reemplaza tu-dominio por el nombre de dominio específico que te haya proporcionado C3.

Solicitud

Cabeceras

EncabezadoTipoObligatorioDescripción
AuthorizationString✅ SíToken de autenticación (Bearer Token).
Content-TypeString✅ SíDebe ser application/json.

Cuerpo de la solicitud (Body)

AtributoTipoObligatorioDescripción
nameString✅ SíNombre(s) del contacto. Máximo 255 caracteres.
last_nameString✅ SíApellido(s) del contacto. Máximo 255 caracteres.
doc_typeString✅ SíTipo de documento. Valores permitidos: DNI, RUC, PASAPORTE, OTROS.
doc_numString❌ NoNúmero del documento. La validación de la longitud depende del doc_type: DNI (8 caracteres), RUC (11 caracteres), PASAPORTE (mínimo 6).
company_idInteger✅ SíIdentificador de la empresa a la que se asociará el contacto, Si no requiere asociar un contacto con una empresa, se debe enviar el valor 0.
contact_sourcesArray✅ SíLista de vías de contacto. Debe contener al menos un elemento. Vea la estructura detallada más adelante.
extra_fieldsArray❌ NoLista de campos adicionales personalizados. Importante: Si su equipo tiene campos adicionales configurados como obligatorios, deben ser incluidos en esta lista.
detailsString❌ NoNotas o detalles adicionales sobre el contacto.
is_vipBoolean❌ NoMarcar el contacto como VIP. Por defecto es false.

Estructura de contact_sources

Es un array de objetos, donde cada objeto representa una vía de contacto y debe tener la siguiente estructura:

AtributoTipoDescripción
typeStringTipo de vía de contacto. Valores permitidos: CELL_PHONE, PHONE, EMAIL.
sourceStringEl valor de la vía de contacto (el número de teléfono o el correo).

🛑 Mínimo una Vía de Contacto

Tenga en cuenta que no se permite enviar un arreglo vacío ([]) para contact_sources, ya que el contacto siempre debe tener al menos una vía de contacto de tipo (CELL_PHONE, PHONE o EMAIL).

Estructura de extra_fields

Es un array de objetos para los campos adicionales. Cada objeto debe contener el id del campo preconfigurado y su value.

AtributoTipoDescripción
idIntegerID del campo adicional configurado en el sistema.
valueString/ArrayValor a asignar. Para campos tipo checkbox, puede ser un array de strings.

Ejemplo de solicitud

http
POST /api/v1/contacts

El cuerpo de la solicitud debe enviarse en formato JSON e incluir los siguientes campos:

json
{
  "name": "Juan",
  "last_name": "Pérez",
  "doc_type": "DNI",
  "doc_num": "45678912",
  "details": "Cliente frecuente de Lima con interés en tecnología.",
  "contact_sources": [
    {
      "type": "CELL_PHONE",
      "source": "+51987654321"
    },
    {
      "type": "EMAIL",
      "source": "juan.perez20@example.com"
    }
  ],
  "company_id": 2,
  "extra_fields": [
    {
      "id": 23,
      "name": "Nivel de interés",
      "value": "Alto"
    },
    {
      "id": 25,
      "name": "Género",
      "value": "M"
    }
  ],
  "is_vip": true
}

Respuesta

En caso de éxito, la API devuelve el objeto del contacto recién creado.

Respuesta Exitosa 201

json
{
	"message": "Contacto creado exitósamente.",
	"data": {
		"id": 73,
		"name": "Juan",
		"last_name": "Pérez",
		"doc_type": "DNI",
		"doc_num": "45678912",
		"active": true,
		"details": "Cliente frecuente de Lima con interés en tecnología.",
		"company": {
			"id": 2,
			"name": "Elemental Solutions SAC",
			"ruc": "20567898766"
		},
		"extra_fields": [
			{
				"id": 23,
				"name": "Nivel de interés",
				"value": "Alto"
			},
			{
				"id": 25,
				"name": "Género",
				"value": "M"
			}
		],
		"contact_sources": [
			{
				"type": "CELL_PHONE",
				"source": "+51987654321"
			},
			{
				"type": "EMAIL",
				"source": "juan.perez20@example.com"
			}
		],
		"created_at": "2025-09-09T15:57:16.000000Z",
		"addresses": [],
		"is_vip": true
	}
}

Definición de atributos

CampoTipoDescripción
messageStringMensaje de respuesta del servidor.
dataObjectObjeto que contiene todos los datos del contacto recién creado.
data.idIntegerIdentificador único del nuevo contacto.
data.nameStringNombre(s) del contacto.
data.last_nameStringApellido(s) del contacto.
data.doc_typeStringTipo de documento de identidad.
data.doc_numStringNúmero del documento de identidad.
data.activeBooleanIndica el estado del contacto.
data.detailsStringNotas o detalles adicionales.
data.companyObjectObjeto con la información de la empresa asociada.
data.extra_fieldsArrayLista de campos adicionales con su id, name (nombre visible) y value.
data.contact_sourcesArrayLista de las vías de contacto registradas.
data.created_atStringFecha y hora de creación del registro
data.addressesArrayLista de direcciones.
data.is_vipBooleanIndica si el contacto fue marcado como VIP.

Errores Específicos

Además de los errores generales, este endpoint puede devolver los siguientes errores específicos de validación y lógica de negocio:

Código HTTPEjemploCausa Común
400
{
  "message": "El teléfono +51987654321 ya está registrado con otro contacto"
}
El teléfono o email proporcionado en contact_sources ya pertenece a otro contacto dentro de su equipo.
400
{
  "message": "El email 'juan.perez20@' no es válido."
}
Una de las vías de contacto (source) no tiene un formato válido (ej. un email incompleto o un número de teléfono con caracteres no permitidos).
422
{
  "message": "Error de validación",
  "data": {
      "name": [
          "El campo name es obligatorio."
      ],
      "doc_num": [
          "El campo doc num debe tener 8 caracteres para DNI."
      ]
  }
}
Faltan campos obligatorios (como name o company_id), un valor no cumple el formato esperado (ej. doc_type inválido), o se viola una regla de longitud (ej. doc_num).
422
{
  "message": "Error de validación en campos dinámicos",
  "data": {
      "extra_field_id_99": [
          "El campo con ID 99 no es válido o está inactivo."
      ]
  }
}
Un campo en extra_fields es obligatorio según la configuración del equipo y no fue enviado, el valor proporcionado no cumple con sus reglas de validación (ej. no es numérico), o se envió un id de campo que no existe o está inactivo para ese equipo.

Errores generales

Código HTTPTipoCausa común
401UnauthorizedEl token de acceso no fue proporcionado en el encabezado Authorization, es inválido o ha sido revocado. Verifique que el token sea correcto y esté activo.
422Unprocessable EntityLa solicitud fue entendida, pero contiene errores semánticos que impiden su procesamiento. Esto puede deberse a:
1. Parámetros faltantes o inválidos (ej, from_date no es una fecha válida);
2. Recurso inexistente (wa_number no registrado en el sistema);
3. Violación de reglas de negocio (el rango de fechas excede el límite permitido).
500Server ErrorError interno del servidor. Intenta nuevamente más tarde o contacta soporte técnico.