Rechnungen
Der vollständige Lebenszyklus einer Rechnung aus Ihrem System: Entwurf, Ausstellung, Versand, Zahlung und Stornierung.
Überblick
Eine Rechnung entsteht als Entwurf und wird erst endgültig, wenn Sie sie ausstellen. Das Ausstellen ist eine ausdrückliche, unwiderrufliche Aktion: Es verbraucht, wo zutreffend, eine Stempelung aus Ihrem Tarif (CFDI in Mexiko) und vergibt die Rechnungsnummer. Das Anlegen allein stellt nie aus.
Die Rechnungs-API ist in allen Tarifen verfügbar, auch im kostenlosen, mit Rechnungen ohne Behördenmeldung (Proforma in Mexiko und Spanien). Die integrierte steuerliche Ausstellung (CFDI in Mexiko und Verifactu in Spanien mit hochgeladenem Zertifikat des Unternehmens) erfordert Starter oder höher: document_mode: "fiscal" ohne diesen Tarif antwortet mit 400 invalid_request.
Rechnungen auflisten
GET /api/v1/facturas mit diesen optionalen Filtern:
| Parameter | Funktion |
|---|---|
estado |
draft, open, paid, void, uncollectible oder overdue (offen und bereits überfällig). |
cliente |
ID des Kunden. |
desde, hasta |
Zeitraum nach Erstellungsdatum, YYYY-MM-DD, beide Grenzen eingeschlossen. |
q |
Sucht nach Nummer, Folio fiscal, Nummer des zugrunde liegenden Angebots oder Name des Kunden. |
limit |
Von 1 bis 200; Standard 50. |
cursor |
Der next_cursor der vorherigen Seite. |
Die Paginierung erfolgt per Cursor, nicht per Offset: Eine neue Rechnung verschiebt die Seite, die Sie gerade lesen, nicht.
curl "https://cordhq.app/api/v1/facturas?limit=20" \
-H "Authorization: Bearer sk_live_tU..."
{
"data": [
{
"id": "f3a1c7e9-2b4d-4f6a-8c0e-5d7b9a1c3e24", "numero": "F-0231", "folio_fiscal": "6F1C2A9E-7B4D-4E6A-8C2F-1D5B9E3A7C40", "cliente": "Aceros del Norte",
"estado": "open", "estado_fiscal": "issued", "pais": "MX", "tipo": "cfdi_40",
"moneda": "MXN", "total": 184300, "pagado": 0, "saldo": 184300,
"vence": "2026-10-15", "vencida": false, "cotizacion_id": "2a9d8e4f-6b1c-4d7a-9e3f-5c8b1a2d4e6f", "creada": "15 sep 2026", "language": "es"
}
],
"meta": { "next_cursor": null }
}
creada kommt als Anzeigedatum (15 sep 2026), nicht als ISO-Datum; vence hat dagegen das Format YYYY-MM-DD.
| Feld | Werte |
|---|---|
estado |
draft (Entwurf), open (ausgestellt und offen), paid (bezahlt), void (storniert) oder uncollectible (uneinbringlich). |
estado_fiscal |
pending, issued (beim Steueranbieter registriert), cancelled oder error. |
tipo |
cfdi_40 (CFDI über Einnahmen, Mexiko), cfdi_egreso (CFDI-Gutschrift), proforma (Proforma in Mexiko, Spanien und den Ländern mit autorisierter Rechnung), commercial_invoice (Rechnung ohne Behördenmeldung; in Deutschland die Rechnung nach § 14 UStG), commercial_credit_note (Gutschrift dazu), verifactu_invoice oder verifactu_credit_note (Spanien mit Verifactu). Bei aktiver Ausstellung über die Steuerbehörde: arca_invoice (Argentinien), nfse_invoice und nfe_invoice (Brasilien), sii_invoice (Chile), dian_invoice (Kolumbien) und sunat_invoice (Peru), mit ihren Gutschriften *_credit_note und in Chile sii_debit_note. |
language |
Schreibgeschützt. Die Sprache, in der der Kunde die Rechnung, ihr PDF, ihren Link und ihre E-Mails erhält: es, en, pt, fr oder de. Die Rechnung übernimmt sie beim Ausstellen vom Kunden oder, wenn er keine hat, von Ihrer Organisation; eine Gutschrift erbt die ihrer Rechnung. null bei einem Entwurf. |
Einen Entwurf anlegen
POST /api/v1/facturas legt einen Entwurf an. Erfordert einen Schlüssel mit Schreibzugriff und akzeptiert Idempotency-Key.
| Feld | Pflicht | Details |
|---|---|---|
cliente_id |
Ja | Ein Kunde Ihrer Organisation. |
items |
Ja | 1 bis 200 Positionen. Jede mit descripcion und cantidad; optional precio_unitario, precio_negociado, producto_id, costo_unitario, tax_rate, exemption_reason und in Mexiko clave_sat und clave_unidad_sat. |
currency |
Nein | Währung der Rechnung; standardmäßig die Ihres Kontos. |
due_date |
Nein | Fälligkeit im Format YYYY-MM-DD. |
notas |
Nein | Bis zu 1000 Zeichen. |
iva_incluido |
Nein | true, wenn die Preise die Steuer bereits enthalten. |
document_mode |
Nein | commercial oder fiscal. Ohne Angabe stellt Cord steuerlich aus, wenn Ihr Tarif es enthält und Ihr Land es freigeschaltet hat, andernfalls kommerziell. fiscal ohne den Tarif oder ein freigeschaltetes Land antwortet mit 400 invalid_request. |
fx_buffer_pct |
Nein | Aufschlag in Prozentpunkten auf den Referenzwechselkurs, wenn currency von Ihrer Buchungswährung abweicht (2 = +2 %, höchstens 25). Standard 0. |
descuento |
Nein | Dokumentrabatt vor Steuern: { "tipo": "porcentaje", "valor": 10 } oder { "tipo": "monto", "valor": 2500 }. Cord berechnet den Betrag und verteilt ihn auf die Positionen. Siehe Rabatte und Gutscheine. |
cupon |
Nein | Der Code eines Gutscheins Ihres Kontos. Hat Vorrang vor descuento. Seine Nutzung wird beim Ausstellen der Rechnung gezählt. |
service_date, service_date_end |
Nein | Datum oder Zeitraum der Leistung, YYYY-MM-DD. Das Ende erfordert den Beginn und darf nicht davor liegen. Ohne Angabe vermerkt die Rechnung, dass es dem Ausstellungsdatum entspricht (in Deutschland Pflicht). |
buyer_reference |
Nein | Käuferreferenz (BT-10 der europäischen E-Rechnung; in Deutschland die Leitweg-ID der öffentlichen Verwaltung). Ohne Angabe die des Kunden. Ist die elektronische Adresse des Kunden eine Leitweg-ID, werden ihre Prüfziffern kontrolliert; eine ungültige antwortet mit 400. |
purchase_order |
Nein | Bestellnummer des Kunden (BT-13). |
tax_rate ist eine Bruchzahl (0.16, nicht 16) und wird gegen Ihren Steuerkatalog geprüft: Sie können bei einem steuerpflichtigen Verkauf keine Position als steuerfrei deklarieren. 0 bedeutet bewusst steuerfrei; ohne Angabe gilt der Satz Ihres Kontos. clave_sat und clave_unidad_sat haben Vorrang vor den Schlüsseln des Produkts; ohne beide verwendet der CFDI 01010101 und H87. Ein Schlüssel mit ungültigem Format antwortet mit 400.
curl -X POST "https://cordhq.app/api/v1/facturas" \
-H "Authorization: Bearer sk_live_tU..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: invoice-order-8812" \
-d '{
"cliente_id": "9b2e4c6a-8d1f-4a3b-b5c7-0e2d4f6a8c91",
"currency": "USD",
"due_date": "2026-10-15",
"items": [{ "descripcion": "Rebar 3/8\"", "cantidad": 120, "precio_unitario": 4.2, "tax_rate": 0.0825 }]
}'
{ "data": { "id": "f3a1c7e9-2b4d-4f6a-8c0e-5d7b9a1c3e24" } }
Lautet die Rechnung auf eine andere Währung als Ihre Buchungswährung und lässt sich kein überprüfbarer Wechselkurs abrufen, antwortet sie mit 503 und code: "fx_unavailable": Versuchen Sie es später erneut – Cord erfindet keinen Kurs.
Eine Rechnung abrufen
GET /api/v1/facturas/{id} gibt die Felder der Liste zurück sowie subtotal, impuestos, moneda_contable, tipo_cambio, total_contable, notas, nota_credito_de, emisor, receptor, descuento, conceptos und pagos.
| Feld | Details |
|---|---|
descuento |
null oder { tipo, valor, cupon, monto, moneda }: die Definition, der Gutschein, aus dem er stammt, und der Betrag vor Steuern. subtotal ist bereits netto. |
conceptos[].precio_unitario |
Netto-Einzelpreis nach dem Dokumentrabatt, ohne Steuer. |
conceptos[].subtotal |
Nettobasis der Position. |
conceptos[].descuento |
Der Anteil des Dokumentrabatts, der auf diese Position entfällt; 0, wenn es keinen gibt. |
conceptos[].clave_sat, conceptos[].clave_unidad_sat |
Mexiko: die SAT-Schlüssel, mit denen die Position gestempelt wurde; außerhalb Mexikos null. |
pagos |
Jede Zahlung mit monto, moneda, metodo, referencia und cuando. Eine Zahlung, die mehrere Rechnungen beglichen hat, erscheint bei jeder mit dem jeweiligen Anteil. |
Den Status ändern
POST /api/v1/facturas/{id} mit action:
action |
Funktion | Felder |
|---|---|---|
finalize |
Stellt die Rechnung aus. Unwiderruflich; stempelt in Mexiko, wo zutreffend, den CFDI. | — |
send |
Sendet die E-Mail der Rechnung mit ihrem PDF an den Kunden, in der Sprache der Rechnung (language). Erfordert eine ausgestellte Rechnung und einen Kunden mit E-Mail-Adresse. |
— |
payment |
Erfasst eine vollständige oder Teilzahlung. | monto, moneda, metodo (Standard manual), referencia |
void |
Storniert die Rechnung. | motivo |
credit_note |
Stellt eine Gutschrift zur Rechnung aus. | monto (optional; ohne Angabe über den Gesamtbetrag), motivo |
payment antwortet mit dem bezahlten Betrag, dem offenen Betrag und dem resultierenden Status. Eine Zahlung, die die Rechnung begleicht, löst das Ereignis invoice.paid aus.
Lässt sich eine bereits gestempelte Rechnung nicht direkt stornieren, antwortet void mit 409 und code: "credit_note_required": Stellen Sie stattdessen eine Gutschrift aus.
In Mexiko:
voidbeantragt die Stornierung des CFDI mit dem Grund 02 des SAT. Hat der SAT sie noch nicht bestätigt, antwortet die Aktion mit202und{ "data": { "id": "…", "estado": "open", "cancelacion": "pendiente" } }, und die Rechnung bleibt gültig;invoice.voidedwird erst nach der Bestätigung ausgelöst. Die Ersetzung mit dem Grund 01 und die Sammelrechnung (factura global) gibt es nur in der App.paymentauf einen PPD-CFDI löst das automatische Zahlungskomplement für diese Zahlung aus.
Häufige Fehler
| Code | Wann |
|---|---|
invalid_request (400) |
cliente_id oder items fehlt, einer Position fehlen Beschreibung oder Menge, due_date hat nicht das Format YYYY-MM-DD, der Rabatt hat nicht die Form { tipo, valor } oder eine Leitweg-ID besteht die Prüfziffernkontrolle nicht. |
coupon_no_existe (404) |
Der Gutschein existiert in Ihrem Konto nicht. |
coupon_inactivo, coupon_vencido, coupon_aun_no_vigente, coupon_agotado, coupon_agotado_cliente, coupon_moneda, coupon_requiere_cliente (409) |
Der Gutschein gilt für diese Rechnung nicht; die Meldung nennt den Grund. |
invalid_state (409) |
Die Aktion passt nicht zum aktuellen Status (zum Beispiel das Senden eines Entwurfs). Das Senden an einen Kunden ohne E-Mail-Adresse antwortet mit 400 und demselben Code. |
credit_note_required (409) |
Die bereits gestempelte Rechnung kann nicht direkt storniert werden: Stellen Sie eine Gutschrift aus. |
not_found (404) |
Die Rechnung existiert in Ihrer Organisation nicht. |
provider_error (502) |
Der Steueranbieter hat die Ausstellung abgelehnt; die Meldung nennt den Grund. |
send_failed (502) |
Die E-Mail der Rechnung konnte nicht gesendet werden. Wiederholen Sie send. |
fx_unavailable, tax_catalog_unavailable (503) |
Es gibt keinen überprüfbaren Wechselkurs, oder Ihr Steuerkatalog konnte nicht gelesen werden. Versuchen Sie es erneut. |