Saltar al contenido

Referencia de la API

Generada del mismo contrato que openapi.json(OpenAPI 3.1). Versión 2026-10-01.Toda respuesta viene en { data }; los errores, en { error, code, request_id, doc_url }.

Cuenta

GET/api/v1/me

Organización y alcance de la llavescope: read

curl https://cordhq.app/api/v1/me \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data
orgobjectOrganización dueña de la llave.
scopestringread o write: lo que puede hacer la llave.
mode"live" | "test"live o test: con test todo ocurre en la sandbox y no toca datos reales.

Cotizaciones

GET/api/v1/cotizaciones

Listar cotizacionesscope: readPaginación por offset

Parámetros: limit, offset, cursor, status, folio, cliente_id

curl https://cordhq.app/api/v1/cotizaciones \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data[]
idstringIdentificador (UUID).
foliostringFolio legible asignado por Cord, por ejemplo COT-0042.
clientestring | nullCliente al que va dirigido: nombre de la empresa, o los datos para darlo de alta si no existe.
statusstringEstado de la cotización: draft, sent, viewed, approved, rejected, expired, paid o invoiced.
totalnumberImporte en la divisa indicada por `moneda`.
monedastring | nullDivisa ISO 4217.
terminosstring | nullEtiqueta legible del plazo en el idioma de la cuenta ("Contado", "Net 45"); para comparar usa terminos_codigo.
terminos_codigostring | nullCódigo estable del plazo: contado o net<N> (net7, net15, net30, net45, net60, net90).
vigenciastring | nullFecha ISO 8601.
creadastring | nullFecha ISO 8601.
link_publicostringLink público absoluto de la cotización.
language"es" | "en" | "pt" | "fr" | "de" | nullSolo lectura. Idioma con que se envió: es, en, pt, fr o de. null mientras es borrador, que sigue el idioma del cliente.

POST/api/v1/cotizaciones

Crear cotizaciónAcepta pk_scope: write

CampoTipoDescripción
items requeridoobject[]Líneas.
cliente_idstringID de un cliente del directorio.
clienteobjectCliente al que va dirigido: nombre de la empresa, o los datos para darlo de alta si no existe.
terminos"contado" | "net7" | "net15" | "net30" | "net45" | "net60" | "net90"Términos de pago: contado o net<N> (N días de crédito: 7, 15, 30, 45, 60 o 90).
vigencia_diasintegerDías que la cotización es válida desde su envío.
notasstringNotas internas; el cliente no las ve.
base_currencystringDivisa de venta ISO 4217: en la que se capturan los precios, se cobra y se factura. Default: la del negocio.
fiscal_currencystringDivisa contable ISO 4217; si difiere de la de venta, la factura declara el tipo de cambio.
iva_incluidobooleantrue si los precios capturados ya incluyen el impuesto.
descuentoobject | nullDescuento de documento antes de impuestos, repartido entre las líneas en proporción a su importe. Cord calcula el monto; null lo quita.
cuponstringCódigo de un cupón del negocio. Cord valida vigencia, divisa y usos; si viene, manda sobre descuento. Es el único descuento que admite una llave publicable.
sendbooleanSolo con Secret Key.
curl -X POST https://cordhq.app/api/v1/cotizaciones \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"cliente":{"empresa":"Acme"},"items":[{"descripcion":"Instalación","cantidad":1,"precio_unitario":12500,"tax_rate":0.16}],"base_currency":"MXN"}'
Respuesta: data
idstringIdentificador (UUID).
tokenstringToken del link público. Es una credencial: no lo publiques.
foliostringFolio legible asignado por Cord, por ejemplo COT-0042.
link_publicostringLink público absoluto que se comparte con el cliente.
needs_approvalbooleantrue si quedó retenida esperando aprobación interna antes de enviarse.
motivostring | nullRazón, escrita por una persona.
emailobjectCorreo electrónico.

GET/api/v1/cotizaciones/{id}

Detalle de cotizaciónscope: read

curl https://cordhq.app/api/v1/cotizaciones/ID \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data
idstringIdentificador (UUID).
foliostringFolio legible asignado por Cord, por ejemplo COT-0042.
clientestring | nullCliente al que va dirigido: nombre de la empresa, o los datos para darlo de alta si no existe.
statusstringEstado de la cotización: draft, sent, viewed, approved, rejected, expired, paid o invoiced.
totalnumberImporte en la divisa indicada por `moneda`.
monedastring | nullDivisa ISO 4217.
terminosstring | nullEtiqueta legible del plazo en el idioma de la cuenta ("Contado", "Net 45"); para comparar usa terminos_codigo.
terminos_codigostring | nullCódigo estable del plazo: contado o net<N> (net7, net15, net30, net45, net60, net90).
vigenciastring | nullFecha ISO 8601.
creadastring | nullFecha ISO 8601.
link_publicostringLink público absoluto de la cotización.
language"es" | "en" | "pt" | "fr" | "de" | nullSolo lectura. Idioma con que se envió: es, en, pt, fr o de. null mientras es borrador, que sigue el idioma del cliente.
notasstring | nullNotas internas; el cliente no las ve.
aprobacionobject | nullAprobación interna requerida por una regla del negocio; null si no aplica.
itemsobject[]Líneas.
descuentoobject | nullDescuento de documento, aplicado antes de impuestos y repartido entre las líneas; null si no hay. subtotal ya es neto.
eventosobject[]Lista de eventos o tipos de evento. Vacía = todos.

POST/api/v1/cotizaciones/{id}

Enviar, reenviar, aprobar, rechazar o marcar pagadascope: write

CampoTipoDescripción
action requerido"send" | "resend" | "approve" | "reject" | "mark_paid"Acción a ejecutar; cada una exige el estado previo correcto y es idempotente con Idempotency-Key.
payment_methodstringMétodo de pago al marcar pagada: transferencia, efectivo, tarjeta…
curl -X POST https://cordhq.app/api/v1/cotizaciones/ID \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"action":"send"}'
Respuesta: data
idstringIdentificador (UUID).

DELETE/api/v1/cotizaciones/{id}

Borrar un borradorscope: write

curl -X DELETE https://cordhq.app/api/v1/cotizaciones/ID \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data
idstringIdentificador (UUID).

POST/api/v1/cotizaciones/ia

Proponer líneas a partir del texto de un pedidoscope: write

CampoTipoDescripción
texto requeridostringTexto libre del pedido.
curl -X POST https://cordhq.app/api/v1/cotizaciones/ia \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"texto":"…"}'
Respuesta: data
itemsany[]Líneas.
monedastringDivisa ISO 4217 de los importes.

Clientes

GET/api/v1/clientes

Listar clientesscope: readPaginación por offset

Parámetros: limit, offset, cursor, q, email

curl https://cordhq.app/api/v1/clientes \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data[]
idstringIdentificador (UUID).
empresastringNombre de la empresa o persona.
contactostringNombre de la persona de contacto.
emailstringCorreo electrónico.
telefonostringTeléfono con lada internacional.
rfcstringIdentificador fiscal: RFC, NIF, EIN…
terminosstringEtiqueta legible de los términos.
terminosCodestringCódigo de términos de pago: contado o net<N> (net7, net15, net30, net45, net60, net90).
limitenumberLímite de crédito del cliente, en la divisa del negocio.
nivelstringNivel o segmento del cliente.
descuentoPctnumberDescuento por defecto del cliente, en porcentaje.
regimenFiscalstringClave de régimen fiscal del SAT (México).
usoCfdistringClave de uso de CFDI (México).
cpFiscalstringCódigo postal del domicilio fiscal (México).
countryCodestringPaís ISO 3166-1 alfa-2.
language"es" | "en" | "pt" | "fr" | "de" | nullIdioma de los documentos que recibe el cliente: es, en, pt, fr o de; null = el de la organización. Cotizaciones y facturas guardan el idioma con que se enviaron o emitieron; cambiarlo no reescribe lo ya enviado. Otro valor responde 400 con field: language.

POST/api/v1/clientes

Crear clientescope: write

CampoTipoDescripción
empresa requeridostringNombre de la empresa o persona.
language"es" | "en" | "pt" | "fr" | "de" | nullIdioma de los documentos que recibe el cliente: es, en, pt, fr o de; null = el de la organización. Cotizaciones y facturas guardan el idioma con que se enviaron o emitieron; cambiarlo no reescribe lo ya enviado. Otro valor responde 400 con field: language.
curl -X POST https://cordhq.app/api/v1/clientes \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"empresa":"…"}'
Respuesta: data
idstringIdentificador (UUID).

GET/api/v1/clientes/{id}

Detalle de clientescope: read

curl https://cordhq.app/api/v1/clientes/ID \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data
idstringIdentificador (UUID).
empresastringNombre de la empresa o persona.
contactostringNombre de la persona de contacto.
emailstringCorreo electrónico.
telefonostringTeléfono con lada internacional.
rfcstringIdentificador fiscal: RFC, NIF, EIN…
terminosstringEtiqueta legible de los términos.
terminosCodestringCódigo de términos de pago: contado o net<N> (net7, net15, net30, net45, net60, net90).
limitenumberLímite de crédito del cliente, en la divisa del negocio.
nivelstringNivel o segmento del cliente.
descuentoPctnumberDescuento por defecto del cliente, en porcentaje.
regimenFiscalstringClave de régimen fiscal del SAT (México).
usoCfdistringClave de uso de CFDI (México).
cpFiscalstringCódigo postal del domicilio fiscal (México).
countryCodestringPaís ISO 3166-1 alfa-2.
language"es" | "en" | "pt" | "fr" | "de" | nullIdioma de los documentos que recibe el cliente: es, en, pt, fr o de; null = el de la organización. Cotizaciones y facturas guardan el idioma con que se enviaron o emitieron; cambiarlo no reescribe lo ya enviado. Otro valor responde 400 con field: language.

PATCH/api/v1/clientes/{id}

Actualizar datos de contactoscope: write

CampoTipoDescripción
language"es" | "en" | "pt" | "fr" | "de" | nullIdioma de los documentos que recibe el cliente: es, en, pt, fr o de; null = el de la organización. Cotizaciones y facturas guardan el idioma con que se enviaron o emitieron; cambiarlo no reescribe lo ya enviado. Otro valor responde 400 con field: language.
curl -X PATCH https://cordhq.app/api/v1/clientes/ID \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{}'
Respuesta: data
idstringIdentificador (UUID).

Productos

GET/api/v1/productos

Listar productosAcepta pk_scope: readPaginación por offset

Parámetros: limit, offset, cursor

curl https://cordhq.app/api/v1/productos \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data[]
idstringIdentificador (UUID).
skustringCódigo interno del producto.
nombrestringNombre.
unidadstringUnidad de medida: pieza, kg, hora…
descripcionstringDescripción tal como la ve el cliente.
precionumberImporte en la divisa indicada por `moneda`.
costonumberNunca se expone a una llave publicable.
activobooleanfalse si está desactivado: se conserva pero no se usa.
createdAtstring | nullFecha ISO 8601.
preciosVolumenobject[]Precios escalonados por cantidad.
existenciasnumber | nullUnidades disponibles; null si no se lleva inventario.
taxRatenumber | nullImpuesto que se sugiere al agregar el producto a una línea, como fracción 0–1; null = el predeterminado de la organización.
claveSatstring | nullClave de producto o servicio del SAT (c_ClaveProdServ, 8 dígitos) para el CFDI en México; null si no se clasificó.
claveUnidadSatstring | nullClave de unidad del SAT (c_ClaveUnidad, como H87 o E48) para el CFDI en México; null = se deduce de la unidad.

POST/api/v1/productos

Crear productoscope: write

CampoTipoDescripción
nombre requeridostringNombre.
curl -X POST https://cordhq.app/api/v1/productos \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"nombre":"…"}'
Respuesta: data
idstringIdentificador (UUID).

Facturas

GET/api/v1/facturas

Listar facturasscope: readPaginación por cursor

Parámetros: limit, cursor, estado, cliente, desde, hasta, q

curl https://cordhq.app/api/v1/facturas \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data[]
idstringIdentificador (UUID).
numerostring | nullNúmero de la factura en su serie.
folio_fiscalstring | nullIdentificador ante la autoridad fiscal (UUID del CFDI en México); null si no aplica.
clientestring | nullCliente al que va dirigido: nombre de la empresa, o los datos para darlo de alta si no existe.
estadostringdraft, open, paid, void o uncollectible.
estado_fiscalstringEstado de la emisión: pending, issued, cancelled o error.
paisstringPaís ISO 3166-1 alfa-2.
tipostringTipo de documento: cfdi_40, cfdi_egreso, proforma, commercial_invoice, commercial_credit_note, verifactu_invoice o verifactu_credit_note.
documento"factura" | "factura_proforma" | "nota_credito" | "nota_debito"Cómo se titula el documento. factura_proforma no es una factura ni tiene validez fiscal: el tipo proforma y, en España, todo documento sin registro de Verifactu.
monedastring | nullDivisa ISO 4217.
totalnumberImporte en la divisa indicada por `moneda`.
pagadonumberImporte en la divisa indicada por `moneda`.
saldonumberImporte en la divisa indicada por `moneda`.
vencestring | nullFecha ISO 8601.
vencidabooleantrue si pasó la fecha de vencimiento con saldo pendiente.
cotizacion_idstring | nullID de la cotización relacionada.
creadastring | nullFecha ISO 8601.
language"es" | "en" | "pt" | "fr" | "de" | nullSolo lectura. Idioma con que se emitió: es, en, pt, fr o de. null mientras es borrador.

POST/api/v1/facturas

Crear factura en borradorscope: write

CampoTipoDescripción
cliente_id requeridostringID de un cliente del directorio.
items requeridoobject[]Líneas.
currencystringDivisa ISO 4217.
due_datestringFecha de vencimiento, YYYY-MM-DD.
service_datestringFecha de prestación del servicio o de entrega (Leistungsdatum), YYYY-MM-DD. Sin ella, la factura indica que coincide con la fecha de emisión.
service_date_endstringFin del periodo de prestación, YYYY-MM-DD. Requiere service_date y no puede ser anterior.
notasstringNotas internas; el cliente no las ve.
iva_incluidobooleantrue si los precios capturados ya incluyen el impuesto.
document_mode"commercial" | "fiscal"commercial o fiscal. Sin él, fiscal si el plan lo incluye y el país lo tiene habilitado; fiscal sin eso responde 400.
fx_buffer_pctnumberCobertura en puntos porcentuales sobre el tipo de cambio de referencia (2 = +2%); se acota a 25. Default 0.
descuentoobject | nullDescuento de documento antes de impuestos, repartido entre las líneas en proporción a su importe. Cord calcula el monto; null lo quita.
cuponstringCódigo de un cupón del negocio. Cord valida vigencia, divisa y usos; si viene, manda sobre descuento. Es el único descuento que admite una llave publicable.
buyer_referencestringReferencia del comprador para su cuenta por pagar (en Alemania, el Leitweg-ID de la administración pública). La lleva la factura electrónica europea (BT-10) y la exige XRechnung. Sin ella, la del cliente. Si la dirección electrónica del cliente es un Leitweg-ID (esquema 0204), se comprueban sus dígitos de control (ISO/IEC 7064 MOD 97-10) y una que no pase responde 400.
purchase_orderstringNúmero de la orden de compra del cliente (BT-13 de la factura electrónica europea).
curl -X POST https://cordhq.app/api/v1/facturas \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"cliente_id":"…","items":[{"descripcion":"…","cantidad":1,"precio_unitario":1}]}'
Respuesta: data
idstringIdentificador (UUID).

GET/api/v1/facturas/{id}

Detalle de facturascope: read

curl https://cordhq.app/api/v1/facturas/ID \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data
idstringIdentificador (UUID).
numerostring | nullNúmero de la factura en su serie.
folio_fiscalstring | nullIdentificador ante la autoridad fiscal (UUID del CFDI en México); null si no aplica.
clientestring | nullCliente al que va dirigido: nombre de la empresa, o los datos para darlo de alta si no existe.
estadostringdraft, open, paid, void o uncollectible.
estado_fiscalstringEstado de la emisión: pending, issued, cancelled o error.
paisstringPaís ISO 3166-1 alfa-2.
tipostringTipo de documento: cfdi_40, cfdi_egreso, proforma, commercial_invoice, commercial_credit_note, verifactu_invoice o verifactu_credit_note.
documento"factura" | "factura_proforma" | "nota_credito" | "nota_debito"Cómo se titula el documento. factura_proforma no es una factura ni tiene validez fiscal: el tipo proforma y, en España, todo documento sin registro de Verifactu.
monedastring | nullDivisa ISO 4217.
totalnumberImporte en la divisa indicada por `moneda`.
pagadonumberImporte en la divisa indicada por `moneda`.
saldonumberImporte en la divisa indicada por `moneda`.
vencestring | nullFecha ISO 8601.
vencidabooleantrue si pasó la fecha de vencimiento con saldo pendiente.
cotizacion_idstring | nullID de la cotización relacionada.
creadastring | nullFecha ISO 8601.
language"es" | "en" | "pt" | "fr" | "de" | nullSolo lectura. Idioma con que se emitió: es, en, pt, fr o de. null mientras es borrador.
subtotalnumberImporte en la divisa indicada por `moneda`.
impuestosnumberImporte en la divisa indicada por `moneda`.
moneda_contablestring | nullDivisa ISO 4217.
tipo_cambionumber | nullTipo de cambio declarado de la divisa de venta a la contable; null si son la misma.
total_contablenumber | nullTotal convertido a la divisa contable.
notasstring | nullNotas internas; el cliente no las ve.
nota_credito_destring | nullID de la factura que corrige esta nota de crédito.
emisoranyDatos fiscales de quien emite.
receptoranyDatos fiscales del cliente que recibe la factura.
descuentoobject | nullDescuento de documento, aplicado antes de impuestos y repartido entre las líneas; null si no hay. subtotal ya es neto.
conceptosobject[]Líneas de la factura con su impuesto.
pagosobject[]Pagos recibidos.

POST/api/v1/facturas/{id}

Emitir, enviar, anular, registrar pago o nota de créditoscope: write

CampoTipoDescripción
action requerido"finalize" | "send" | "void" | "payment" | "credit_note"Acción a ejecutar; cada una exige el estado previo correcto y es idempotente con Idempotency-Key.
montonumberImporte en la divisa indicada por moneda.
monedastringDivisa ISO 4217 de los importes.
metodostringMétodo de pago: transferencia, efectivo, tarjeta…
referenciastringReferencia del pago o del proveedor.
motivostringRazón, escrita por una persona.
sin_comercio_exteriorbooleanMéxico, al emitir (finalize): true confirma que un CFDI con mercancías para un cliente en el extranjero no es una exportación definitiva. Sin él, esa emisión responde 409 con el código comercio_exterior, porque Cord no genera el complemento de comercio exterior.
curl -X POST https://cordhq.app/api/v1/facturas/ID \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"action":"finalize"}'
Respuesta: data
idstringIdentificador (UUID).

Cobranza

GET/api/v1/cobranza

Cartera por cobrarscope: read

curl https://cordhq.app/api/v1/cobranza \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data
resumenanyTotales de un vistazo.
aginganyCartera por antigüedad en cuatro cubetas fijas: vigente (por vencer), d30 (1-30 días vencida), d60 (31-60) y d60p (más de 60). Cada una trae key, label, monto y n.
itemsany[]Líneas.
clientesanySaldo agrupado por cliente.

Eventos

GET/api/v1/events

Historial de eventosscope: readPaginación por cursor

Parámetros: limit, cursor, type, object_id

curl https://cordhq.app/api/v1/events \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data[]
idstringIdentificador (UUID).
typestringTipo de evento, por ejemplo quote.approved.
objectstringTipo de objeto: quote, invoice, client, product, task, promise…
object_idstring | nullID del objeto al que se refiere.
dataobjectContenido de la respuesta o del evento.
actorstring | nullQuién lo hizo: user, api, mcp, client (el destinatario del link público) o system.
created_atstringFecha de creación, ISO 8601.

Tareas

POST/api/v1/tareas

Crear tareascope: write

CampoTipoDescripción
titulo requeridostringQué hay que hacer.
due_datestringFecha de vencimiento, YYYY-MM-DD.
cotizacion_idstringID de la cotización relacionada.
factura_idstringID de la factura relacionada (el `id` de /facturas).
curl -X POST https://cordhq.app/api/v1/tareas \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"titulo":"…"}'
Respuesta: data
idstringIdentificador (UUID).

Workflows

POST/api/v1/workflows/{id}/invoke

Correr un workflow "Lo corres tú" sobre cotizaciones o facturasscope: write

CampoTipoDescripción
objeto requerido"quote" | "invoice"Tipo de documento: quote (cotización) o invoice (factura); debe coincidir con el disparador del workflow.
ids requeridostring[]Identificadores (UUID) de los documentos, de 1 a 50.
curl -X POST https://cordhq.app/api/v1/workflows/ID/invoke \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"objeto":"quote","ids":["…"]}'
Respuesta: data
documentosnumberCuántos de los documentos enviados existen en la organización.
corridasnumberCuántas ejecuciones empezaron: un documento que no cumple el filtro del workflow o que ya entró antes no cuenta.

Webhooks

GET/api/v1/webhooks

Endpoints creados por esta llavescope: read

curl https://cordhq.app/api/v1/webhooks \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data
idstringIdentificador (UUID).
urlstringURL HTTPS que recibe los eventos.
eventosstring[]Lista de eventos o tipos de evento. Vacía = todos.
activobooleanfalse si está desactivado: se conserva pero no se usa.
created_atstringFecha de creación, ISO 8601.

POST/api/v1/webhooks

Crear endpoint (el secreto se devuelve una vez)scope: write

CampoTipoDescripción
url requeridostringURL HTTPS que recibe los eventos.
eventosstring[]Lista de eventos o tipos de evento. Vacía = todos.
curl -X POST https://cordhq.app/api/v1/webhooks \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"url":"…"}'
Respuesta: data
idstringIdentificador (UUID).
urlstringURL HTTPS que recibe los eventos.
eventosstring[]Lista de eventos o tipos de evento. Vacía = todos.
activobooleanfalse si está desactivado: se conserva pero no se usa.
created_atstringFecha de creación, ISO 8601.
secretstringSecreto para verificar la firma. Solo se muestra una vez.

DELETE/api/v1/webhooks/{id}

Borrar endpointscope: write

curl -X DELETE https://cordhq.app/api/v1/webhooks/ID \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data
idstringIdentificador (UUID).

Elements

GET/api/v1/elements/config

Configuración que dibuja Cord ElementsAcepta pk_scope: read

curl https://cordhq.app/api/v1/elements/config \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data
object"elements_config"Tipo de objeto: quote, invoice, client, product, task, promise…
orgobjectOrganización dueña de la llave.
monedasstring[]Divisas que el negocio ofrece al cotizar.
impuestosobjectImpuestos del documento o catálogo de impuestos.
terminos"contado" | "net7" | "net15" | "net30" | "net45" | "net60" | "net90"[]Términos de pago: contado o net<N> (N días de crédito: 7, 15, 30, 45, 60 o 90).
terminos_default"contado" | "net7" | "net15" | "net30" | "net45" | "net60" | "net90"Términos de pago por defecto.
vigencia_dias_defaultnumberVigencia por defecto, en días.
fiscalobjectDatos fiscales.

POST/api/v1/elements/ai-draft

Líneas con IA en streaming (text/event-stream)Acepta pk_scope: write

CampoTipoDescripción
textostringTexto libre del pedido.
archivostringJPG, PNG o PDF, máx 4 MB.
curl -X POST https://cordhq.app/api/v1/elements/ai-draft \
  -H "Authorization: Bearer sk_test_..." \
  -F "texto=5 sacos de cemento y 2 de arena"

Responde text/event-stream con eventos item, done y error.

Modo prueba

POST/api/v1/test_helpers/fiscal

Forzar el resultado de la próxima emisiónSolo sk_test_scope: write

CampoTipoDescripción
siguiente_resultado requerido"exito" | "pac_caido" | "receptor_invalido" | "certificado_vencido" | "timbre_duplicado"Resultado que tendrá la próxima emisión fiscal de la sandbox.
curl -X POST https://cordhq.app/api/v1/test_helpers/fiscal \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"siguiente_resultado":"exito"}'
Respuesta: data
siguiente_resultadostringResultado que tendrá la próxima emisión fiscal de la sandbox.

POST/api/v1/test_helpers/cotizaciones/{id}

Simular apertura o vencimientoSolo sk_test_scope: write

CampoTipoDescripción
accion requerido"vista" | "vencer"Qué simular: vista (el cliente abre el link) o vencer (la cotización vence).
curl -X POST https://cordhq.app/api/v1/test_helpers/cotizaciones/ID \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"accion":"vista"}'
Respuesta: data
idstringIdentificador (UUID).

POST/api/v1/test_helpers/webhooks

Disparar un webhookSolo sk_test_scope: write

CampoTipoDescripción
evento requeridostringTipo de evento, por ejemplo quote.approved.
objeto_idstringID de una cotización o factura de la sandbox; sin él se usan datos de ejemplo.
curl -X POST https://cordhq.app/api/v1/test_helpers/webhooks \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"evento":"…"}'
Respuesta: data
eventostringTipo de evento, por ejemplo quote.approved.
datos"real" | "ejemplo"real si se usaron los datos del objeto indicado; ejemplo si se inventaron.

POST/api/v1/test_helpers/listen

Abrir sesión de cord listenSolo sk_test_scope: write

CampoTipoDescripción
eventosstring[]Lista de eventos o tipos de evento. Vacía = todos.
curl -X POST https://cordhq.app/api/v1/test_helpers/listen \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{}'
Respuesta: data
idstringIdentificador (UUID).
secretstringSecreto para verificar la firma. Solo se muestra una vez.
eventosstring[]Lista de eventos o tipos de evento. Vacía = todos.
expirastringFecha de vencimiento, ISO 8601.

GET/api/v1/test_helpers/listen/{id}

Recoger eventos de la sesiónSolo sk_test_scope: write

curl https://cordhq.app/api/v1/test_helpers/listen/ID \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data
event_idstringID del evento; deduplica por él.
eventostringTipo de evento, por ejemplo quote.approved.
bodystringCuerpo crudo del evento; reenvíalo sin modificar para que la firma valide.
headersobjectHeaders a reenviar tal cual, incluida la firma X-Cord-Signature-V1.

DELETE/api/v1/test_helpers/listen/{id}

Cerrar sesión de cord listenSolo sk_test_scope: write

curl -X DELETE https://cordhq.app/api/v1/test_helpers/listen/ID \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data
idstringIdentificador (UUID).

Configuración

POST/api/v1/setup/plans

Proponer una configuración de la cuenta (una persona la aprueba en review_url)scope: write

CampoTipoDescripción
sitiostringSitio web del negocio, por ejemplo tunegocio.com.
descripcionstringDescripción del negocio: giro, plazos de pago, impuestos que cobra o retiene.
archivoobjectLista de precios (Excel, CSV, PDF o foto) en base64, hasta 3 MB.
curl -X POST https://cordhq.app/api/v1/setup/plans \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{}'
Respuesta: data
object"setup_plan"Tipo de objeto: quote, invoice, client, product, task, promise…
idstringIdentificador (UUID).
estado"generando" | "propuesto" | "aplicado" | "descartado" | "fallido"propuesto espera la aprobación de una persona en review_url.
review_urlstringPágina donde una persona con sesión revisa y aplica la propuesta. La API nunca la aplica.

GET/api/v1/setup/plans/{id}

Estado de una propuesta de configuraciónscope: read

curl https://cordhq.app/api/v1/setup/plans/ID \
  -H "Authorization: Bearer sk_test_..."
Respuesta: data
object"setup_plan"Tipo de objeto: quote, invoice, client, product, task, promise…
idstringIdentificador (UUID).
estado"generando" | "propuesto" | "aplicado" | "descartado" | "fallido"propuesto espera la aprobación de una persona en review_url.
review_urlstringPágina donde una persona con sesión revisa y aplica la propuesta. La API nunca la aplica.