/melesenSchlüssel, Betrieb, Rechte und verfügbare Bereiche
Praktisch zum Testen der Verbindung.
Antwort: Status 200
curl "https://crm.serv24-it.ch/api/v2/me" \
-H "Authorization: Bearer $CRM_KEY"Kunden, Rechnungen und alle weiteren Module aus Fremdsoftware anlegen, abrufen und ändern – mit Webhooks für Ereignisse in Echtzeit.
https://crm.serv24-it.ch/api/v2https://crm.serv24-it.ch/api.php/v2crm_… wird nur einmal angezeigt.export CRM_KEY="crm_…"
curl "https://crm.serv24-it.ch/api/v2/me" -H "Authorization: Bearer $CRM_KEY"
Kunde anlegen und gleich eine Rechnung senden:
curl -X POST "https://crm.serv24-it.ch/api/v2/customers" -H "Authorization: Bearer $CRM_KEY" -H "Content-Type: application/json" \
-d '{"company":"Muster AG","first_name":"Anna","last_name":"Muster","email":"anna.muster@example.ch","street":"Bahnhofstrasse 1","zip":"8001","city":"Zürich","country":"CH"}'
# → {"data":{"id":123,"customer_no":"10024","region":"Zürich",…}}
curl -X POST "https://crm.serv24-it.ch/api/v2/documents" -H "Authorization: Bearer $CRM_KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: rechnung-erp-4711" \
-d '{"type":"invoice","customer_id":123,"title":"Webseite","items":[{"description":"Design","qty":8,"unit":"Std.","price":150}],"send":true}'
# → {"data":{"id":456,"number":"RE-2026-0042","status":"open","total":1297.2,"url":"https://…",…},"delivery":{"ok":true,"channel":"email",…}}
curl -X POST "https://crm.serv24-it.ch/api/v2/payments" -H "Authorization: Bearer $CRM_KEY" -H "Content-Type: application/json" -d '{"document_id":456,"amount":1297.2}'
Jede Anfrage braucht den Header Authorization: Bearer crm_… (alternativ X-API-Key: crm_…). Schlüssel gehören zu einem Betrieb und werden nur als Hash gespeichert – verlorene Schlüssel löschen und neu erstellen. Immer über HTTPS aufrufen und Schlüssel nie im Browser/Frontend verwenden.
| Einstellung | Wirkung |
|---|---|
| Rechte | nur lesen: nur GET · lesen und schreiben: alle Methoden |
| Bereiche | Optional auf einzelne Bereiche beschränken (z.B. nur customers und documents). Andere Bereiche liefern 403 insufficient_scope. |
| IP-Freigabe | Optional: nur von bestimmten IP-Adressen oder Netzen (z.B. 203.0.113.10, 198.51.100.0/24). |
| Ablaufdatum | Optional: nach diesem Tag ist der Schlüssel ungültig (401 key_expired). |
| Module | Bereiche wie Mobile, Webhosting oder Online-Shop funktionieren nur, wenn das Modul im Abo aktiv ist (sonst 403 module_unavailable). GET /me zeigt, was verfügbar ist. |
Sensible Daten werden über die API nie ausgegeben: hinterlegte Zahlungsmittel, PIN/PUK, Zugangsdaten, Ausweiskopien, Tresor-Inhalte und interne Links/Tokens.
Content-Type: application/json), Formulardaten werden ebenfalls angenommen.{"data": …}, bei Listen zusätzlich "meta". Fehler: {"error": {"code", "message", "details", "request_id"}}.PATCH ändert nur die übergebenen Felder (PUT wird gleich behandelt). Nur-lesen-Felder werden ignoriert, unbekannte Felder abgelehnt.1297.2), Datum JJJJ-MM-TT, Zeitpunkte ISO 8601 (2026-10-24T14:05:00+02:00), MWST-Sätze in Prozent (8.1).X-Request-Id – bei Rückfragen bitte angeben.Alle Listen sind seitenweise: limit (1–200, Standard 50) und offset. meta.total nennt die Gesamtzahl, meta.has_more ob weitere Einträge folgen. Filter je Endpunkt (siehe unten) lassen sich kombinieren; Mehrfachwerte kommagetrennt (status=open,partial). Sortierung mit sort=-date,number.
{
"data": [
{
"id": 123,
"customer_no": "10023",
"name": "Muster AG (Anna Muster)",
"…": "…"
}
],
"meta": {
"total": 87,
"limit": 50,
"offset": 0,
"has_more": true
}
}
Änderungen seit dem letzten Abgleich: bei vielen Listen created_since, für laufende Änderungen sind Webhooks die bessere Wahl.
| HTTP | code | Bedeutung |
|---|---|---|
| 400 | invalid_json, invalid_body | Kein gültiges JSON bzw. kein JSON-Objekt |
| 401 | unauthorized, key_expired | Schlüssel fehlt, ist falsch oder abgelaufen |
| 402 | subscription_inactive | Abo des Betriebs nicht aktiv |
| 403 | insufficient_scope, module_unavailable, ip_not_allowed | Schlüssel darf das nicht (nur lesen / Bereich), Modul nicht im Abo, IP nicht freigegeben |
| 404 | not_found, unknown_endpoint | Datensatz oder Endpunkt gibt es nicht |
| 405 | method_not_allowed | Methode für diesen Pfad nicht möglich (Header Allow) |
| 409 | conflict, not_draft, has_documents, period_locked, duplicate … | Widerspricht dem aktuellen Zustand |
| 413 | payload_too_large | Datei zu gross |
| 422 | validation_failed, rejected, delivery_failed | Eingaben ungültig – details nennt die Felder |
| 429 | rate_limited | Zu viele Anfragen (Retry-After) |
| 500 | server_error | Interner Fehler – bitte mit request_id melden |
{
"error": {
"code": "validation_failed",
"message": "Ungültige Eingaben: email, items[0].price",
"details": {
"email": "ungültige E-Mail-Adresse",
"items[0].price": "Zahl erwartet (Dezimalpunkt)"
},
"request_id": "7c1e2a9b04d3"
}
}Höchstens 120 Anfragen pro Minute und Schlüssel. Jede Antwort enthält X-RateLimit-Limit, X-RateLimit-Remaining und X-RateLimit-Reset (Unix-Zeit). Bei Überschreitung folgt 429 mit Retry-After (Sekunden) – danach einfach erneut senden.
Bei POST kann ein Header Idempotency-Key mitgesendet werden (z.B. die ID aus Ihrem System). Wird dieselbe Anfrage innert 24 Stunden mit demselben Schlüssel wiederholt – etwa nach einem Verbindungsabbruch –, wird sie nicht doppelt ausgeführt; Sie erhalten die ursprüngliche Antwort mit Header Idempotent-Replayed: true. Derselbe Schlüssel mit anderem Inhalt ergibt 422 idempotency_mismatch.
Webhooks melden Ereignisse sofort per POST an Ihre HTTPS-Adresse – einrichten unter Einstellungen → REST-API oder über /webhooks. Antworten Sie innert 8 Sekunden mit einem 2xx-Status. Bei Fehlern wird bis zu 8 Mal wiederholt (nach 1, 5, 15 Min., 1, 3, 6, 12 und 24 Std.); nach 50 Fehlschlägen in Folge wird der Webhook pausiert. Ereignisse können in seltenen Fällen doppelt ankommen – nutzen Sie id zum Erkennen.
| Ereignis | Auslöser |
|---|---|
customer.created | Kunde angelegt |
customer.updated | Kunde geändert |
customer.deleted | Kunde gelöscht |
document.created | Beleg als Entwurf angelegt |
document.finalized | Beleg abgeschlossen (Nummer vergeben) |
document.sent | Beleg an den Kunden versendet |
document.paid | Rechnung vollständig bezahlt |
document.cancelled | Beleg storniert |
payment.created | Zahlung erfasst |
payment.deleted | Zahlung gelöscht |
request.created | Kundenanfrage eröffnet |
request.updated | Neue Nachricht oder Statuswechsel bei einer Anfrage |
shop_order.created | Bestellung im Online-Shop eingegangen |
webhook.test | Testereignis (über die Einstellungen oder POST /webhooks/{id}/test) |
{
"id": "evt_3f9a1c…",
"event": "document.paid",
"created_at": "2026-11-14T14:21:37+01:00",
"data": {
"id": 456,
"type": "invoice",
"number": "RE-2026-0042",
"status": "paid",
"customer_id": 123,
"total": 1297.2,
"paid_total": 1297.2,
"balance": 0,
"…": "…"
}
}data hat dieselbe Form wie die Antwort des entsprechenden GET-Endpunkts (ohne Positionen).
X-Webhook-Event | Ereignis, z.B. document.paid |
X-Webhook-Delivery | Nummer der Zustellung |
X-Webhook-Attempt | Versuch (1–8) |
X-Webhook-Signature | t=<Unix-Zeit>,v1=<HMAC-SHA256> über t + "." + Rohdaten mit Ihrem Geheimnis whsec_… |
PHP
$payload = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? ''; // t=1767225600,v1=5f1c…
preg_match('/t=(\d+),v1=([a-f0-9]{64})/', $sig, $m);
$expected = hash_hmac('sha256', $m[1] . '.' . $payload, getenv('CRM_WEBHOOK_SECRET'));
if (!$m || !hash_equals($expected, $m[2]) || abs(time() - (int)$m[1]) > 300) { http_response_code(401); exit; }
$event = json_decode($payload, true); // ['id' => 'evt_…', 'event' => 'document.paid', 'data' => [...]]
http_response_code(200); // innert 8 Sekunden mit 2xx antwortenNode.js
const crypto = require('crypto');
// Express: app.post('/webhooks/crm', express.raw({ type: 'application/json' }), handler)
function verify(rawBody, header, secret) {
const [, t, v1] = /t=(\d+),v1=([a-f0-9]{64})/.exec(header || '') || [];
if (!t || Math.abs(Date.now() / 1000 - t) > 300) return false;
const exp = crypto.createHmac('sha256', secret).update(t + '.' + rawBody).digest('hex');
return crypto.timingSafeEqual(Buffer.from(exp), Buffer.from(v1));
}Python
import hmac, hashlib, re, time
def verify(raw_body: bytes, header: str, secret: str) -> bool:
m = re.match(r"t=(\d+),v1=([a-f0-9]{64})", header or "")
if not m or abs(time.time() - int(m[1])) > 300: return False
exp = hmac.new(secret.encode(), m[1].encode() + b"." + raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(exp, m[2])Verbindung, Rechte und Auswahllisten
/melesenSchlüssel, Betrieb, Rechte und verfügbare Bereiche
Praktisch zum Testen der Verbindung.
Antwort: Status 200
curl "https://crm.serv24-it.ch/api/v2/me" \
-H "Authorization: Bearer $CRM_KEY"/metalesenAuswahllisten (Belegarten, Status, Länder, Regionen, MWST-Sätze, Ereignisse …)
Antwort: Status 200
curl "https://crm.serv24-it.ch/api/v2/meta" \
-H "Authorization: Bearer $CRM_KEY"Kunden, Kontaktpersonen, Notizen und Kundendokumente · Bereich customers
/customerslesenKunden auflisten
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
search | Query | Text | Freitext (Firma, Name, E-Mail, Kundennummer, Ort) |
customer_no | Query | Text | Kundennummer |
email | Query | Text | E-Mail (genau) |
ext_ref | Query | Text | Ihre Referenz |
type | Query | Text: person | company | Art |
tag | Query | Text | Schlagwort |
country | Query | Text | Land |
archived | Query | Text: false | true | all | false = aktive (Standard), true = archivierte, all = alle |
created_since | Query | Zeitpunkt | Nur Einträge, die ab diesem Zeitpunkt erfasst wurden (ISO 8601) |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard id · möglich: id, customer_no, company, last_name, city, created_at (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von Customer + meta
curl "https://crm.serv24-it.ch/api/v2/customers?search=muster" \
-H "Authorization: Bearer $CRM_KEY"/customersschreibenKunde anlegen
Ort und Kanton/Bundesland werden anhand der PLZ geprüft und ergänzt. Bei fehlender Kundennummer wird die nächste freie vergeben.
| Feld | Typ | Beschreibung |
|---|---|---|
customer_no | Text | Kundennummer – leer lassen für die nächste freie Nummer |
type | Text: person | company | Privatperson oder Firma (Standard: company, wenn «company» gesetzt ist, sonst person) |
company | Text | Firmenname (Firma: Pflicht, sonst last_name) |
salutation | Text | Anrede, z.B. Herr, Frau |
first_name | Text | Vorname |
last_name | Text | Nachname (Privatperson: Pflicht) |
email | E-Mail-Adresse (Rechnungsversand) | |
phone | Text | Telefon |
mobile | Text | Mobile |
website | Text | Webseite |
street | Text | Strasse und Hausnummer |
address2 | Text | Adresszusatz, Postfach |
zip | Text | PLZ |
city | Text | Ort – Schreibweise wird anhand der PLZ korrigiert |
region | Text · null | Kanton / Bundesland / Region – leer = automatisch aus PLZ und Ort |
country | Text | Land, ISO-3166-Code (CH, LI und EU-Staaten), Standard CH |
birth_date | Datum · null | Geburtsdatum (JJJJ-MM-TT) |
language | Text: de | fr | it | en | Sprache der Belege |
uid_no | Text | UID (CHE-…) |
vat_no | Text | MWST-Nummer |
payment_days | Ganzzahl · null | Zahlungsfrist in Tagen (leer = Standard des Betriebs) |
delivery_channel | Text: email | post | Rechnungsversand per E-Mail oder Post |
tags | Text | Schlagwörter, durch Komma getrennt |
notes | Text (lang) | Interne Bemerkungen |
ext_ref | Text · null | Ihre Referenz im Fremdsystem (frei verwendbar, filterbar) |
archived | true/false | Archiviert |
dunning_stop | true/false | Mahnstopp für alle Rechnungen des Kunden |
dunning_stop_until | Datum · null | Mahnstopp bis (leer = unbefristet) |
dunning_stop_reason | Text · null | Grund des Mahnstopps (intern) |
contacts | Liste von Contact | Kontaktpersonen gleich mitanlegen (Schema Contact) |
Antwort: Status 201 · data: Customer
curl -X POST "https://crm.serv24-it.ch/api/v2/customers" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"type":"company","company":"Muster AG","first_name":"Anna","last_name":"Muster","email":"anna.muster@example.ch","street":"Bahnhofstrasse 1","zip":"8001","city":"Zürich","country":"CH","ext_ref":"ERP-4711","contacts":[{"name":"Peter Beispiel","position":"Buchhaltung","email":"buchhaltung@example.ch"}]}'/customers/{id}lesenKunde abrufen (inkl. Kontaktpersonen und offenem Betrag)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Customer
curl "https://crm.serv24-it.ch/api/v2/customers/123" \
-H "Authorization: Bearer $CRM_KEY"/customers/{id}schreibenKunde ändern (nur übergebene Felder)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
customer_no | Text | Kundennummer – leer lassen für die nächste freie Nummer |
type | Text: person | company | Privatperson oder Firma (Standard: company, wenn «company» gesetzt ist, sonst person) |
company | Text | Firmenname (Firma: Pflicht, sonst last_name) |
salutation | Text | Anrede, z.B. Herr, Frau |
first_name | Text | Vorname |
last_name | Text | Nachname (Privatperson: Pflicht) |
email | E-Mail-Adresse (Rechnungsversand) | |
phone | Text | Telefon |
mobile | Text | Mobile |
website | Text | Webseite |
street | Text | Strasse und Hausnummer |
address2 | Text | Adresszusatz, Postfach |
zip | Text | PLZ |
city | Text | Ort – Schreibweise wird anhand der PLZ korrigiert |
region | Text · null | Kanton / Bundesland / Region – leer = automatisch aus PLZ und Ort |
country | Text | Land, ISO-3166-Code (CH, LI und EU-Staaten), Standard CH |
birth_date | Datum · null | Geburtsdatum (JJJJ-MM-TT) |
language | Text: de | fr | it | en | Sprache der Belege |
uid_no | Text | UID (CHE-…) |
vat_no | Text | MWST-Nummer |
payment_days | Ganzzahl · null | Zahlungsfrist in Tagen (leer = Standard des Betriebs) |
delivery_channel | Text: email | post | Rechnungsversand per E-Mail oder Post |
tags | Text | Schlagwörter, durch Komma getrennt |
notes | Text (lang) | Interne Bemerkungen |
ext_ref | Text · null | Ihre Referenz im Fremdsystem (frei verwendbar, filterbar) |
archived | true/false | Archiviert |
dunning_stop | true/false | Mahnstopp für alle Rechnungen des Kunden |
dunning_stop_until | Datum · null | Mahnstopp bis (leer = unbefristet) |
dunning_stop_reason | Text · null | Grund des Mahnstopps (intern) |
Antwort: Status 200 · data: Customer
curl -X PATCH "https://crm.serv24-it.ch/api/v2/customers/123" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-d '{"phone":"+41 44 123 45 67","tags":"VIP, Newsletter"}'/customers/{id}schreibenKunde löschen (nur ohne Belege – sonst archivieren)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 204 ohne Inhalt
curl -X DELETE "https://crm.serv24-it.ch/api/v2/customers/123" \
-H "Authorization: Bearer $CRM_KEY"/customers/{id}/contactslesenKontaktpersonen eines Kunden
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Liste von Contact
curl "https://crm.serv24-it.ch/api/v2/customers/123/contacts" \
-H "Authorization: Bearer $CRM_KEY"/customers/{id}/contactsschreibenKontaktperson anlegen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
salutation | Text | Anrede |
name Pflicht | Text | Name |
position | Text | Funktion |
email | ||
phone | Text | Telefon |
mobile | Text | Mobile |
Antwort: Status 201 · data: Contact
curl -X POST "https://crm.serv24-it.ch/api/v2/customers/123/contacts" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"salutation":"Text","name":"Webdesign Paket"}'/contacts/{id}schreibenKontaktperson ändern
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
salutation | Text | Anrede |
name | Text | Name |
position | Text | Funktion |
email | ||
phone | Text | Telefon |
mobile | Text | Mobile |
Antwort: Status 200 · data: Contact
curl -X PATCH "https://crm.serv24-it.ch/api/v2/contacts/123" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-d '{"salutation":"Text","name":"Webdesign Paket"}'/contacts/{id}schreibenKontaktperson löschen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 204 ohne Inhalt
curl -X DELETE "https://crm.serv24-it.ch/api/v2/contacts/123" \
-H "Authorization: Bearer $CRM_KEY"/customers/{id}/noteslesenNotizen eines Kunden
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Liste von Note
curl "https://crm.serv24-it.ch/api/v2/customers/123/notes" \
-H "Authorization: Bearer $CRM_KEY"/customers/{id}/notesschreibenNotiz erfassen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
note Pflicht | Text (lang) | Text |
Antwort: Status 201 · data: Note
curl -X POST "https://crm.serv24-it.ch/api/v2/customers/123/notes" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"note":"Rückruf vereinbart"}'/customers/{id}/fileslesenKundendokumente auflisten (Modul Dokumentablage)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Liste von File
curl "https://crm.serv24-it.ch/api/v2/customers/123/files" \
-H "Authorization: Bearer $CRM_KEY"/customers/{id}/filesschreibenKundendokument ablegen (Base64)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
name Pflicht | Text | Dateiname inkl. Endung (pdf, jpg, png, docx, xlsx, zip …) |
content_base64 Pflicht | Text | Dateiinhalt Base64-kodiert (max. 25 MB) |
category | Text | Kategorie: Vertrag, Offerte, Korrespondenz, Plan, Foto, Rechnung, Sonstiges |
note | Text | Bemerkung |
shared | true/false | Im Kundenportal sichtbar |
Antwort: Status 201 · data: File
curl -X POST "https://crm.serv24-it.ch/api/v2/customers/123/files" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"name":"vertrag.pdf","content_base64":"JVBERi0xLjQK…","category":"Vertrag","shared":true}'/customers/{id}/files/{file_id}lesenKundendokument herunterladen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
file_id | Pfad | Ganzzahl | ID |
Antwort: Datei (application/octet-stream)
curl "https://crm.serv24-it.ch/api/v2/customers/123/files/9" \
-H "Authorization: Bearer $CRM_KEY" -o datei/customers/{id}/files/{file_id}schreibenKundendokument löschen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
file_id | Pfad | Ganzzahl | ID |
Antwort: Status 204 ohne Inhalt
curl -X DELETE "https://crm.serv24-it.ch/api/v2/customers/123/files/9" \
-H "Authorization: Bearer $CRM_KEY"Offerten, Aufträge, Lieferscheine, Rechnungen, Gutschriften inkl. PDF, Versand, Storno · Bereich documents
/documentslesenBelege auflisten
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
type | Query | Text | Belegart(en), kommagetrennt: quote, order, delivery, invoice, credit |
status | Query | Text | Status, kommagetrennt (z.B. open,partial) |
customer_id | Query | Ganzzahl | Kunde |
number | Query | Text | Belegnummer |
ext_ref | Query | Text | Ihre Referenz |
recurring_id | Query | Ganzzahl | Aus Abo-Rechnung |
overdue | Query | true/false | true = nur überfällige offene Rechnungen |
from | Query | Datum | Belegdatum ab (JJJJ-MM-TT) |
to | Query | Datum | Belegdatum bis (JJJJ-MM-TT) |
created_since | Query | Zeitpunkt | Nur Einträge, die ab diesem Zeitpunkt erfasst wurden (ISO 8601) |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard -id · möglich: id, date, due_date, number, total, created_at (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von Document + meta
curl "https://crm.serv24-it.ch/api/v2/documents?type=invoice&status=open,partial&limit=20" \
-H "Authorization: Bearer $CRM_KEY"/documentsschreibenBeleg anlegen (z.B. Rechnung)
Ohne finalize/send entsteht ein Entwurf, der noch geändert werden kann. Positionen mit product_id übernehmen Text, Preis, Einheit und MWST vom Artikel, soweit nicht angegeben.
| Feld | Typ | Beschreibung |
|---|---|---|
type | Text: quote | order | delivery | invoice | credit | Belegart: Offerte, Auftragsbestätigung, Lieferschein, Rechnung, Gutschrift (Standard invoice) |
customer_id Pflicht | Ganzzahl | Kunde |
title | Text | Titel / Betreff |
date | Datum | Belegdatum (Standard heute) |
due_date | Datum | Fällig am bzw. gültig bis (Standard: Datum + Zahlungsfrist) |
delivery_date | Datum · null | Liefer-/Leistungsdatum |
language | Text: de | fr | it | en | Sprache (Standard: Sprache des Kunden) |
intro | Text (lang) | Einleitungstext |
footer | Text (lang) | Schlusstext (Standard: Fusstext des Betriebs) |
terms | Text (lang) · null | Konditionen |
dunning_stop | true/false | Mahnstopp (nur Rechnungen): keine Mahnungen, keine Gebühren, keine Inkasso-Übergabe – auch bei abgeschlossenen Rechnungen änderbar |
dunning_stop_until | Datum · null | Mahnstopp bis (leer = bis zur Aufhebung) |
dunning_stop_reason | Text · null | Grund des Mahnstopps (intern) |
ext_ref | Text · null | Ihre Referenz im Fremdsystem |
items Pflicht | Liste von Item | Positionen (Item) – beim Ändern werden alle Positionen ersetzt (in Listen nicht enthalten) |
finalize | true/false | Gleich abschliessen (Nummer vergeben, Status offen) |
send | true/false | Gleich abschliessen und an den Kunden senden (E-Mail bzw. Post gemäss Kunde) |
Antwort: Status 201 · data: Document
curl -X POST "https://crm.serv24-it.ch/api/v2/documents" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"type":"invoice","customer_id":123,"title":"Webseite Relaunch","items":[{"description":"Konzept und Design","qty":8,"unit":"Std.","price":150,"vat_rate":8.1},{"product_id":12,"qty":1}],"send":true}'/documents/{id}lesenBeleg abrufen (inkl. Positionen und Zahlungen)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Document
curl "https://crm.serv24-it.ch/api/v2/documents/123" \
-H "Authorization: Bearer $CRM_KEY"/documents/{id}schreibenEntwurf ändern (abgeschlossene Belege: nur ext_ref und Mahnstopp)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
type | Text: quote | order | delivery | invoice | credit | Belegart: Offerte, Auftragsbestätigung, Lieferschein, Rechnung, Gutschrift (Standard invoice) |
customer_id | Ganzzahl | Kunde |
title | Text | Titel / Betreff |
date | Datum | Belegdatum (Standard heute) |
due_date | Datum | Fällig am bzw. gültig bis (Standard: Datum + Zahlungsfrist) |
delivery_date | Datum · null | Liefer-/Leistungsdatum |
language | Text: de | fr | it | en | Sprache (Standard: Sprache des Kunden) |
intro | Text (lang) | Einleitungstext |
footer | Text (lang) | Schlusstext (Standard: Fusstext des Betriebs) |
terms | Text (lang) · null | Konditionen |
dunning_stop | true/false | Mahnstopp (nur Rechnungen): keine Mahnungen, keine Gebühren, keine Inkasso-Übergabe – auch bei abgeschlossenen Rechnungen änderbar |
dunning_stop_until | Datum · null | Mahnstopp bis (leer = bis zur Aufhebung) |
dunning_stop_reason | Text · null | Grund des Mahnstopps (intern) |
ext_ref | Text · null | Ihre Referenz im Fremdsystem |
items | Liste von Item | Positionen (Item) – beim Ändern werden alle Positionen ersetzt (in Listen nicht enthalten) |
Antwort: Status 200 · data: Document
curl -X PATCH "https://crm.serv24-it.ch/api/v2/documents/123" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Webseite Relaunch – Phase 1","due_date":"2026-12-14"}'/documents/{id}schreibenEntwurf löschen (abgeschlossene Belege stornieren)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 204 ohne Inhalt
curl -X DELETE "https://crm.serv24-it.ch/api/v2/documents/123" \
-H "Authorization: Bearer $CRM_KEY"/documents/{id}/finalizeschreibenBeleg abschliessen (Nummer, QR-Referenz, Status offen)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Document
curl -X POST "https://crm.serv24-it.ch/api/v2/documents/123/finalize" \
-H "Authorization: Bearer $CRM_KEY"/documents/{id}/sendschreibenBeleg an den Kunden senden (schliesst Entwürfe vorher ab)
Versandweg gemäss Kunde (E-Mail oder Post). Antwort enthält zusätzlich «delivery» mit channel und message.
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Document
curl -X POST "https://crm.serv24-it.ch/api/v2/documents/123/send" \
-H "Authorization: Bearer $CRM_KEY"/documents/{id}/cancelschreibenBeleg stornieren
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
notify | true/false | Kunde per E-Mail informieren (Standard true) |
Antwort: Status 200 · data: Document
curl -X POST "https://crm.serv24-it.ch/api/v2/documents/123/cancel" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"notify":false}'/documents/{id}/convertschreibenIn andere Belegart umwandeln (Offerte → Auftrag → Lieferschein → Rechnung → Gutschrift)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
type Pflicht | Text: order | delivery | invoice | credit | Ziel-Belegart |
Antwort: Status 201 · data: Document
curl -X POST "https://crm.serv24-it.ch/api/v2/documents/123/convert" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"type":"invoice"}'/documents/{id}/pdflesenBeleg als PDF
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Datei (application/pdf)
curl "https://crm.serv24-it.ch/api/v2/documents/123/pdf" \
-H "Authorization: Bearer $CRM_KEY" -o datei/documents/{id}/paymentslesenZahlungen zu einem Beleg
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Liste von Payment
curl "https://crm.serv24-it.ch/api/v2/documents/123/payments" \
-H "Authorization: Bearer $CRM_KEY"Zahlungseingänge zu Rechnungen und Gutschriften · Bereich payments
/paymentslesenZahlungen auflisten
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
document_id | Query | Ganzzahl | Beleg |
method | Query | Text | Zahlungsart |
from | Query | Datum | Zahlungsdatum ab (JJJJ-MM-TT) |
to | Query | Datum | Zahlungsdatum bis (JJJJ-MM-TT) |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard -date · möglich: id, date, amount (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von Payment + meta
curl "https://crm.serv24-it.ch/api/v2/payments" \
-H "Authorization: Bearer $CRM_KEY"/paymentsschreibenZahlung erfassen
Setzt den Status der Rechnung (teilweise bezahlt / bezahlt) und verbucht die Einnahme. Die Antwort enthält zusätzlich «document» (aktualisierter Beleg).
| Feld | Typ | Beschreibung |
|---|---|---|
document_id Pflicht | Ganzzahl | Rechnung oder Gutschrift |
date | Datum | Zahlungsdatum (Standard heute) |
amount | Zahl | Betrag (Standard: offener Betrag) |
method | Text | Zahlungsart, z.B. Bank, Bar, TWINT (Standard API) |
note | Text | Bemerkung |
book | true/false | Als Einnahme verbuchen (Standard true) |
Antwort: Status 201 · data: Payment
curl -X POST "https://crm.serv24-it.ch/api/v2/payments" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"document_id":456,"amount":1297.2,"date":"2026-11-14","method":"Bank"}'/payments/{id}lesenZahlung abrufen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Payment
curl "https://crm.serv24-it.ch/api/v2/payments/123" \
-H "Authorization: Bearer $CRM_KEY"/payments/{id}schreibenZahlung löschen (inkl. Buchung)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 204 ohne Inhalt
curl -X DELETE "https://crm.serv24-it.ch/api/v2/payments/123" \
-H "Authorization: Bearer $CRM_KEY"Artikel- und Leistungsstamm · nur verfügbar, wenn das entsprechende Modul im Abo aktiv ist · Bereich products
/productslesenArtikel auflisten
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
search | Query | Text | Freitext |
number | Query | Text | Artikelnummer |
ext_ref | Query | Text | Ihre Referenz |
active | Query | true/false | Nur aktive bzw. inaktive |
shop | Query | true/false | Im Online-Shop |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard name · möglich: id, name, number, price (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von Product + meta
curl "https://crm.serv24-it.ch/api/v2/products" \
-H "Authorization: Bearer $CRM_KEY"/productsschreibenArtikel anlegen
| Feld | Typ | Beschreibung |
|---|---|---|
number | Text | Artikelnummer |
name Pflicht | Text | Bezeichnung |
description | Text (lang) | Beschreibung |
unit | Text | Einheit |
price | Zahl | Preis |
vat_rate | Zahl | MWST-Satz in Prozent |
type | Text | product (Ware) oder service (Dienstleistung) |
account_no | Text · null | Erlöskonto |
active | true/false | In Belegen auswählbar |
shop | true/false | Im Online-Shop angeboten |
shop_text | Text (lang) · null | Text im Online-Shop |
ext_ref | Text · null | Ihre Referenz im Fremdsystem |
Antwort: Status 201 · data: Product
curl -X POST "https://crm.serv24-it.ch/api/v2/products" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"number":"Text","name":"Webdesign Paket"}'/products/{id}lesenArtikel abrufen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Product
curl "https://crm.serv24-it.ch/api/v2/products/123" \
-H "Authorization: Bearer $CRM_KEY"/products/{id}schreibenArtikel ändern
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
number | Text | Artikelnummer |
name | Text | Bezeichnung |
description | Text (lang) | Beschreibung |
unit | Text | Einheit |
price | Zahl | Preis |
vat_rate | Zahl | MWST-Satz in Prozent |
type | Text | product (Ware) oder service (Dienstleistung) |
account_no | Text · null | Erlöskonto |
active | true/false | In Belegen auswählbar |
shop | true/false | Im Online-Shop angeboten |
shop_text | Text (lang) · null | Text im Online-Shop |
ext_ref | Text · null | Ihre Referenz im Fremdsystem |
Antwort: Status 200 · data: Product
curl -X PATCH "https://crm.serv24-it.ch/api/v2/products/123" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-d '{"number":"Text","name":"Webdesign Paket"}'/products/{id}schreibenArtikel löschen (in Belegen verwendet → wird deaktiviert, Antwort 200)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 204 ohne Inhalt
curl -X DELETE "https://crm.serv24-it.ch/api/v2/products/123" \
-H "Authorization: Bearer $CRM_KEY"Wiederkehrende Rechnungen · nur verfügbar, wenn das entsprechende Modul im Abo aktiv ist · Bereich recurring
/recurringlesenAbo-Rechnungen auflisten
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
customer_id | Query | Ganzzahl | Kunde |
active | Query | true/false | Aktiv |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard next_date · möglich: id, next_date, title (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von Recurring + meta
curl "https://crm.serv24-it.ch/api/v2/recurring" \
-H "Authorization: Bearer $CRM_KEY"/recurringschreibenAbo-Rechnung anlegen
| Feld | Typ | Beschreibung |
|---|---|---|
customer_id Pflicht | Ganzzahl | Kunde |
title | Text | Titel |
intv | Text: month | quarter | halfyear | year | Intervall (Standard month) |
next_date | Datum | Nächste Rechnung am (Standard heute) |
end_date | Datum · null | Endet am |
auto_send | true/false | Automatisch versenden (Standard true) |
auto_charge | Ganzzahl | Automatische Abbuchung vom hinterlegten Zahlungsmittel: 0 = nein, 1 = am Rechnungsdatum, 2 = am Fälligkeitsdatum |
active | true/false | Aktiv |
intro | Text (lang) | Einleitungstext (Platzhalter {periode}) |
items Pflicht | Liste von Item | Positionen (Item) |
Antwort: Status 201 · data: Recurring
curl -X POST "https://crm.serv24-it.ch/api/v2/recurring" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"customer_id":123,"title":"Wartungsvertrag","intv":"month","next_date":"2026-11-14","items":[{"description":"Wartung Webseite","qty":1,"unit":"Monat","price":49}]}'/recurring/{id}lesenAbo-Rechnung abrufen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Recurring
curl "https://crm.serv24-it.ch/api/v2/recurring/123" \
-H "Authorization: Bearer $CRM_KEY"/recurring/{id}schreibenAbo-Rechnung ändern
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
customer_id | Ganzzahl | Kunde |
title | Text | Titel |
intv | Text: month | quarter | halfyear | year | Intervall (Standard month) |
next_date | Datum | Nächste Rechnung am (Standard heute) |
end_date | Datum · null | Endet am |
auto_send | true/false | Automatisch versenden (Standard true) |
auto_charge | Ganzzahl | Automatische Abbuchung vom hinterlegten Zahlungsmittel: 0 = nein, 1 = am Rechnungsdatum, 2 = am Fälligkeitsdatum |
active | true/false | Aktiv |
intro | Text (lang) | Einleitungstext (Platzhalter {periode}) |
items | Liste von Item | Positionen (Item) |
Antwort: Status 200 · data: Recurring
curl -X PATCH "https://crm.serv24-it.ch/api/v2/recurring/123" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-d '{"customer_id":123,"title":"Webseite Relaunch"}'/recurring/{id}schreibenAbo-Rechnung löschen (bereits erstellte Rechnungen bleiben)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 204 ohne Inhalt
curl -X DELETE "https://crm.serv24-it.ch/api/v2/recurring/123" \
-H "Authorization: Bearer $CRM_KEY"/recurring/{id}/runschreibenFällige Rechnungen dieser Abo-Rechnung jetzt erstellen
Erstellt alle Rechnungen bis heute (wie der tägliche Lauf). Antwort: die neu erstellten Rechnungen.
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Liste von Document
curl -X POST "https://crm.serv24-it.ch/api/v2/recurring/123/run" \
-H "Authorization: Bearer $CRM_KEY"Projekte und Zeiteinträge · nur verfügbar, wenn das entsprechende Modul im Abo aktiv ist · Bereich projects
/projectslesenProjekte auflisten
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
customer_id | Query | Ganzzahl | Kunde |
status | Query | Text | Status, kommagetrennt |
search | Query | Text | Projektname |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard name · möglich: id, name, created_at (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von Project + meta
curl "https://crm.serv24-it.ch/api/v2/projects" \
-H "Authorization: Bearer $CRM_KEY"/projectsschreibenProjekt anlegen
| Feld | Typ | Beschreibung |
|---|---|---|
customer_id | Ganzzahl · null | Kunde |
name Pflicht | Text | Projektname |
rate | Zahl | Stundensatz |
budget_hours | Zahl | Budget in Stunden |
status | Text: active | done | archived | Status |
Antwort: Status 201 · data: Project
curl -X POST "https://crm.serv24-it.ch/api/v2/projects" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"customer_id":123,"name":"Webdesign Paket"}'/projects/{id}lesenProjekt abrufen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Project
curl "https://crm.serv24-it.ch/api/v2/projects/123" \
-H "Authorization: Bearer $CRM_KEY"/projects/{id}schreibenProjekt ändern
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
customer_id | Ganzzahl · null | Kunde |
name | Text | Projektname |
rate | Zahl | Stundensatz |
budget_hours | Zahl | Budget in Stunden |
status | Text: active | done | archived | Status |
Antwort: Status 200 · data: Project
curl -X PATCH "https://crm.serv24-it.ch/api/v2/projects/123" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-d '{"customer_id":123,"name":"Webdesign Paket"}'/projects/{id}schreibenProjekt löschen (nur ohne verrechnete Zeiten)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 204 ohne Inhalt
curl -X DELETE "https://crm.serv24-it.ch/api/v2/projects/123" \
-H "Authorization: Bearer $CRM_KEY"/time-entrieslesenZeiteinträge auflisten
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
project_id | Query | Ganzzahl | Projekt |
user_id | Query | Ganzzahl | Benutzer |
billable | Query | true/false | Verrechenbar |
invoiced | Query | true/false | true = verrechnet, false = noch nicht verrechnet |
from | Query | Datum | Datum ab (JJJJ-MM-TT) |
to | Query | Datum | Datum bis (JJJJ-MM-TT) |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard -date · möglich: id, date, hours (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von TimeEntry + meta
curl "https://crm.serv24-it.ch/api/v2/time-entries" \
-H "Authorization: Bearer $CRM_KEY"/time-entriesschreibenZeit erfassen
| Feld | Typ | Beschreibung |
|---|---|---|
project_id Pflicht | Ganzzahl | Projekt |
user_id | Ganzzahl · null | Benutzer (Standard: Ersteller des API-Schlüssels) |
date | Datum | Datum (Standard heute) |
hours Pflicht | Zahl | Stunden |
description | Text (lang) | Tätigkeit |
billable | true/false | Verrechenbar (Standard true) |
Antwort: Status 201 · data: TimeEntry
curl -X POST "https://crm.serv24-it.ch/api/v2/time-entries" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"project_id":7,"date":"2026-11-14","hours":1.5,"description":"Besprechung mit Kunde"}'/time-entries/{id}lesenZeiteintrag abrufen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: TimeEntry
curl "https://crm.serv24-it.ch/api/v2/time-entries/123" \
-H "Authorization: Bearer $CRM_KEY"/time-entries/{id}schreibenZeiteintrag ändern (nicht verrechnete)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
project_id | Ganzzahl | Projekt |
user_id | Ganzzahl · null | Benutzer (Standard: Ersteller des API-Schlüssels) |
date | Datum | Datum (Standard heute) |
hours | Zahl | Stunden |
description | Text (lang) | Tätigkeit |
billable | true/false | Verrechenbar (Standard true) |
Antwort: Status 200 · data: TimeEntry
curl -X PATCH "https://crm.serv24-it.ch/api/v2/time-entries/123" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-d '{"project_id":7,"user_id":1,"hours":1.5}'/time-entries/{id}schreibenZeiteintrag löschen (nicht verrechnete)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 204 ohne Inhalt
curl -X DELETE "https://crm.serv24-it.ch/api/v2/time-entries/123" \
-H "Authorization: Bearer $CRM_KEY"Buchungen, Kategorien und Belege · nur verfügbar, wenn das entsprechende Modul im Abo aktiv ist · Bereich books
/transactionslesenBuchungen auflisten
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
type | Query | Text: income | expense | Einnahmen oder Ausgaben |
category | Query | Text | Kategorie |
status | Query | Text | booked (Standard), open, all |
document_id | Query | Ganzzahl | Beleg |
search | Query | Text | Freitext |
from | Query | Datum | Datum ab (JJJJ-MM-TT) |
to | Query | Datum | Datum bis (JJJJ-MM-TT) |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard -date · möglich: id, date, amount (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von Transaction + meta
curl "https://crm.serv24-it.ch/api/v2/transactions" \
-H "Authorization: Bearer $CRM_KEY"/transactionsschreibenBuchung erfassen
| Feld | Typ | Beschreibung |
|---|---|---|
type Pflicht | Text: income | expense | Einnahme oder Ausgabe |
date | Datum | Datum (Standard heute) |
description | Text | Text |
category | Text | Kategorie (siehe /categories) |
amount Pflicht | Zahl | Betrag inkl. MWST |
vat_rate | Zahl | MWST-Satz in Prozent |
tags | Text · null | Schlagwörter |
account_no | Text · null | Konto |
receipt | Objekt | Beleg: {"name": "quittung.pdf", "content_base64": "…"} (pdf, jpg, png; max. 20 MB) |
Antwort: Status 201 · data: Transaction
curl -X POST "https://crm.serv24-it.ch/api/v2/transactions" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"type":"expense","date":"2026-11-14","description":"Druckerpapier","category":"Büromaterial","amount":54.9,"vat_rate":8.1}'/transactions/{id}lesenBuchung abrufen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Transaction
curl "https://crm.serv24-it.ch/api/v2/transactions/123" \
-H "Authorization: Bearer $CRM_KEY"/transactions/{id}schreibenBuchung ändern (nur manuelle)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
type | Text: income | expense | Einnahme oder Ausgabe |
date | Datum | Datum (Standard heute) |
description | Text | Text |
category | Text | Kategorie (siehe /categories) |
amount | Zahl | Betrag inkl. MWST |
vat_rate | Zahl | MWST-Satz in Prozent |
tags | Text · null | Schlagwörter |
account_no | Text · null | Konto |
receipt | Objekt | Beleg ersetzen |
Antwort: Status 200 · data: Transaction
curl -X PATCH "https://crm.serv24-it.ch/api/v2/transactions/123" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"invoice","date":"2026-11-14","amount":324.3}'/transactions/{id}schreibenBuchung löschen (nur manuelle)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 204 ohne Inhalt
curl -X DELETE "https://crm.serv24-it.ch/api/v2/transactions/123" \
-H "Authorization: Bearer $CRM_KEY"/transactions/{id}/receiptlesenBeleg (PDF/Bild) herunterladen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Datei (application/octet-stream)
curl "https://crm.serv24-it.ch/api/v2/transactions/123/receipt" \
-H "Authorization: Bearer $CRM_KEY" -o datei/categorieslesenKategorien
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
type | Query | Text: income | expense | Art |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard name · möglich: name, id (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von Category + meta
curl "https://crm.serv24-it.ch/api/v2/categories" \
-H "Authorization: Bearer $CRM_KEY"/categoriesschreibenKategorie anlegen
| Feld | Typ | Beschreibung |
|---|---|---|
type Pflicht | Text: income | expense | Einnahmen oder Ausgaben |
name Pflicht | Text | Bezeichnung |
account_no | Text · null | Konto |
vat_rate | Zahl · null | Standard-MWST-Satz |
Antwort: Status 201 · data: Category
curl -X POST "https://crm.serv24-it.ch/api/v2/categories" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"type":"invoice","name":"Webdesign Paket"}'Kreditoren erfassen und als bezahlt verbuchen · nur verfügbar, wenn das entsprechende Modul im Abo aktiv ist · Bereich bills
/billslesenLieferantenrechnungen auflisten
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
status | Query | Text | open, booked |
search | Query | Text | Freitext (Lieferant, Nummer, Text) |
due_to | Query | Datum | Fällig bis |
from | Query | Datum | Rechnungsdatum ab (JJJJ-MM-TT) |
to | Query | Datum | Rechnungsdatum bis (JJJJ-MM-TT) |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard due_date · möglich: id, bill_date, due_date, amount (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von Bill + meta
curl "https://crm.serv24-it.ch/api/v2/bills" \
-H "Authorization: Bearer $CRM_KEY"/billsschreibenLieferantenrechnung erfassen
| Feld | Typ | Beschreibung |
|---|---|---|
supplier Pflicht | Text | Lieferant |
supplier_address | Text (lang) | Adresse des Lieferanten |
supplier_iban | Text | IBAN des Lieferanten (für den Zahlungsauftrag) |
pay_reference | Text | QR-/SCOR-Referenz |
pay_message | Text | Mitteilung |
bill_no | Text | Rechnungsnummer des Lieferanten |
bill_date | Datum | Rechnungsdatum (Standard heute) |
due_date | Datum | Fällig am (Standard +30 Tage) |
currency | Text: CHF | EUR | Währung |
amount Pflicht | Zahl | Betrag inkl. MWST |
vat_rate | Zahl | MWST-Satz (Vorsteuer) |
category | Text | Kategorie (Standard Fremdleistungen) |
description | Text | Text |
receipt | Objekt | Rechnung als Datei: {"name": "rechnung.pdf", "content_base64": "…"} |
Antwort: Status 201 · data: Bill
curl -X POST "https://crm.serv24-it.ch/api/v2/bills" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"supplier":"Lieferant GmbH","supplier_iban":"CH9300762011623852957","bill_no":"R-2026-104","bill_date":"2026-11-14","due_date":"2026-12-14","amount":540,"vat_rate":8.1,"receipt":{"name":"rechnung.pdf","content_base64":"JVBERi0xLjQK…"}}'/bills/{id}lesenLieferantenrechnung abrufen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Bill
curl "https://crm.serv24-it.ch/api/v2/bills/123" \
-H "Authorization: Bearer $CRM_KEY"/bills/{id}schreibenOffene Lieferantenrechnung ändern
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
supplier | Text | Lieferant |
supplier_address | Text (lang) | Adresse des Lieferanten |
supplier_iban | Text | IBAN des Lieferanten (für den Zahlungsauftrag) |
pay_reference | Text | QR-/SCOR-Referenz |
pay_message | Text | Mitteilung |
bill_no | Text | Rechnungsnummer des Lieferanten |
bill_date | Datum | Rechnungsdatum (Standard heute) |
due_date | Datum | Fällig am (Standard +30 Tage) |
currency | Text: CHF | EUR | Währung |
amount | Zahl | Betrag inkl. MWST |
vat_rate | Zahl | MWST-Satz (Vorsteuer) |
category | Text | Kategorie (Standard Fremdleistungen) |
description | Text | Text |
receipt | Objekt | Datei ersetzen |
Antwort: Status 200 · data: Bill
curl -X PATCH "https://crm.serv24-it.ch/api/v2/bills/123" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-d '{"supplier":"Lieferant GmbH","supplier_address":"Text","amount":324.3}'/bills/{id}schreibenLieferantenrechnung löschen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 204 ohne Inhalt
curl -X DELETE "https://crm.serv24-it.ch/api/v2/bills/123" \
-H "Authorization: Bearer $CRM_KEY"/bills/{id}/payschreibenAls bezahlt verbuchen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
date | Datum | Zahlungsdatum (Standard heute) |
Antwort: Status 200 · data: Bill
curl -X POST "https://crm.serv24-it.ch/api/v2/bills/123/pay" \
-H "Authorization: Bearer $CRM_KEY"/bills/{id}/receiptlesenRechnungsdatei herunterladen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Datei (application/octet-stream)
curl "https://crm.serv24-it.ch/api/v2/bills/123/receipt" \
-H "Authorization: Bearer $CRM_KEY" -o dateiAnfragen aus dem Kundenportal beantworten · nur verfügbar, wenn das entsprechende Modul im Abo aktiv ist · Bereich requests
/requestslesenKundenanfragen auflisten
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
status | Query | Text | Status, kommagetrennt |
customer_id | Query | Ganzzahl | Kunde |
kind | Query | Text | Art |
created_since | Query | Zeitpunkt | Nur Einträge, die ab diesem Zeitpunkt erfasst wurden (ISO 8601) |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard -updated_at · möglich: id, updated_at, created_at (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von Request + meta
curl "https://crm.serv24-it.ch/api/v2/requests" \
-H "Authorization: Bearer $CRM_KEY"/requestsschreibenAnfrage im Namen eines Kunden eröffnen
| Feld | Typ | Beschreibung |
|---|---|---|
customer_id Pflicht | Ganzzahl | Kunde |
kind | Text: question | invoice | change | service | installment | cancel | sim_lost | hosting_change | Art der Anfrage (Standard question) |
subject | Text | Betreff |
status | Text: open | progress | answered | done | rejected | Status |
text Pflicht | Text (lang) | Erste Nachricht des Kunden |
Antwort: Status 201 · data: Request
curl -X POST "https://crm.serv24-it.ch/api/v2/requests" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"customer_id":123,"kind":"question","text":"Guten Tag, …"}'/requests/{id}lesenAnfrage abrufen (inkl. Nachrichten)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Request
curl "https://crm.serv24-it.ch/api/v2/requests/123" \
-H "Authorization: Bearer $CRM_KEY"/requests/{id}schreibenStatus ändern (Kunde wird informiert)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
status Pflicht | Text: open | progress | answered | done | rejected | Neuer Status |
Antwort: Status 200 · data: Request
curl -X PATCH "https://crm.serv24-it.ch/api/v2/requests/123" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"done"}'/requests/{id}/messagesschreibenAntworten (Kunde wird per E-Mail/WhatsApp informiert)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
text Pflicht | Text (lang) | Antwort |
status | Text | Neuer Status (Standard answered) |
author | Text | Absendername (Standard: Name des API-Schlüssels) |
Antwort: Status 201 · data: Request
curl -X POST "https://crm.serv24-it.ch/api/v2/requests/123/messages" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"text":"Guten Tag, die Rechnung wurde korrigiert.","status":"answered"}'Versendete Mahnungen · nur verfügbar, wenn das entsprechende Modul im Abo aktiv ist · Bereich dunning
/dunninglesenVersendete Mahnungen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
document_id | Query | Ganzzahl | Rechnung |
level | Query | Ganzzahl | Mahnstufe |
from | Query | Datum | Versanddatum ab (JJJJ-MM-TT) |
to | Query | Datum | Versanddatum bis (JJJJ-MM-TT) |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard -sent_at · möglich: id, sent_at (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von Dunning + meta
curl "https://crm.serv24-it.ch/api/v2/dunning" \
-H "Authorization: Bearer $CRM_KEY"SIM-Karten, Mobile-Abos und Produkte (nur lesen) · nur verfügbar, wenn das entsprechende Modul im Abo aktiv ist · Bereich mobile
/mobile/simslesenSIM-Karten
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
customer_id | Query | Ganzzahl | Kunde |
msisdn | Query | Text | Rufnummer |
iccid | Query | Text | ICCID |
gone | Query | true/false | Auch nicht mehr vorhandene (Standard false) |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard id · möglich: id, msisdn, created_at (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von Sim + meta
curl "https://crm.serv24-it.ch/api/v2/mobile/sims" \
-H "Authorization: Bearer $CRM_KEY"/mobile/sims/{id}lesenSIM-Karte abrufen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Sim
curl "https://crm.serv24-it.ch/api/v2/mobile/sims/123" \
-H "Authorization: Bearer $CRM_KEY"/mobile/subscriptionslesenMobile-Abos
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
customer_id | Query | Ganzzahl | Kunde |
status | Query | Text | Status, kommagetrennt |
sim_id | Query | Ganzzahl | SIM-Karte |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard id · möglich: id, paid_until, created_at (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von MobileSub + meta
curl "https://crm.serv24-it.ch/api/v2/mobile/subscriptions" \
-H "Authorization: Bearer $CRM_KEY"/mobile/subscriptions/{id}lesenMobile-Abo abrufen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: MobileSub
curl "https://crm.serv24-it.ch/api/v2/mobile/subscriptions/123" \
-H "Authorization: Bearer $CRM_KEY"/mobile/productslesenMobile-Produkte
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
active | Query | true/false | Aktiv |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard sort · möglich: sort, name, id (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von MobileProduct + meta
curl "https://crm.serv24-it.ch/api/v2/mobile/products" \
-H "Authorization: Bearer $CRM_KEY"Hosting-Konten und Pakete (nur lesen) · nur verfügbar, wenn das entsprechende Modul im Abo aktiv ist · Bereich hosting
/hosting/accountslesenHosting-Konten
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
customer_id | Query | Ganzzahl | Kunde |
status | Query | Text | Status |
domain | Query | Text | Domain |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard id · möglich: id, domain, created_at (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von HostingAccount + meta
curl "https://crm.serv24-it.ch/api/v2/hosting/accounts" \
-H "Authorization: Bearer $CRM_KEY"/hosting/accounts/{id}lesenHosting-Konto abrufen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: HostingAccount
curl "https://crm.serv24-it.ch/api/v2/hosting/accounts/123" \
-H "Authorization: Bearer $CRM_KEY"/hosting/productslesenHosting-Pakete
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
active | Query | true/false | Aktiv |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard sort · möglich: sort, name (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von HostingProduct + meta
curl "https://crm.serv24-it.ch/api/v2/hosting/products" \
-H "Authorization: Bearer $CRM_KEY"Domains, E-Mail und weitere Web-Dienste (nur lesen) · nur verfügbar, wenn das entsprechende Modul im Abo aktiv ist · Bereich webservices
/web-serviceslesenWeb-Dienste (Domains, E-Mail …)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
customer_id | Query | Ganzzahl | Kunde |
service_name | Query | Text | Art |
fqdn | Query | Text | Domain |
gone | Query | true/false | Auch nicht mehr vorhandene (Standard false) |
expires_to | Query | Datum | Läuft ab bis |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard id · möglich: id, fqdn, expired_at (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von WebService + meta
curl "https://crm.serv24-it.ch/api/v2/web-services" \
-H "Authorization: Bearer $CRM_KEY"/web-services/{id}lesenWeb-Dienst abrufen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: WebService
curl "https://crm.serv24-it.ch/api/v2/web-services/123" \
-H "Authorization: Bearer $CRM_KEY"Cloud-Server der Kunden (nur lesen) · nur verfügbar, wenn das entsprechende Modul im Abo aktiv ist · Bereich cloud
/cloud-serverslesenCloud-Server
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
customer_id | Query | Ganzzahl | Kunde |
status | Query | Text | Status |
gone | Query | true/false | Auch gelöschte (Standard false) |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard id · möglich: id, name, paid_until (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von CloudServer + meta
curl "https://crm.serv24-it.ch/api/v2/cloud-servers" \
-H "Authorization: Bearer $CRM_KEY"/cloud-servers/{id}lesenCloud-Server abrufen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: CloudServer
curl "https://crm.serv24-it.ch/api/v2/cloud-servers/123" \
-H "Authorization: Bearer $CRM_KEY"Bestellungen aus dem Online-Shop (nur lesen) · nur verfügbar, wenn das entsprechende Modul im Abo aktiv ist · Bereich shop
/shop/orderslesenShop-Bestellungen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
status | Query | Text | Status, kommagetrennt |
customer_id | Query | Ganzzahl | Kunde |
number | Query | Text | Bestellnummer |
created_since | Query | Zeitpunkt | Nur Einträge, die ab diesem Zeitpunkt erfasst wurden (ISO 8601) |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard -id · möglich: id, created_at (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von ShopOrder + meta
curl "https://crm.serv24-it.ch/api/v2/shop/orders" \
-H "Authorization: Bearer $CRM_KEY"/shop/orders/{id}lesenShop-Bestellung abrufen (inkl. Positionen)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: ShopOrder
curl "https://crm.serv24-it.ch/api/v2/shop/orders/123" \
-H "Authorization: Bearer $CRM_KEY"Webhooks einrichten, testen und Zustellungen einsehen · Bereich webhooks
/webhookslesenWebhooks auflisten
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard id · möglich: id (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von Webhook + meta
curl "https://crm.serv24-it.ch/api/v2/webhooks" \
-H "Authorization: Bearer $CRM_KEY"/webhooksschreibenWebhook anlegen (Antwort enthält einmalig das Signatur-Geheimnis)
| Feld | Typ | Beschreibung |
|---|---|---|
url Pflicht | Text | Empfänger-Adresse (https://…) |
events | Liste | Ereignisse, z.B. ["document.paid"] – leer oder ["*"] = alle |
description | Text · null | Bezeichnung |
active | true/false | Aktiv |
Antwort: Status 201 · data: Webhook
curl -X POST "https://crm.serv24-it.ch/api/v2/webhooks" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"url":"https://example.ch/webhooks/crm","events":["customer.created","document.paid","payment.created"],"description":"ERP-Abgleich"}'/webhooks/{id}lesenWebhook abrufen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Webhook
curl "https://crm.serv24-it.ch/api/v2/webhooks/123" \
-H "Authorization: Bearer $CRM_KEY"/webhooks/{id}schreibenWebhook ändern (active=true setzt Fehlerzähler zurück)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
| Feld | Typ | Beschreibung |
|---|---|---|
url | Text | Empfänger-Adresse (https://…) |
events | Liste | Ereignisse, z.B. ["document.paid"] – leer oder ["*"] = alle |
description | Text · null | Bezeichnung |
active | true/false | Aktiv |
Antwort: Status 200 · data: Webhook
curl -X PATCH "https://crm.serv24-it.ch/api/v2/webhooks/123" \
-H "Authorization: Bearer $CRM_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.ch/webhooks/crm","description":"Beratung"}'/webhooks/{id}schreibenWebhook löschen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 204 ohne Inhalt
curl -X DELETE "https://crm.serv24-it.ch/api/v2/webhooks/123" \
-H "Authorization: Bearer $CRM_KEY"/webhooks/{id}/testschreibenTestereignis sofort zustellen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Delivery
curl -X POST "https://crm.serv24-it.ch/api/v2/webhooks/123/test" \
-H "Authorization: Bearer $CRM_KEY"/webhooks/{id}/deliverieslesenLetzte Zustellungen (30 Tage)
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
status | Query | Text | pending, done, failed |
event | Query | Text | Ereignis |
limit / offset | Query | Ganzzahl | Seitenweise abrufen (Standard 50, max. 200) |
sort | Query | Text | Standard -id · möglich: id (mit «-» absteigend) |
Antwort: Status 200 · data: Liste von Delivery + meta
curl "https://crm.serv24-it.ch/api/v2/webhooks/123/deliveries" \
-H "Authorization: Bearer $CRM_KEY"/webhooks/{id}/deliveries/{delivery_id}/retryschreibenZustellung erneut versuchen
| Parameter | Ort | Typ | Beschreibung |
|---|---|---|---|
id | Pfad | Ganzzahl | ID |
delivery_id | Pfad | Ganzzahl | ID |
Antwort: Status 200 · data: Delivery
curl -X POST "https://crm.serv24-it.ch/api/v2/webhooks/123/deliveries/55/retry" \
-H "Authorization: Bearer $CRM_KEY"«nur lesen» = wird ausgegeben, beim Schreiben ignoriert. Felder, die hier fehlen, werden nie ausgegeben.
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
customer_no | Text | Kundennummer – leer lassen für die nächste freie Nummer |
type | Text: person | company | Privatperson oder Firma (Standard: company, wenn «company» gesetzt ist, sonst person) |
name | Text | nur lesen Anzeigename (Firma bzw. Vor- und Nachname) |
company | Text | Firmenname (Firma: Pflicht, sonst last_name) |
salutation | Text | Anrede, z.B. Herr, Frau |
first_name | Text | Vorname |
last_name | Text | Nachname (Privatperson: Pflicht) |
email | E-Mail-Adresse (Rechnungsversand) | |
phone | Text | Telefon |
mobile | Text | Mobile |
website | Text | Webseite |
street | Text | Strasse und Hausnummer |
address2 | Text | Adresszusatz, Postfach |
zip | Text | PLZ |
city | Text | Ort – Schreibweise wird anhand der PLZ korrigiert |
region | Text · null | Kanton / Bundesland / Region – leer = automatisch aus PLZ und Ort |
country | Text | Land, ISO-3166-Code (CH, LI und EU-Staaten), Standard CH |
birth_date | Datum · null | Geburtsdatum (JJJJ-MM-TT) |
language | Text: de | fr | it | en | Sprache der Belege |
uid_no | Text | UID (CHE-…) |
vat_no | Text | MWST-Nummer |
payment_days | Ganzzahl · null | Zahlungsfrist in Tagen (leer = Standard des Betriebs) |
delivery_channel | Text: email | post | Rechnungsversand per E-Mail oder Post |
tags | Text | Schlagwörter, durch Komma getrennt |
notes | Text (lang) | Interne Bemerkungen |
ext_ref | Text · null | Ihre Referenz im Fremdsystem (frei verwendbar, filterbar) |
archived | true/false | Archiviert |
dunning_stop | true/false | Mahnstopp für alle Rechnungen des Kunden |
dunning_stop_until | Datum · null | Mahnstopp bis (leer = unbefristet) |
dunning_stop_reason | Text · null | Grund des Mahnstopps (intern) |
addr_status | Text | nur lesen Ergebnis der Adressprüfung (ok, suggest, invalid …) – leer = nicht geprüft |
created_at | Zeitpunkt | nur lesen Erfasst am |
open_total | Zahl · null | nur lesen Offener Betrag aller Rechnungen (nur in der Einzelabfrage) |
contacts | Liste von Contact | nur lesen Kontaktpersonen (Contact) – nur in der Einzelabfrage; beim Anlegen direkt mitgeben möglich |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
customer_id | Ganzzahl | nur lesen Kunde |
salutation | Text | Anrede |
name | Text | Pflicht Name |
position | Text | Funktion |
email | ||
phone | Text | Telefon |
mobile | Text | Mobile |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
customer_id | Ganzzahl | nur lesen Kunde |
note | Text (lang) | Pflicht Text |
user_id | Ganzzahl · null | nur lesen Erfasst von (Benutzer) |
created_at | Zeitpunkt | nur lesen Erfasst am |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
customer_id | Ganzzahl | nur lesen Kunde |
name | Text | Pflicht Dateiname |
size | Ganzzahl | nur lesen Grösse in Bytes |
mime | Text | nur lesen Dateityp |
category | Text | Kategorie |
note | Text · null | Bemerkung |
shared | true/false | Im Kundenportal sichtbar |
created_at | Zeitpunkt | nur lesen Abgelegt am |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
type | Text: quote | order | delivery | invoice | credit | Belegart: Offerte, Auftragsbestätigung, Lieferschein, Rechnung, Gutschrift (Standard invoice) |
number | Text · null | nur lesen Belegnummer – wird beim Abschliessen vergeben |
status | Text | nur lesen draft, open, partial, paid, sent, accepted, declined, expired, installment, cancelled |
customer_id | Ganzzahl | Pflicht Kunde |
title | Text | Titel / Betreff |
date | Datum | Belegdatum (Standard heute) |
due_date | Datum | Fällig am bzw. gültig bis (Standard: Datum + Zahlungsfrist) |
delivery_date | Datum · null | Liefer-/Leistungsdatum |
language | Text: de | fr | it | en | Sprache (Standard: Sprache des Kunden) |
intro | Text (lang) | Einleitungstext |
footer | Text (lang) | Schlusstext (Standard: Fusstext des Betriebs) |
terms | Text (lang) · null | Konditionen |
reference | Text · null | nur lesen QR-/SCOR-Referenz (Rechnungen) |
currency | Text | nur lesen Währung (CHF) |
subtotal | Zahl | nur lesen Zwischensumme |
vat_total | Zahl | nur lesen MWST |
total | Zahl | nur lesen Total |
fees_total | Zahl | nur lesen Mahngebühren |
paid_total | Zahl | nur lesen Bezahlt |
balance | Zahl | nur lesen Offener Betrag |
dunning_level | Ganzzahl | nur lesen Mahnstufe |
last_dunning | Datum · null | nur lesen Letzte Mahnung |
dunning_stop | true/false | Mahnstopp (nur Rechnungen): keine Mahnungen, keine Gebühren, keine Inkasso-Übergabe – auch bei abgeschlossenen Rechnungen änderbar |
dunning_stop_until | Datum · null | Mahnstopp bis (leer = bis zur Aufhebung) |
dunning_stop_reason | Text · null | Grund des Mahnstopps (intern) |
dunning_stop_at | Zeitpunkt · null | nur lesen Mahnstopp gesetzt am |
parent_id | Ganzzahl · null | nur lesen Ratenplan: Hauptrechnung |
origin_id | Ganzzahl · null | nur lesen Erstellt aus Beleg |
quote_id | Ganzzahl · null | nur lesen Ursprüngliche Offerte |
recurring_id | Ganzzahl · null | nur lesen Aus Abo-Rechnung |
sent_at | Zeitpunkt · null | nur lesen Versendet am |
cancelled_at | Zeitpunkt · null | nur lesen Storniert am |
signed_at | Zeitpunkt · null | nur lesen Offerte online unterschrieben am |
views | Ganzzahl | nur lesen Wie oft der Kunde den Beleg abgerufen hat (Online-Link, PDF, Kundenportal) |
first_view_at | Zeitpunkt · null | nur lesen Erster Abruf durch den Kunden |
last_view_at | Zeitpunkt · null | nur lesen Letzter Abruf durch den Kunden |
ext_ref | Text · null | Ihre Referenz im Fremdsystem |
created_at | Zeitpunkt | nur lesen Erfasst am |
url | Text · null | nur lesen Online-Ansicht für den Kunden (nach dem Abschliessen) |
items | Liste von Item | Pflicht Positionen (Item) – beim Ändern werden alle Positionen ersetzt (in Listen nicht enthalten) |
payments | Liste von Payment | nur lesen Zahlungen (Payment) – nur in der Einzelabfrage |
| Feld | Typ | Beschreibung |
|---|---|---|
pos | Ganzzahl | nur lesen Reihenfolge |
product_id | Ganzzahl · null | Artikel – fehlende Angaben (Text, Preis, Einheit, MWST) werden vom Artikel übernommen |
description | Text (lang) | Text (Pflicht, ausser bei product_id) |
qty | Zahl | Menge (Standard 1) |
unit | Text | Einheit, z.B. Std., Min., Stk., Pauschal – bei «Min.» ist qty in Minuten und price der Stundensatz |
price | Zahl | Einzelpreis |
discount | Zahl | Rabatt in Prozent |
vat_rate | Zahl | MWST-Satz in Prozent (Standard: Satz des Betriebs; 0 bei nicht MWST-pflichtigen Betrieben) |
total | Zahl | nur lesen Positionstotal |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
document_id | Ganzzahl | Pflicht Rechnung oder Gutschrift |
date | Datum | Zahlungsdatum (Standard heute) |
amount | Zahl | Betrag (Standard: offener Betrag) |
method | Text | Zahlungsart, z.B. Bank, Bar, TWINT (Standard API) |
note | Text | Bemerkung |
book | true/false | Als Einnahme verbuchen (Standard true) |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
number | Text | Artikelnummer |
name | Text | Pflicht Bezeichnung |
description | Text (lang) | Beschreibung |
unit | Text | Einheit |
price | Zahl | Preis |
vat_rate | Zahl | MWST-Satz in Prozent |
type | Text | product (Ware) oder service (Dienstleistung) |
account_no | Text · null | Erlöskonto |
active | true/false | In Belegen auswählbar |
shop | true/false | Im Online-Shop angeboten |
shop_text | Text (lang) · null | Text im Online-Shop |
ext_ref | Text · null | Ihre Referenz im Fremdsystem |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
customer_id | Ganzzahl | Pflicht Kunde |
title | Text | Titel |
intv | Text: month | quarter | halfyear | year | Intervall (Standard month) |
next_date | Datum | Nächste Rechnung am (Standard heute) |
end_date | Datum · null | Endet am |
auto_send | true/false | Automatisch versenden (Standard true) |
auto_charge | Ganzzahl | Automatische Abbuchung vom hinterlegten Zahlungsmittel: 0 = nein, 1 = am Rechnungsdatum, 2 = am Fälligkeitsdatum |
active | true/false | Aktiv |
intro | Text (lang) | Einleitungstext (Platzhalter {periode}) |
items | Liste von Item | Pflicht Positionen (Item) |
last_run_at | Zeitpunkt · null | nur lesen Letzte Rechnung erstellt am |
created_at | Zeitpunkt | nur lesen Erfasst am |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
customer_id | Ganzzahl · null | Kunde |
name | Text | Pflicht Projektname |
rate | Zahl | Stundensatz |
budget_hours | Zahl | Budget in Stunden |
status | Text: active | done | archived | Status |
hours_total | Zahl | nur lesen Erfasste Stunden |
hours_open | Zahl | nur lesen Verrechenbare, noch nicht verrechnete Stunden |
created_at | Zeitpunkt | nur lesen Erfasst am |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
project_id | Ganzzahl | Pflicht Projekt |
user_id | Ganzzahl · null | Benutzer (Standard: Ersteller des API-Schlüssels) |
date | Datum | Datum (Standard heute) |
hours | Zahl | Pflicht Stunden |
description | Text (lang) | Tätigkeit |
billable | true/false | Verrechenbar (Standard true) |
invoice_id | Ganzzahl · null | nur lesen Verrechnet mit Rechnung |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
type | Text: income | expense | Pflicht Einnahme oder Ausgabe |
date | Datum | Datum (Standard heute) |
description | Text | Text |
category | Text | Kategorie (siehe /categories) |
amount | Zahl | Pflicht Betrag inkl. MWST |
vat_rate | Zahl | MWST-Satz in Prozent |
vat_amount | Zahl | nur lesen Darin enthaltene MWST |
document_id | Ganzzahl · null | nur lesen Zu Beleg (automatische Buchung einer Zahlung) |
payment_id | Ganzzahl · null | nur lesen Zu Zahlung |
status | Text | nur lesen booked = verbucht, open = offene Lieferantenrechnung |
tags | Text · null | Schlagwörter |
account_no | Text · null | Konto |
currency | Text | nur lesen Währung |
has_receipt | true/false | nur lesen Beleg (PDF/Bild) vorhanden |
created_at | Zeitpunkt | nur lesen Erfasst am |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
supplier | Text | Pflicht Lieferant |
supplier_address | Text (lang) | Adresse des Lieferanten |
supplier_iban | Text | IBAN des Lieferanten (für den Zahlungsauftrag) |
pay_reference | Text | QR-/SCOR-Referenz |
pay_message | Text | Mitteilung |
bill_no | Text | Rechnungsnummer des Lieferanten |
bill_date | Datum | Rechnungsdatum (Standard heute) |
due_date | Datum | Fällig am (Standard +30 Tage) |
currency | Text: CHF | EUR | Währung |
amount | Zahl | Pflicht Betrag inkl. MWST |
vat_rate | Zahl | MWST-Satz (Vorsteuer) |
vat_amount | Zahl | nur lesen Darin enthaltene MWST |
category | Text | Kategorie (Standard Fremdleistungen) |
description | Text | Text |
status | Text: open | booked | nur lesen open = offen, booked = bezahlt/verbucht |
paid_at | Datum · null | nur lesen Bezahlt am |
has_receipt | true/false | nur lesen Beleg (PDF/Bild) vorhanden |
created_at | Zeitpunkt | nur lesen Erfasst am |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
type | Text: income | expense | Pflicht Einnahmen oder Ausgaben |
name | Text | Pflicht Bezeichnung |
account_no | Text · null | Konto |
vat_rate | Zahl · null | Standard-MWST-Satz |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
number | Text | nur lesen Anfrage-Nummer (A-00001) |
customer_id | Ganzzahl | Pflicht Kunde |
kind | Text: question | invoice | change | service | installment | cancel | sim_lost | hosting_change | Art der Anfrage (Standard question) |
subject | Text | Betreff |
status | Text: open | progress | answered | done | rejected | Status |
ref | Text · null | nur lesen Bezug (z.B. Beleg) |
last_from | Text · null | nur lesen Letzte Nachricht von customer oder staff |
created_at | Zeitpunkt | nur lesen Eröffnet am |
updated_at | Zeitpunkt · null | nur lesen Zuletzt geändert |
closed_at | Zeitpunkt · null | nur lesen Abgeschlossen am |
messages | Liste von Message | nur lesen Nachrichten (Message) – nur in der Einzelabfrage |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
sender | Text | nur lesen customer oder staff |
author | Text | nur lesen Name |
text | Text (lang) | Pflicht Nachricht |
created_at | Zeitpunkt | nur lesen Zeitpunkt |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
document_id | Ganzzahl | nur lesen Rechnung |
level | Ganzzahl | nur lesen Mahnstufe |
fee | Zahl | nur lesen Gebühr |
sent_to | Text · null | nur lesen Versendet an |
sent_at | Zeitpunkt | nur lesen Versendet am |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
iccid | Text | nur lesen ICCID |
msisdn | Text · null | nur lesen Rufnummer |
customer_id | Ganzzahl · null | nur lesen Kunde |
sim_type | Text · null | nur lesen SIM oder eSIM |
sim_alias | Text · null | nur lesen Bezeichnung |
state | Text · null | nur lesen Zustand |
subscription_status | Text · null | nur lesen Status beim Anbieter |
assigned_at | Zeitpunkt · null | nur lesen Zugewiesen am |
shipped_at | Zeitpunkt · null | nur lesen Versendet am |
gone | true/false | nur lesen Nicht mehr vorhanden |
created_at | Zeitpunkt | nur lesen Erfasst am |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
customer_id | Ganzzahl | nur lesen Kunde |
sim_id | Ganzzahl · null | nur lesen SIM-Karte |
product_id | Ganzzahl · null | nur lesen Abo-Produkt |
kind | Text | nur lesen Art |
price | Zahl | nur lesen Preis |
cycle | Text | nur lesen Abrechnung |
start_date | Datum · null | nur lesen Beginn |
paid_until | Datum · null | nur lesen Bezahlt bis |
autorenew | true/false | nur lesen Automatische Verlängerung |
status | Text | nur lesen Status |
cancel_effective | Datum · null | nur lesen Gekündigt auf |
created_at | Zeitpunkt | nur lesen Erfasst am |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
name | Text | nur lesen Bezeichnung |
description | Text (lang) · null | nur lesen Beschreibung |
kind | Text | nur lesen Art |
price | Zahl | nur lesen Preis |
cycle | Text | nur lesen Abrechnung |
setup_fee | Zahl | nur lesen Einrichtung |
vat_rate | Zahl | nur lesen MWST-Satz |
portal | true/false | nur lesen Im Kundenportal bestellbar |
esim | true/false | nur lesen eSIM möglich |
active | true/false | nur lesen Aktiv |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
customer_id | Ganzzahl | nur lesen Kunde |
product_id | Ganzzahl · null | nur lesen Hosting-Paket |
username | Text · null | nur lesen Benutzername |
domain | Text · null | nur lesen Hauptdomain |
status | Text | nur lesen Status |
cycle | Text | nur lesen Abrechnung |
price | Zahl | nur lesen Preis |
start_date | Datum · null | nur lesen Beginn |
cancel_effective | Datum · null | nur lesen Gekündigt auf |
created_at | Zeitpunkt | nur lesen Erfasst am |
activated_at | Zeitpunkt · null | nur lesen Aktiviert am |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
name | Text | nur lesen Bezeichnung |
description | Text (lang) · null | nur lesen Beschreibung |
price_month | Zahl | nur lesen Preis pro Monat |
price_year | Zahl | nur lesen Preis pro Jahr |
setup_fee | Zahl | nur lesen Einrichtung |
vat_rate | Zahl | nur lesen MWST-Satz |
orderable | true/false | nur lesen Bestellbar |
active | true/false | nur lesen Aktiv |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
customer_id | Ganzzahl · null | nur lesen Kunde |
name | Text · null | nur lesen Bezeichnung |
fqdn | Text · null | nur lesen Domain |
service_name | Text · null | nur lesen Art (domain, email, hosting …) |
status | Text · null | nur lesen Status |
expired_at | Datum · null | nur lesen Läuft ab am |
price | Zahl · null | nur lesen Verkaufspreis |
cycle | Text · null | nur lesen Abrechnung |
vat_rate | Zahl · null | nur lesen MWST-Satz |
recurring_id | Ganzzahl · null | nur lesen Abo-Rechnung |
gone | true/false | nur lesen Nicht mehr vorhanden |
created_at | Zeitpunkt | nur lesen Erfasst am |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
customer_id | Ganzzahl · null | nur lesen Kunde |
name | Text | nur lesen Name |
server_type | Text · null | nur lesen Servertyp |
location | Text · null | nur lesen Standort |
image | Text · null | nur lesen Betriebssystem |
ipv4 | Text · null | nur lesen IPv4 |
ipv6 | Text · null | nur lesen IPv6 |
status | Text · null | nur lesen Status |
backup | true/false | nur lesen Backups aktiv |
price | Zahl · null | nur lesen Verkaufspreis |
billing | Text · null | nur lesen Abrechnung |
paid_until | Datum · null | nur lesen Bezahlt bis |
autorenew | true/false | nur lesen Automatische Verlängerung |
suspended | true/false | nur lesen Gesperrt |
cancel_at | Datum · null | nur lesen Kündigung auf |
created_at | Zeitpunkt | nur lesen Erfasst am |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
number | Text · null | nur lesen Bestellnummer |
customer_id | Ganzzahl | nur lesen Kunde |
status | Text | nur lesen new, awaiting_payment, payment_failed, review, processing, done, error, rejected, cancelled |
net | Zahl | nur lesen Netto |
total | Zahl | nur lesen Total |
document_id | Ganzzahl · null | nur lesen Rechnung |
paid_at | Zeitpunkt · null | nur lesen Bezahlt am |
approved_at | Zeitpunkt · null | nur lesen Freigegeben am |
rejected_at | Zeitpunkt · null | nur lesen Abgelehnt am |
done_at | Zeitpunkt · null | nur lesen Ausgeführt am |
created_at | Zeitpunkt | nur lesen Bestellt am |
items | Liste von ShopItem | nur lesen Positionen (ShopItem) |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
source | Text | nur lesen Herkunft (products, hosting, dienste, cloud, telecom …) |
ref | Text · null | nur lesen Referenz |
title | Text | nur lesen Bezeichnung |
qty | Zahl | nur lesen Menge |
net | Zahl | nur lesen Netto |
cycle | Text · null | nur lesen Abrechnung |
status | Text | nur lesen pending, done, manual, waiting, error, cancelled |
done_at | Zeitpunkt · null | nur lesen Erledigt am |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
url | Text | Pflicht Empfänger-Adresse (https://…) |
events | Liste | Ereignisse, z.B. ["document.paid"] – leer oder ["*"] = alle |
description | Text · null | Bezeichnung |
active | true/false | Aktiv |
fails | Ganzzahl | nur lesen Fehlversuche in Folge |
last_at | Zeitpunkt · null | nur lesen Letzte Zustellung |
last_status | Ganzzahl · null | nur lesen Letzter HTTP-Status |
created_at | Zeitpunkt | nur lesen Erfasst am |
secret | Text | nur lesen Signatur-Geheimnis – nur in der Antwort beim Anlegen sichtbar |
| Feld | Typ | Beschreibung |
|---|---|---|
id | Ganzzahl | nur lesen Interne ID |
event | Text | nur lesen Ereignis |
status | Text | nur lesen pending, done, failed |
attempts | Ganzzahl | nur lesen Versuche |
next_at | Zeitpunkt · null | nur lesen Nächster Versuch |
last_code | Ganzzahl · null | nur lesen Letzter HTTP-Status |
last_error | Text · null | nur lesen Letzter Fehler |
created_at | Zeitpunkt | nur lesen Ausgelöst am |
done_at | Zeitpunkt · null | nur lesen Zugestellt am |
Die bisherige API unter api.php?r=… (v1) bleibt unverändert erhalten. Für neue Anbindungen bitte v2 verwenden.