Termine und Dokumente hängst du an einen bestehenden Trauerfall (CASE-UUID).
Basis-URL:https://de.rip-app.business/api/public/v1 – Details: Public API – Einstieg & Authentifizierung.
Zeitangaben haben das Format YYYY-MM-DD HH:MM:SS ohne Zeitzonen-Suffix und beziehen sich auf die Zeitzone der Instanz (Europe/Berlin).
Termine listen – GET /cases/{uuid}/dates
curl -X GET "https://de.rip-app.business/api/public/v1/cases/CASE-UUID/dates" \ -H "Authorization: Bearer rip_pub_DEIN_TOKEN" \ -H "Accept: application/json"
const base = "https://de.rip-app.business/api/public/v1";
const dates = await fetch(`${base}/cases/${caseUuid}/dates`, {
headers: { Authorization: `Bearer ${token}`, Accept: "application/json" },
}).then((r) => r.json());
console.log(dates.data);
Antwort:
{
"success": true,
"count": 1,
"data": [
{
"uuid": "DATE-UUID",
"case_id": 12,
"step_id": null,
"label": "Trauergespräch",
"scheduled_at": "2026-08-05 10:00:00",
"has_time": 1,
"is_public": 1,
"step_name": null,
"step_position": null
}
]
}
Termin anlegen – POST /cases/{uuid}/dates
Zwei Varianten:
Freier Termin – ohne
step_id→labelist PflichtSchritt-Termin – mit
step_id(Upsert pro Schritt am Fall)
Feld | Pflicht | Beschreibung |
| ja |
|
| ja, wenn kein | Bezeichnung (max. 255) |
| nein | ID eines Schritts der Bestattungsart |
| nein |
|
| nein | für Angehörige sichtbar (Default |
curl -X POST "https://de.rip-app.business/api/public/v1/cases/CASE-UUID/dates" \
-H "Authorization: Bearer rip_pub_DEIN_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"label": "Trauergespräch",
"scheduled_at": "2026-08-05 10:00:00",
"has_time": 1,
"is_public": 1
}'
await fetch(`${base}/cases/${caseUuid}/dates`, {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify({
label: "Trauergespräch",
scheduled_at: "2026-08-05 10:00:00",
has_time: 1,
is_public: 1,
}),
});
Antwort 201 mit dem angelegten Termin in data (inkl. uuid für spätere Updates).
Termin ändern – PATCH /dates/{date_uuid}
Mindestens ein Feld:
Feld | Beschreibung |
| neues Datum / Uhrzeit |
| neue Bezeichnung |
|
|
|
|
curl -X PATCH "https://de.rip-app.business/api/public/v1/dates/DATE-UUID" \
-H "Authorization: Bearer rip_pub_DEIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"scheduled_at": "2026-08-06 14:00:00",
"has_time": 1
}'
await fetch(`${base}/dates/${dateUuid}`, {
method: "PATCH",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
scheduled_at: "2026-08-06 14:00:00",
has_time: 1,
}),
});
Termin löschen – DELETE /dates/{date_uuid}
curl -X DELETE "https://de.rip-app.business/api/public/v1/dates/DATE-UUID" \ -H "Authorization: Bearer rip_pub_DEIN_TOKEN"
await fetch(`${base}/dates/${dateUuid}`, {
method: "DELETE",
headers: { Authorization: `Bearer ${token}` },
});
Antwort: { "success": true, "message": "Termin geloescht" }
Dokumente listen – GET /cases/{uuid}/documents
curl -X GET "https://de.rip-app.business/api/public/v1/cases/CASE-UUID/documents" \ -H "Authorization: Bearer rip_pub_DEIN_TOKEN" \ -H "Accept: application/json"
const docs = await fetch(`${base}/cases/${caseUuid}/documents`, {
headers: { Authorization: `Bearer ${token}`, Accept: "application/json" },
}).then((r) => r.json());
Antwort:
{
"success": true,
"count": 1,
"data": [
{
"uuid": "DOC-UUID",
"original_filename": "sterbeurkunde.pdf",
"mime_type": "application/pdf",
"file_size": 245760,
"created_at": "2026-07-31 12:00:00",
"uploader_first_name": "Max",
"uploader_last_name": "Mustermann",
"tags": [{ "id": 1, "name": "Sterbeurkunde" }]
}
]
}
Dokument hochladen – POST /cases/{uuid}/documents
Content-Type:multipart/form-data (kein JSON).
Feld | Pflicht | Beschreibung |
| ja | Datei (max. 25 MB) |
| nein | Array oder kommaseparierte IDs aus |
Erlaubte Typen u. a.: PDF, JPEG/PNG/GIF/WebP/HEIC, Office (doc/docx, xls/xlsx, ppt/pptx), Text/CSV/RTF, ZIP/7z/RAR.
curl -X POST "https://de.rip-app.business/api/public/v1/cases/CASE-UUID/documents" \ -H "Authorization: Bearer rip_pub_DEIN_TOKEN" \ -F "file=@./sterbeurkunde.pdf" \ -F "tag_ids=1,3"
const form = new FormData();
form.append("file", fileInput.files[0]); // oder Blob/File
form.append("tag_ids", "1,3");
const res = await fetch(`${base}/cases/${caseUuid}/documents`, {
method: "POST",
headers: { Authorization: `Bearer ${token}` },
// Content-Type nicht manuell setzen – Boundary kommt von FormData
body: form,
});
console.log(await res.json());
Antwort enthält data mit Dokument-UUID und Tags.
Dokument herunterladen – GET /documents/{doc_uuid}/download
Liefert die Datei selbst (Binary), kein JSON.
curl -L -o sterbeurkunde.pdf \ -H "Authorization: Bearer rip_pub_DEIN_TOKEN" \ "https://de.rip-app.business/api/public/v1/documents/DOC-UUID/download"
const res = await fetch(`${base}/documents/${docUuid}/download`, {
headers: { Authorization: `Bearer ${token}` },
});
if (!res.ok) throw new Error(`Download fehlgeschlagen: ${res.status}`);
const blob = await res.blob();
// z. B. speichern oder als Download anbieten
PDF und Bilder werden oft inline ausgeliefert, andere Typen als Download (attachment). Im Fehlerfall antwortet dieser Endpoint mit Klartext statt JSON – prüfe deshalb zuerst den Statuscode.
Dokument löschen – DELETE /documents/{doc_uuid}
curl -X DELETE "https://de.rip-app.business/api/public/v1/documents/DOC-UUID" \ -H "Authorization: Bearer rip_pub_DEIN_TOKEN"
await fetch(`${base}/documents/${docUuid}`, {
method: "DELETE",
headers: { Authorization: `Bearer ${token}` },
});
Antwort: { "success": true, "message": "Dokument geloescht" }
Komplett-Beispiel: Termin + Dokument
const base = "https://de.rip-app.business/api/public/v1";
const auth = { Authorization: `Bearer ${token}` };
// Termin
await fetch(`${base}/cases/${caseUuid}/dates`, {
method: "POST",
headers: { ...auth, "Content-Type": "application/json" },
body: JSON.stringify({
label: "Abholung",
scheduled_at: "2026-08-05 09:00:00",
has_time: 1,
}),
});
// Dokument
const form = new FormData();
form.append("file", pdfFile);
await fetch(`${base}/cases/${caseUuid}/documents`, {
method: "POST",
headers: auth,
body: form,
});