Zum Hauptinhalt springen

Public API – Termine & Dokumente

Termine und Dokumente listen, anlegen, ändern, hochladen, herunterladen und löschen.

Verfasst von Support Team

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:

  1. Freier Termin – ohne step_idlabel ist Pflicht

  2. Schritt-Termin – mit step_id (Upsert pro Schritt am Fall)

Feld

Pflicht

Beschreibung

scheduled_at

ja

YYYY-MM-DD, YYYY-MM-DD HH:MM oder YYYY-MM-DD HH:MM:SS

label

ja, wenn kein step_id

Bezeichnung (max. 255)

step_id

nein

ID eines Schritts der Bestattungsart

has_time

nein

0 / 1 (Default 0)

is_public

nein

für Angehörige sichtbar (Default 1)

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

scheduled_at

neues Datum / Uhrzeit

label

neue Bezeichnung

has_time

0 / 1

is_public

0 / 1

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

file

ja

Datei (max. 25 MB)

tag_ids

nein

Array oder kommaseparierte IDs aus GET /document-tags

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,
});
Hat dies deine Frage beantwortet?