Zum Inhalt springen

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:

  • void beantragt die Stornierung des CFDI mit dem Grund 02 des SAT. Hat der SAT sie noch nicht bestätigt, antwortet die Aktion mit 202 und { "data": { "id": "…", "estado": "open", "cancelacion": "pendiente" } }, und die Rechnung bleibt gültig; invoice.voided wird erst nach der Bestätigung ausgelöst. Die Ersetzung mit dem Grund 01 und die Sammelrechnung (factura global) gibt es nur in der App.
  • payment auf 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.