Clientes
Sincroniza tu base de datos de organizaciones y prospectos comerciales.
Descripción General
El objeto Cliente contiene el registro maestro comercial de las personas u organizaciones a las que les facturas. Sincronizar clientes a través de la API es la base para mantener a Cord perfectamente alineado con tu ERP o CRM (como Salesforce o HubSpot).
Crear un Cliente
Crea un nuevo cliente enviando un POST /api/v1/clientes. El único campo estrictamente obligatorio es el nombre de la empresa; el resto es opcional y depende de tu negocio y país. rfc es el identificador fiscal mexicano (Registro Federal de Contribuyentes) — solo aplica si tu cliente factura en México. Si tu negocio o tu cliente está en otro país, simplemente omite el campo; Cord no exige un rfc para crear ni facturar a un cliente fuera de México.
Petición:
curl -X POST "https://cordhq.app/api/v1/clientes" \
-H "Authorization: Bearer sk_live_tU..." \
-H "Content-Type: application/json" \
-d '{
"empresa": "Stark Industries",
"contacto": "Tony Stark",
"email": "tony@stark.com",
"rfc": "STA120412XYZ",
"terminos": "net30",
"limite": 500000,
"nivel": "oro",
"descuento_pct": 15
}'
Respuesta Exitosa:
{
"data": {
"id": "8f7b2c1e-4d3a-4b9f-a6e2-1c5d7e9f0a3b"
}
}
Reglas de Negocio Automatizadas
Cuando creas clientes vía API, Cord aplica restricciones lógicas en tiempo real:
- Los términos de pago (
terminos) deben ser válidos:contadoonet7,net15,net30,net45,net60,net90(N días de crédito). Si pasas algo inválido, recae por defecto acontado. - El nivel de alianza (
nivel) está restringido aestandar,plata,oro, odistribuidor. - El RFC (si lo envías) se normaliza a mayúsculas automáticamente.
- El descuento (
descuento_pct) está limitado matemáticamente entre 0 y 100.
Listar Clientes
Recupera el catálogo completo usando Paginación.
curl -X GET "https://cordhq.app/api/v1/clientes?limit=100" \
-H "Authorization: Bearer sk_live_tU..."
{
"data": [
{
"id": "8f7b2c1e-4d3a-4b9f-a6e2-1c5d7e9f0a3b",
"empresa": "Stark Industries",
"contacto": "Tony Stark",
"email": "tony@stark.com",
"telefono": "",
"rfc": "STA120412XYZ",
"terminos": "Net 30",
"terminosCode": "net30",
"limite": 500000,
"nivel": "oro",
"descuentoPct": 15,
"countryCode": "",
"direccionLine1": "",
"ciudad": "",
"region": "",
"language": "en",
"createdAt": "2026-08-01T10:00:00.000Z",
"nCotizaciones": 4,
"cerrado": 32000
}
],
"meta": { "limit": 100, "offset": 0, "total": 1, "next_cursor": null }
}
cerrado es lo cerrado con ese cliente (cotizaciones aprobadas, pagadas o facturadas) en la divisa de tu negocio: un documento en otra divisa se convierte con la tasa congelada al cotizar o con la de hoy, y uno sin tipo de cambio disponible no se suma.
Al crear un cliente, POST /api/v1/clientes acepta además los datos del domicilio y fiscales del receptor: country_code (ISO 3166-1 alfa-2), direccion_line1 y direccion_line2 (hasta 200 caracteres), ciudad y region (hasta 100), y para México regimen_fiscal, uso_cfdi y cp_fiscal. En la lectura viajan como countryCode, direccionLine1, direccionLine2, ciudad, region, regimenFiscal, usoCfdi y cpFiscal. Al actualizar con PATCH, solo country_code de ese grupo se puede cambiar; el domicilio y los datos fiscales se editan desde la ficha del cliente en la app.
Al crear también puedes mandar buyer_reference: la referencia del comprador que llevan por defecto sus facturas electrónicas europeas (en Alemania, el Leitweg-ID de una administración pública). Una factura puede llevar la suya propia; ver API de Facturas.
Identificador fiscal validado
Cord valida rfc con el dígito de control del país del cliente o, si no mandas country_code, del país de tu cuenta: RFC en México, NIF/NIE/CIF en España, EIN en Estados Unidos, CNPJ o CPF en Brasil, NIT en Colombia, CUIT en Argentina, RUT en Chile, RUC en Perú, SIREN, SIRET o TVA en Francia, USt-IdNr. o Steuernummer en Alemania, VAT o UTR en Reino Unido y Business Number en Canadá. Uno que no pasa responde 422 con code: "invalid_tax_id" y un motivo que nombra el dato local. Al actualizar, solo se valida si cambias el identificador o el país: un dato antiguo no bloquea que corrijas el teléfono o el correo.
Idioma de los documentos
language es el idioma en que el cliente recibe sus cotizaciones, facturas, PDF, correos y links: es, en, pt, fr o de; null significa el de tu organización. Se manda al crear y al actualizar. En PATCH, omitirlo lo conserva y mandar null o una cadena vacía vuelve al de tu organización. Otro valor responde 400 con code: "invalid_request" y field: "language". Cambiarlo no reescribe lo ya enviado: cada cotización y factura guarda el idioma con que se envió o se emitió.
Buscar clientes
q busca en empresa, contacto, correo y RFC. email busca el correo exacto sin distinguir mayúsculas; es la forma de evitar duplicados antes de crear un cliente desde otra herramienta.
curl -X GET "https://cordhq.app/api/v1/clientes?email=tony@stark.com" \
-H "Authorization: Bearer sk_live_tU..."
Obtener un Cliente
GET /api/v1/clientes/{id} devuelve el mismo objeto que el listado. Un id de otra organización responde 404.
Actualizar un Cliente
PATCH /api/v1/clientes/{id} cambia solo los campos que envíes: empresa, contacto, email, telefono, rfc, terminos, country_code y language. El resto se conserva. El límite de crédito, el nivel y el descuento no se pueden cambiar por este endpoint aunque los envíes. Requiere una llave con permiso de escritura.
curl -X PATCH "https://cordhq.app/api/v1/clientes/8f7b2c1e-4d3a-4b9f-a6e2-1c5d7e9f0a3b" \
-H "Authorization: Bearer sk_live_tU..." \
-H "Content-Type: application/json" \
-d '{ "email": "compras@stark.com" }'
{ "data": { "ok": true } }
Cada cambio emite el evento client.updated.