Skip to content

API Reference

Generated from the same contract as openapi.json(OpenAPI 3.1). Version 2026-10-01.Every response comes in { data }; errors, in { error, code, request_id, doc_url }.

Account

GET/api/v1/me

Organization and key scopescope: read

curl https://cordhq.app/api/v1/me \
  -H "Authorization: Bearer sk_test_..."
Response: data
orgobjectOrganization that owns the key.
scopestringread or write: what the key can do.
mode"live" | "test"live or test: with test, everything happens in the sandbox and never touches real data.

Quotes

GET/api/v1/cotizaciones

List quotesscope: readOffset pagination

Query parameters: limit, offset, cursor, status, folio, cliente_id

curl https://cordhq.app/api/v1/cotizaciones \
  -H "Authorization: Bearer sk_test_..."
Response: data[]
idstringIdentifier (UUID).
foliostringHuman-readable number assigned by Cord, for example COT-0042.
clientestring | nullClient the document is addressed to: the company name, or the details to create the client if it does not exist.
statusstringQuote status: draft, sent, viewed, approved, rejected, expired, paid or invoiced.
totalnumberAmount in the currency given by `moneda`.
monedastring | nullISO 4217 currency code.
terminosstring | nullHuman-readable label for the payment terms in the account's language ("Due on receipt", "Net 45"); to compare, use terminos_codigo.
terminos_codigostring | nullStable payment terms code: contado or net<N> (net7, net15, net30, net45, net60, net90).
vigenciastring | nullISO 8601 date.
creadastring | nullISO 8601 date.
link_publicostringAbsolute public link to the quote.
language"es" | "en" | "pt" | "fr" | "de" | nullRead-only. Language the quote was sent in: es, en, pt, fr or de. null while it is a draft, which follows the client's language.

POST/api/v1/cotizaciones

Create a quoteAccepts pk_scope: write

FieldTypeDescription
items requiredobject[]Line items.
cliente_idstringID of a client in the directory.
clienteobjectClient the document is addressed to: the company name, or the details to create the client if it does not exist.
terminos"contado" | "net7" | "net15" | "net30" | "net45" | "net60" | "net90"Payment terms: contado or net<N> (N days of credit: 7, 15, 30, 45, 60 or 90).
vigencia_diasintegerNumber of days the quote is valid after it is sent.
notasstringInternal notes; the client does not see them.
base_currencystringISO 4217 sales currency: the one prices are entered in, payment is collected in and the invoice is issued in. Default: the business's currency.
fiscal_currencystringISO 4217 accounting currency; if it differs from the sales currency, the invoice states the exchange rate.
iva_incluidobooleantrue if the prices entered already include tax.
descuentoobject | nullDocument discount before tax, spread across line items in proportion to their amount. Cord calculates the amount; null removes it.
cuponstringCode of one of the business's coupons. Cord checks its validity, currency and redemptions; if present, it takes precedence over descuento. It is the only discount a publishable key accepts.
sendbooleanSecret Key only.
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"}'
Response: data
idstringIdentifier (UUID).
tokenstringToken of the public link. It is a credential: do not publish it.
foliostringHuman-readable number assigned by Cord, for example COT-0042.
link_publicostringAbsolute public link shared with the client.
needs_approvalbooleantrue if it was held for internal approval before being sent.
motivostring | nullReason, written by a person.
emailobjectEmail address.

GET/api/v1/cotizaciones/{id}

Retrieve a quotescope: read

curl https://cordhq.app/api/v1/cotizaciones/ID \
  -H "Authorization: Bearer sk_test_..."
Response: data
idstringIdentifier (UUID).
foliostringHuman-readable number assigned by Cord, for example COT-0042.
clientestring | nullClient the document is addressed to: the company name, or the details to create the client if it does not exist.
statusstringQuote status: draft, sent, viewed, approved, rejected, expired, paid or invoiced.
totalnumberAmount in the currency given by `moneda`.
monedastring | nullISO 4217 currency code.
terminosstring | nullHuman-readable label for the payment terms in the account's language ("Due on receipt", "Net 45"); to compare, use terminos_codigo.
terminos_codigostring | nullStable payment terms code: contado or net<N> (net7, net15, net30, net45, net60, net90).
vigenciastring | nullISO 8601 date.
creadastring | nullISO 8601 date.
link_publicostringAbsolute public link to the quote.
language"es" | "en" | "pt" | "fr" | "de" | nullRead-only. Language the quote was sent in: es, en, pt, fr or de. null while it is a draft, which follows the client's language.
notasstring | nullInternal notes; the client does not see them.
aprobacionobject | nullInternal approval required by a business rule; null if it does not apply.
itemsobject[]Line items.
descuentoobject | nullDocument discount, applied before tax and spread across line items; null if there is none. subtotal is already net.
eventosobject[]List of events or event types. Empty = all.

POST/api/v1/cotizaciones/{id}

Send, resend, approve, reject or mark as paidscope: write

FieldTypeDescription
action required"send" | "resend" | "approve" | "reject" | "mark_paid"Action to run; each one requires the right prior status and is idempotent with Idempotency-Key.
payment_methodstringPayment method when marking it as paid: 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"}'
Response: data
idstringIdentifier (UUID).

DELETE/api/v1/cotizaciones/{id}

Delete a draftscope: write

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

POST/api/v1/cotizaciones/ia

Suggest line items from the text of an orderscope: write

FieldTypeDescription
texto requiredstringFree text of the order.
curl -X POST https://cordhq.app/api/v1/cotizaciones/ia \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"texto":"…"}'
Response: data
itemsany[]Line items.
monedastringISO 4217 currency of the amounts.

Clients

GET/api/v1/clientes

List clientsscope: readOffset pagination

Query parameters: limit, offset, cursor, q, email

curl https://cordhq.app/api/v1/clientes \
  -H "Authorization: Bearer sk_test_..."
Response: data[]
idstringIdentifier (UUID).
empresastringName of the company or person.
contactostringName of the contact person.
emailstringEmail address.
telefonostringPhone number with the international dialing code.
rfcstringTax ID: RFC, NIF, EIN…
terminosstringHuman-readable label for the payment terms.
terminosCodestringPayment terms code: contado or net<N> (net7, net15, net30, net45, net60, net90).
limitenumberThe client's credit limit, in the business's currency.
nivelstringThe client's tier or segment.
descuentoPctnumberThe client's default discount, as a percentage.
regimenFiscalstringSAT tax regime code (Mexico).
usoCfdistringCFDI use code (Mexico).
cpFiscalstringPostal code of the tax address (Mexico).
countryCodestringISO 3166-1 alpha-2 country code.
language"es" | "en" | "pt" | "fr" | "de" | nullLanguage of the documents the client receives: es, en, pt, fr or de; null = the organization's. Quotes and invoices keep the language they were sent or issued in; changing it does not rewrite what was already sent. Any other value responds 400 with field: language.

POST/api/v1/clientes

Create a clientscope: write

FieldTypeDescription
empresa requiredstringName of the company or person.
language"es" | "en" | "pt" | "fr" | "de" | nullLanguage of the documents the client receives: es, en, pt, fr or de; null = the organization's. Quotes and invoices keep the language they were sent or issued in; changing it does not rewrite what was already sent. Any other value responds 400 with field: language.
curl -X POST https://cordhq.app/api/v1/clientes \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"empresa":"…"}'
Response: data
idstringIdentifier (UUID).

GET/api/v1/clientes/{id}

Retrieve a clientscope: read

curl https://cordhq.app/api/v1/clientes/ID \
  -H "Authorization: Bearer sk_test_..."
Response: data
idstringIdentifier (UUID).
empresastringName of the company or person.
contactostringName of the contact person.
emailstringEmail address.
telefonostringPhone number with the international dialing code.
rfcstringTax ID: RFC, NIF, EIN…
terminosstringHuman-readable label for the payment terms.
terminosCodestringPayment terms code: contado or net<N> (net7, net15, net30, net45, net60, net90).
limitenumberThe client's credit limit, in the business's currency.
nivelstringThe client's tier or segment.
descuentoPctnumberThe client's default discount, as a percentage.
regimenFiscalstringSAT tax regime code (Mexico).
usoCfdistringCFDI use code (Mexico).
cpFiscalstringPostal code of the tax address (Mexico).
countryCodestringISO 3166-1 alpha-2 country code.
language"es" | "en" | "pt" | "fr" | "de" | nullLanguage of the documents the client receives: es, en, pt, fr or de; null = the organization's. Quotes and invoices keep the language they were sent or issued in; changing it does not rewrite what was already sent. Any other value responds 400 with field: language.

PATCH/api/v1/clientes/{id}

Update contact detailsscope: write

FieldTypeDescription
language"es" | "en" | "pt" | "fr" | "de" | nullLanguage of the documents the client receives: es, en, pt, fr or de; null = the organization's. Quotes and invoices keep the language they were sent or issued in; changing it does not rewrite what was already sent. Any other value responds 400 with field: language.
curl -X PATCH https://cordhq.app/api/v1/clientes/ID \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{}'
Response: data
idstringIdentifier (UUID).

Products

GET/api/v1/productos

List productsAccepts pk_scope: readOffset pagination

Query parameters: limit, offset, cursor

curl https://cordhq.app/api/v1/productos \
  -H "Authorization: Bearer sk_test_..."
Response: data[]
idstringIdentifier (UUID).
skustringInternal product code.
nombrestringName.
unidadstringUnit of measure: piece, kg, hour…
descripcionstringDescription as the client sees it.
precionumberAmount in the currency given by `moneda`.
costonumberNever exposed to a publishable key.
activobooleanfalse if it is deactivated: it is kept but not used.
createdAtstring | nullISO 8601 date.
preciosVolumenobject[]Tiered prices by quantity.
existenciasnumber | nullUnits in stock; null if inventory is not tracked.
taxRatenumber | nullTax suggested when the product is added to a line item, as a 0–1 fraction; null = the organization's default.
claveSatstring | nullSAT product or service code (c_ClaveProdServ, 8 digits) for the CFDI in Mexico; null if it has not been classified.
claveUnidadSatstring | nullSAT unit code (c_ClaveUnidad, such as H87 or E48) for the CFDI in Mexico; null = derived from the unit.

POST/api/v1/productos

Create a productscope: write

FieldTypeDescription
nombre requiredstringName.
curl -X POST https://cordhq.app/api/v1/productos \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"nombre":"…"}'
Response: data
idstringIdentifier (UUID).

Invoices

GET/api/v1/facturas

List invoicesscope: readCursor pagination

Query parameters: limit, cursor, estado, cliente, desde, hasta, q

curl https://cordhq.app/api/v1/facturas \
  -H "Authorization: Bearer sk_test_..."
Response: data[]
idstringIdentifier (UUID).
numerostring | nullInvoice number within its series.
folio_fiscalstring | nullIdentifier with the tax authority (the CFDI UUID in Mexico); null if it does not apply.
clientestring | nullClient the document is addressed to: the company name, or the details to create the client if it does not exist.
estadostringdraft, open, paid, void or uncollectible.
estado_fiscalstringIssuance status: pending, issued, cancelled or error.
paisstringISO 3166-1 alpha-2 country code.
tipostringDocument type: cfdi_40, cfdi_egreso, proforma, commercial_invoice, commercial_credit_note, verifactu_invoice or verifactu_credit_note.
documento"factura" | "factura_proforma" | "nota_credito" | "nota_debito"How the document is titled. factura_proforma is a pro forma invoice: it is not an invoice and is not valid for tax purposes. It covers the proforma type and, in Spain, any document without a Verifactu record.
monedastring | nullISO 4217 currency code.
totalnumberAmount in the currency given by `moneda`.
pagadonumberAmount in the currency given by `moneda`.
saldonumberAmount in the currency given by `moneda`.
vencestring | nullISO 8601 date.
vencidabooleantrue if the due date has passed with a balance due.
cotizacion_idstring | nullID of the related quote.
creadastring | nullISO 8601 date.
language"es" | "en" | "pt" | "fr" | "de" | nullRead-only. Language the invoice was issued in: es, en, pt, fr or de. null while it is a draft.

POST/api/v1/facturas

Create a draft invoicescope: write

FieldTypeDescription
cliente_id requiredstringID of a client in the directory.
items requiredobject[]Line items.
currencystringISO 4217 currency code.
due_datestringDue date, YYYY-MM-DD.
service_datestringDate the service was provided or the goods delivered (Leistungsdatum), YYYY-MM-DD. Without it, the invoice states that it matches the issue date.
service_date_endstringEnd of the service period, YYYY-MM-DD. Requires service_date and cannot be earlier.
notasstringInternal notes; the client does not see them.
iva_incluidobooleantrue if the prices entered already include tax.
document_mode"commercial" | "fiscal"commercial or fiscal. Without it, fiscal if the plan includes it and it is enabled for the country; fiscal without those responds 400.
fx_buffer_pctnumberBuffer in percentage points over the reference exchange rate (2 = +2%); capped at 25. Default 0.
descuentoobject | nullDocument discount before tax, spread across line items in proportion to their amount. Cord calculates the amount; null removes it.
cuponstringCode of one of the business's coupons. Cord checks its validity, currency and redemptions; if present, it takes precedence over descuento. It is the only discount a publishable key accepts.
buyer_referencestringBuyer reference for their accounts payable (in Germany, the public administration's Leitweg-ID). The European e-invoice carries it (BT-10) and XRechnung requires it. Without it, the client's is used. If the client's electronic address is a Leitweg-ID (scheme 0204), its check digits are verified (ISO/IEC 7064 MOD 97-10) and one that fails responds 400.
purchase_orderstringThe client's purchase order number (BT-13 of the European e-invoice).
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}]}'
Response: data
idstringIdentifier (UUID).

GET/api/v1/facturas/{id}

Retrieve an invoicescope: read

curl https://cordhq.app/api/v1/facturas/ID \
  -H "Authorization: Bearer sk_test_..."
Response: data
idstringIdentifier (UUID).
numerostring | nullInvoice number within its series.
folio_fiscalstring | nullIdentifier with the tax authority (the CFDI UUID in Mexico); null if it does not apply.
clientestring | nullClient the document is addressed to: the company name, or the details to create the client if it does not exist.
estadostringdraft, open, paid, void or uncollectible.
estado_fiscalstringIssuance status: pending, issued, cancelled or error.
paisstringISO 3166-1 alpha-2 country code.
tipostringDocument type: cfdi_40, cfdi_egreso, proforma, commercial_invoice, commercial_credit_note, verifactu_invoice or verifactu_credit_note.
documento"factura" | "factura_proforma" | "nota_credito" | "nota_debito"How the document is titled. factura_proforma is a pro forma invoice: it is not an invoice and is not valid for tax purposes. It covers the proforma type and, in Spain, any document without a Verifactu record.
monedastring | nullISO 4217 currency code.
totalnumberAmount in the currency given by `moneda`.
pagadonumberAmount in the currency given by `moneda`.
saldonumberAmount in the currency given by `moneda`.
vencestring | nullISO 8601 date.
vencidabooleantrue if the due date has passed with a balance due.
cotizacion_idstring | nullID of the related quote.
creadastring | nullISO 8601 date.
language"es" | "en" | "pt" | "fr" | "de" | nullRead-only. Language the invoice was issued in: es, en, pt, fr or de. null while it is a draft.
subtotalnumberAmount in the currency given by `moneda`.
impuestosnumberAmount in the currency given by `moneda`.
moneda_contablestring | nullISO 4217 currency code.
tipo_cambionumber | nullExchange rate stated from the sales currency to the accounting currency; null if they are the same.
total_contablenumber | nullTotal converted to the accounting currency.
notasstring | nullInternal notes; the client does not see them.
nota_credito_destring | nullID of the invoice this credit note corrects.
emisoranyTax details of the issuer.
receptoranyTax details of the client receiving the invoice.
descuentoobject | nullDocument discount, applied before tax and spread across line items; null if there is none. subtotal is already net.
conceptosobject[]Invoice line items with their tax.
pagosobject[]Payments received.

POST/api/v1/facturas/{id}

Issue, send, void, record a payment or create a credit notescope: write

FieldTypeDescription
action required"finalize" | "send" | "void" | "payment" | "credit_note"Action to run; each one requires the right prior status and is idempotent with Idempotency-Key.
montonumberAmount in the currency given by moneda.
monedastringISO 4217 currency of the amounts.
metodostringPayment method: transferencia, efectivo, tarjeta…
referenciastringReference of the payment or the provider.
motivostringReason, written by a person.
sin_comercio_exteriorbooleanMexico, when issuing (finalize): true confirms that a CFDI with goods for a client abroad is not a definitive export. Without it, that issuance responds 409 with the code comercio_exterior, because Cord does not generate the foreign trade complement.
curl -X POST https://cordhq.app/api/v1/facturas/ID \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"action":"finalize"}'
Response: data
idstringIdentifier (UUID).

Collections

GET/api/v1/cobranza

Accounts receivablescope: read

curl https://cordhq.app/api/v1/cobranza \
  -H "Authorization: Bearer sk_test_..."
Response: data
resumenanyTotals at a glance.
aginganyReceivables by age in four fixed buckets: vigente (not yet due), d30 (1–30 days overdue), d60 (31–60) and d60p (more than 60). Each one includes key, label, monto and n.
itemsany[]Line items.
clientesanyBalance grouped by client.

Events

GET/api/v1/events

Event historyscope: readCursor pagination

Query parameters: limit, cursor, type, object_id

curl https://cordhq.app/api/v1/events \
  -H "Authorization: Bearer sk_test_..."
Response: data[]
idstringIdentifier (UUID).
typestringEvent type, for example quote.approved.
objectstringObject type: quote, invoice, client, product, task, promise…
object_idstring | nullID of the object it refers to.
dataobjectContent of the response or the event.
actorstring | nullWho did it: user, api, mcp, client (the recipient of the public link) or system.
created_atstringCreation date, ISO 8601.

Tasks

POST/api/v1/tareas

Create a taskscope: write

FieldTypeDescription
titulo requiredstringWhat needs to be done.
due_datestringDue date, YYYY-MM-DD.
cotizacion_idstringID of the related quote.
factura_idstringID of the related invoice (the `id` from /facturas).
curl -X POST https://cordhq.app/api/v1/tareas \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"titulo":"…"}'
Response: data
idstringIdentifier (UUID).

Workflows

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

Run a "You run it" workflow on quotes or invoicesscope: write

FieldTypeDescription
objeto required"quote" | "invoice"Document type: quote or invoice; it must match the workflow trigger.
ids requiredstring[]Identifiers (UUID) of the documents, from 1 to 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":["…"]}'
Response: data
documentosnumberHow many of the documents sent exist in the organization.
corridasnumberHow many runs started: a document that does not meet the workflow filter or that already went in before does not count.

Webhooks

GET/api/v1/webhooks

Endpoints created by this keyscope: read

curl https://cordhq.app/api/v1/webhooks \
  -H "Authorization: Bearer sk_test_..."
Response: data
idstringIdentifier (UUID).
urlstringHTTPS URL that receives the events.
eventosstring[]List of events or event types. Empty = all.
activobooleanfalse if it is deactivated: it is kept but not used.
created_atstringCreation date, ISO 8601.

POST/api/v1/webhooks

Create an endpoint (the secret is returned only once)scope: write

FieldTypeDescription
url requiredstringHTTPS URL that receives the events.
eventosstring[]List of events or event types. Empty = all.
curl -X POST https://cordhq.app/api/v1/webhooks \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"url":"…"}'
Response: data
idstringIdentifier (UUID).
urlstringHTTPS URL that receives the events.
eventosstring[]List of events or event types. Empty = all.
activobooleanfalse if it is deactivated: it is kept but not used.
created_atstringCreation date, ISO 8601.
secretstringSecret used to verify the signature. It is shown only once.

DELETE/api/v1/webhooks/{id}

Delete an endpointscope: write

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

Elements

GET/api/v1/elements/config

Configuration that Cord Elements rendersAccepts pk_scope: read

curl https://cordhq.app/api/v1/elements/config \
  -H "Authorization: Bearer sk_test_..."
Response: data
object"elements_config"Object type: quote, invoice, client, product, task, promise…
orgobjectOrganization that owns the key.
monedasstring[]Currencies the business offers when quoting.
impuestosobjectTaxes on the document, or the tax catalog.
terminos"contado" | "net7" | "net15" | "net30" | "net45" | "net60" | "net90"[]Payment terms: contado or net<N> (N days of credit: 7, 15, 30, 45, 60 or 90).
terminos_default"contado" | "net7" | "net15" | "net30" | "net45" | "net60" | "net90"Default payment terms.
vigencia_dias_defaultnumberDefault validity, in days.
fiscalobjectTax details.

POST/api/v1/elements/ai-draft

AI line items, streamed (text/event-stream)Accepts pk_scope: write

FieldTypeDescription
textostringFree text of the order.
archivostringJPG, PNG or PDF, up to 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"

Responds text/event-stream with item, done and error events.

Test mode

POST/api/v1/test_helpers/fiscal

Force the outcome of the next issuancesk_test_ onlyscope: write

FieldTypeDescription
siguiente_resultado required"exito" | "pac_caido" | "receptor_invalido" | "certificado_vencido" | "timbre_duplicado"Outcome of the next fiscal issuance in the 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"}'
Response: data
siguiente_resultadostringOutcome of the next fiscal issuance in the sandbox.

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

Simulate a view or an expirationsk_test_ onlyscope: write

FieldTypeDescription
accion required"vista" | "vencer"What to simulate: vista (the client opens the link) or vencer (the quote expires).
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"}'
Response: data
idstringIdentifier (UUID).

POST/api/v1/test_helpers/webhooks

Trigger a webhooksk_test_ onlyscope: write

FieldTypeDescription
evento requiredstringEvent type, for example quote.approved.
objeto_idstringID of a quote or invoice in the sandbox; without it, sample data is used.
curl -X POST https://cordhq.app/api/v1/test_helpers/webhooks \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"evento":"…"}'
Response: data
eventostringEvent type, for example quote.approved.
datos"real" | "ejemplo"real if the data of the given object was used; ejemplo if sample data was made up.

POST/api/v1/test_helpers/listen

Open a cord listen sessionsk_test_ onlyscope: write

FieldTypeDescription
eventosstring[]List of events or event types. Empty = all.
curl -X POST https://cordhq.app/api/v1/test_helpers/listen \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{}'
Response: data
idstringIdentifier (UUID).
secretstringSecret used to verify the signature. It is shown only once.
eventosstring[]List of events or event types. Empty = all.
expirastringExpiration date, ISO 8601.

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

Collect the session's eventssk_test_ onlyscope: write

curl https://cordhq.app/api/v1/test_helpers/listen/ID \
  -H "Authorization: Bearer sk_test_..."
Response: data
event_idstringEvent ID; deduplicate on it.
eventostringEvent type, for example quote.approved.
bodystringRaw body of the event; forward it unchanged so the signature verifies.
headersobjectHeaders to forward as is, including the X-Cord-Signature-V1 signature.

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

Close a cord listen sessionsk_test_ onlyscope: write

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

Setup

POST/api/v1/setup/plans

Propose an account setup (a person approves it at review_url)scope: write

FieldTypeDescription
sitiostringThe business's website, for example yourbusiness.com.
descripcionstringDescription of the business: industry, payment terms, taxes it charges or withholds.
archivoobjectPrice list (Excel, CSV, PDF or photo) in base64, up to 3 MB.
curl -X POST https://cordhq.app/api/v1/setup/plans \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{}'
Response: data
object"setup_plan"Object type: quote, invoice, client, product, task, promise…
idstringIdentifier (UUID).
estado"generando" | "propuesto" | "aplicado" | "descartado" | "fallido"propuesto waits for a person to approve it at review_url.
review_urlstringPage where a signed-in person reviews and applies the proposal. The API never applies it.

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

Status of a setup proposalscope: read

curl https://cordhq.app/api/v1/setup/plans/ID \
  -H "Authorization: Bearer sk_test_..."
Response: data
object"setup_plan"Object type: quote, invoice, client, product, task, promise…
idstringIdentifier (UUID).
estado"generando" | "propuesto" | "aplicado" | "descartado" | "fallido"propuesto waits for a person to approve it at review_url.
review_urlstringPage where a signed-in person reviews and applies the proposal. The API never applies it.