{"info":{"_postman_id":"3b6f9a52-6d1e-4c1f-9d47-0f4d8c1a7e25","name":"Manage²Hero API: Webhooks und Abgleich","description":"Anfragen für die Webhooks und den Abgleich der Manage²Hero API. Alle Werte stehen in Variablen: Tragen Sie unter **Variables** den Wert `token` ein (API-Token mit Scope `webhooks:manage` und den Lese-Scopes der Objekte) und passen Sie `base_url` und `receiver_url` an. Ihr Token gehört nie in eine Anfrage oder Exportdatei: Lassen Sie `token` in der exportierten Sammlung leer.\n\nAblauf: 1. Webhook anlegen (Variable `webhook_id` wird gesetzt), 2. Testereignis senden, 3. Zustellverlauf ansehen, 4. Abgleich je Ressource, 5. Fehlerfälle ausprobieren.\n\n**Idempotency-Key:** Jede schreibende Anfrage erhält automatisch einen Schlüssel. Er bleibt je Anfrage gespeichert: Senden Sie dieselbe Anfrage erneut, wiederholt sie den Vorgang ohne zweite Wirkung. Für einen neuen Vorgang setzen Sie die Variable `idempotency_renew` auf `true` (gilt für die nächste Anfrage).\n\nDie Beschreibung aller Aufrufe: https://api.manage2hero.com/docs","schema":"https://schema.getpostman.com/json/collection/v2.1.0/collection.json"},"auth":{"type":"bearer","bearer":[{"key":"token","value":"{{token}}","type":"string"}]},"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["// Idempotency-Key: one key per request, kept until idempotency_renew is \"true\" (then a new one for ONE request)","if (pm.request.headers.has(\"Idempotency-Key\")) {","  const holder = \"idempotency_key_\" + pm.info.requestId;","  let key = pm.collectionVariables.get(holder);","  if (!key || pm.collectionVariables.get(\"idempotency_renew\") === \"true\") {","    key = pm.variables.replaceIn(\"{{$guid}}\");","    pm.collectionVariables.set(holder, key);","    pm.collectionVariables.set(\"idempotency_renew\", \"false\");","  }","  pm.variables.set(\"idempotency_key\", key);","}"]}},{"listen":"test","script":{"type":"text/javascript","exec":["// Name the request id of every error, support asks for it","if (pm.response.code >= 400) {","  let antwort = {};","  try { antwort = pm.response.json(); } catch (e) { /* not JSON */ }","  console.info(\"HTTP \" + pm.response.code, antwort.error && antwort.error.code, antwort.request_id);","}"]}}],"variable":[{"key":"base_url","value":"https://api-stg.manage2hero.com/v1","type":"string","description":"Basisadresse samt /v1"},{"key":"token","value":"","type":"secret","description":"Ihr API-Token (nicht exportieren)"},{"key":"receiver_url","value":"https://webhooks.example.com/hooks/manage2hero","type":"string","description":"Öffentliche https-Adresse Ihres Empfängers (Port 443)"},{"key":"webhook_id","value":"00000000-0000-4000-8000-000000000000","type":"string"},{"key":"delivery_id","value":"00000000-0000-4000-8000-000000000000","type":"string"},{"key":"object_id","value":"00000000-0000-4000-8000-000000000000","type":"string","description":"Kennung aus data einer Nachricht"},{"key":"from_day","value":"2026-01-01","type":"string"},{"key":"to_day","value":"2026-10-12","type":"string"},{"key":"page_cursor","value":"","type":"string"},{"key":"changes_cursor_bookings","value":"","type":"string"},{"key":"pending_cursor_bookings","value":"","type":"string"},{"key":"ids_bookings","value":"00000000-0000-4000-8000-000000000000","type":"string"},{"key":"changes_cursor_payments","value":"","type":"string"},{"key":"pending_cursor_payments","value":"","type":"string"},{"key":"ids_payments","value":"00000000-0000-4000-8000-000000000000","type":"string"},{"key":"changes_cursor_invoices","value":"","type":"string"},{"key":"pending_cursor_invoices","value":"","type":"string"},{"key":"ids_invoices","value":"00000000-0000-4000-8000-000000000000","type":"string"},{"key":"changes_cursor_dunning_notices","value":"","type":"string"},{"key":"pending_cursor_dunning_notices","value":"","type":"string"},{"key":"ids_dunning_notices","value":"00000000-0000-4000-8000-000000000000","type":"string"},{"key":"changes_cursor_documents","value":"","type":"string"},{"key":"pending_cursor_documents","value":"","type":"string"},{"key":"ids_documents","value":"00000000-0000-4000-8000-000000000000","type":"string"},{"key":"changes_cursor_emails","value":"","type":"string"},{"key":"pending_cursor_emails","value":"","type":"string"},{"key":"ids_emails","value":"00000000-0000-4000-8000-000000000000","type":"string"},{"key":"changes_cursor_contracts","value":"","type":"string"},{"key":"pending_cursor_contracts","value":"","type":"string"},{"key":"ids_contracts","value":"00000000-0000-4000-8000-000000000000","type":"string"},{"key":"changes_cursor_damages","value":"","type":"string"},{"key":"pending_cursor_damages","value":"","type":"string"},{"key":"ids_damages","value":"00000000-0000-4000-8000-000000000000","type":"string"},{"key":"demo_key","value":"postman-demo-key-1","type":"string"},{"key":"demo_webhook_id","value":"00000000-0000-4000-8000-000000000000","type":"string"},{"key":"sandbox_token","value":"","type":"secret","description":"Test-Token der Sandbox (m2h_test_…, nicht exportieren)"},{"key":"sandbox_webhook_id","value":"00000000-0000-4000-8000-000000000000","type":"string"},{"key":"sandbox_webhook_key","value":"postman-sandbox-webhook-1","type":"string"},{"key":"idempotency_renew","value":"false","type":"string"}],"item":[{"name":"1. Webhooks verwalten","description":"Scope `webhooks:manage`; der Token-Ersteller braucht in der Verwaltung das Recht „API-Zugang“ mit Vollzugriff.","item":[{"name":"Webhook anlegen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 201', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 201]);","});","if (pm.response.code === 201 || pm.response.code === 200) {","  pm.collectionVariables.set(\"webhook_id\", pm.response.json().data.id);","}"]}}],"request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"{{idempotency_key}}"},{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/webhooks","host":["{{base_url}}"],"path":["webhooks"]},"description":"Die Antwort enthält das Geheimnis `secret` (`whsec_…`) **einmalig**: kopieren Sie es sofort in die Konfiguration Ihres Empfängers. Dieselbe Anfrage erneut senden gibt 200 ohne Geheimnis zurück (gleicher Idempotency-Key).","body":{"mode":"raw","raw":"{\n  \"url\": \"{{receiver_url}}\",\n  \"events\": [\n    \"payment.received\",\n    \"invoice.created\"\n  ],\n  \"description\": \"Postman\"\n}","options":{"raw":{"language":"json"}}}},"response":[]},{"name":"Alle Webhooks","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks","host":["{{base_url}}"],"path":["webhooks"]},"description":"Enthält nie ein Geheimnis."},"response":[]},{"name":"Ein Webhook","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks/{{webhook_id}}","host":["{{base_url}}"],"path":["webhooks","{{webhook_id}}"]}},"response":[]},{"name":"Webhook wieder einschalten","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/webhooks/{{webhook_id}}","host":["{{base_url}}"],"path":["webhooks","{{webhook_id}}"]},"description":"Nach einer Abschaltung (`delivery_failed`). Das aufrufende Token wird Erzeuger-Token.","body":{"mode":"raw","raw":"{\n  \"active\": true\n}","options":{"raw":{"language":"json"}}}},"response":[]},{"name":"Webhook ausschalten","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/webhooks/{{webhook_id}}","host":["{{base_url}}"],"path":["webhooks","{{webhook_id}}"]},"body":{"mode":"raw","raw":"{\n  \"active\": false\n}","options":{"raw":{"language":"json"}}}},"response":[]},{"name":"Webhook löschen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"DELETE","header":[],"url":{"raw":"{{base_url}}/webhooks/{{webhook_id}}","host":["{{base_url}}"],"path":["webhooks","{{webhook_id}}"]},"description":"Löscht den Webhook samt Zustellverlauf."},"response":[]},{"name":"Testereignis senden","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 201 oder 202', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]);","});"]}}],"request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"{{idempotency_key}}"}],"url":{"raw":"{{base_url}}/webhooks/{{webhook_id}}/test","host":["{{base_url}}"],"path":["webhooks","{{webhook_id}}","test"]},"description":"Stellt `webhook.test` ein: ein Versuch, ein Fehlschlag schaltet den Webhook nicht ab. Der Server sendet innerhalb von etwa einer Minute; das Ergebnis steht im Zustellverlauf."},"response":[]},{"name":"Sandbox: Ereignis simulieren","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"{{idempotency_key}}"},{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/sandbox/events","host":["{{base_url}}"],"path":["sandbox","events"]},"description":"Nur mit einem Sandbox-Token (m2h_test_…): stellt ein Ereignis für ein Musterobjekt der Sandbox ein und sendet es an Ihre aktiven Webhooks (livemode false). Mit einem echten Token: 404.","body":{"mode":"raw","raw":"{\n  \"type\": \"payment.received\"\n}","options":{"raw":{"language":"json"}}}},"response":[]},{"name":"Geheimnis rotieren","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 201', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 201]);","});"]}}],"request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"{{idempotency_key}}"}],"url":{"raw":"{{base_url}}/webhooks/{{webhook_id}}/rotate-secret","host":["{{base_url}}"],"path":["webhooks","{{webhook_id}}","rotate-secret"]},"description":"Liefert ein neues `secret` einmalig. Das bisherige bleibt 24 Stunden als zweites `v1` im Signaturkopf gültig."},"response":[]},{"name":"Zustellverlauf","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","const items = pm.response.json().data.items || [];","if (items.length > 0) { pm.collectionVariables.set(\"delivery_id\", items[0].id); }"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks/{{webhook_id}}/deliveries?limit=50","host":["{{base_url}}"],"path":["webhooks","{{webhook_id}}","deliveries"],"query":[{"key":"limit","value":"50"}]},"description":"Neueste zuerst, 30 Tage aufbewahrt. Setzt `delivery_id` auf die erste Zustellung."},"response":[]},{"name":"Nur fehlgeschlagene Zustellungen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks/{{webhook_id}}/deliveries?status=failed","host":["{{base_url}}"],"path":["webhooks","{{webhook_id}}","deliveries"],"query":[{"key":"status","value":"failed"}]}},"response":[]},{"name":"Eine Zustellung erneut senden (Replay)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 409', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 409]);","});"]}}],"request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"{{idempotency_key}}"}],"url":{"raw":"{{base_url}}/webhooks/{{webhook_id}}/deliveries/{{delivery_id}}/retry","host":["{{base_url}}"],"path":["webhooks","{{webhook_id}}","deliveries","{{delivery_id}}","retry"]},"description":"Nur für `failed` und `abandoned` (409 `delivery_not_replayable` sonst). Gleiche Ereignis-Id, neuer Zeitstempel und neue Signatur."},"response":[]},{"name":"Fehlgeschlagene erneut senden (Sammel-Replay)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"{{idempotency_key}}"},{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/webhooks/{{webhook_id}}/deliveries/retry-failed","host":["{{base_url}}"],"path":["webhooks","{{webhook_id}}","deliveries","retry-failed"]},"description":"Älteste zuerst, höchstens 100 je Aufruf. `remaining` > 0: weiterer Aufruf mit **neuem** Schlüssel (`idempotency_renew` = `true`).","body":{"mode":"raw","raw":"{\n  \"status\": \"abandoned\",\n  \"period\": \"last_7_days\"\n}","options":{"raw":{"language":"json"}}}},"response":[]}]},{"name":"2. Objekt eines Ereignisses laden","description":"`object_id` ist die Kennung aus `data` der Nachricht (z. B. `payment_id`). Das Ereignis ist nur ein Hinweis: laden Sie den **aktuellen** Stand. 404 heißt: das Objekt ist für dieses Token nicht mehr sichtbar.","item":[{"name":"payment.received (data.payment_id)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/payments/by-ids?ids={{object_id}}","host":["{{base_url}}"],"path":["payments","by-ids"],"query":[{"key":"ids","value":"{{object_id}}"}]}},"response":[]},{"name":"dunning.sent (data.dunning_notice_id)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/dunning/notices/by-ids?ids={{object_id}}","host":["{{base_url}}"],"path":["dunning","notices","by-ids"],"query":[{"key":"ids","value":"{{object_id}}"}]}},"response":[]},{"name":"contract.signed (data.lease_id)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/contracts/by-ids?ids={{object_id}}","host":["{{base_url}}"],"path":["contracts","by-ids"],"query":[{"key":"ids","value":"{{object_id}}"}]}},"response":[]},{"name":"invoice.created (data.invoice_id)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/invoices/by-ids?ids={{object_id}}","host":["{{base_url}}"],"path":["invoices","by-ids"],"query":[{"key":"ids","value":"{{object_id}}"}]}},"response":[]},{"name":"document.created (data.document_id)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/{{object_id}}","host":["{{base_url}}"],"path":["documents","{{object_id}}"]}},"response":[]},{"name":"email.sent (data.email_id)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/emails/{{object_id}}","host":["{{base_url}}"],"path":["emails","{{object_id}}"]}},"response":[]},{"name":"damage.created (data.damage_id)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/damages/by-ids?ids={{object_id}}","host":["{{base_url}}"],"path":["damages","by-ids"],"query":[{"key":"ids","value":"{{object_id}}"}]}},"response":[]},{"name":"contract.terminated (data.lease_id)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/contracts/by-ids?ids={{object_id}}","host":["{{base_url}}"],"path":["contracts","by-ids"],"query":[{"key":"ids","value":"{{object_id}}"}]}},"response":[]},{"name":"invoice.cancelled (data.invoice_id)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/invoices/by-ids?ids={{object_id}}","host":["{{base_url}}"],"path":["invoices","by-ids"],"query":[{"key":"ids","value":"{{object_id}}"}]}},"response":[]},{"name":"damage.updated (data.damage_id)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/damages/by-ids?ids={{object_id}}","host":["{{base_url}}"],"path":["damages","by-ids"],"query":[{"key":"ids","value":"{{object_id}}"}]}},"response":[]},{"name":"Rechnung mit Positionen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/invoices/{{object_id}}","host":["{{base_url}}"],"path":["invoices","{{object_id}}"]}},"response":[]},{"name":"Mahnung mit Posten","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/dunning/notices/{{object_id}}","host":["{{base_url}}"],"path":["dunning","notices","{{object_id}}"]}},"response":[]}]},{"name":"3. Abgleich","description":"Webhooks sind ein Hinweis, keine lückenlose Zustellung: gleichen Sie regelmäßig ab. Der Cursor gilt nur für seine Ressource (sonst 400 `invalid_cursor`), darum hat jede Ressource ihre eigene Variable.","item":[{"name":"Buchungen","description":"Reihenfolge: (1) Einstiegs-Cursor **zuerst**, (2) Vollabruf, (3) Änderungen seit dem Cursor, (4) Kennungen nachladen; den neuen Cursor erst nach erfolgreicher Verarbeitung behalten.","item":[{"name":"(1) Einstiegs-Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","pm.collectionVariables.set(\"changes_cursor_bookings\", pm.response.json().data.cursor);"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/bookings/changes/cursor","host":["{{base_url}}"],"path":["bookings","changes","cursor"]}},"response":[]},{"name":"(2) Vollabruf im Zeitraum","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/bookings?from={{from_day}}&to={{to_day}}&limit=200","host":["{{base_url}}"],"path":["bookings"],"query":[{"key":"from","value":"{{from_day}}"},{"key":"to","value":"{{to_day}}"},{"key":"limit","value":"200"}]},"description":"`from` bis einschließlich `to`; je Aufruf gilt die Höchstspanne des Endpunkts (`range_too_large`). Weiter mit `next_cursor` (siehe Ordner Seitenweise abrufen)."},"response":[]},{"name":"(3) Änderungen seit dem Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","const daten = pm.response.json().data;","pm.collectionVariables.set(\"pending_cursor_bookings\", daten.next_cursor || daten.resume_cursor || \"\");","const ids = daten.items.map(function (e) { return e.id; }).filter(function (id, i, alle) { return alle.indexOf(id) === i; });","pm.collectionVariables.set(\"ids_bookings\", ids.join(\",\"));","// nothing changed: there is nothing to reload, so the cursor can move on right away","if (ids.length === 0) {","  pm.collectionVariables.set(\"changes_cursor_bookings\", pm.collectionVariables.get(\"pending_cursor_bookings\"));","  pm.collectionVariables.set(\"pending_cursor_bookings\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/bookings/changes?cursor={{changes_cursor_bookings}}&limit=100","host":["{{base_url}}"],"path":["bookings","changes"],"query":[{"key":"cursor","value":"{{changes_cursor_bookings}}"},{"key":"limit","value":"100"}]},"description":"Nur Kennungen, höchstens 100 je Seite (genau so viele lädt der nächste Aufruf nach). Der Folge-Cursor (`next_cursor`, am Ende `resume_cursor`) wird erst von „(4) Kennungen nachladen“ übernommen, wenn das Nachladen gelungen ist; bei einem Fehler senden Sie (3) und (4) einfach erneut."},"response":[]},{"name":"(4) Kennungen nachladen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","// the page is processed: now (and only now) move the cursor forward","if (pm.response.code === 200 && pm.collectionVariables.get(\"pending_cursor_bookings\")) {","  pm.collectionVariables.set(\"changes_cursor_bookings\", pm.collectionVariables.get(\"pending_cursor_bookings\"));","  pm.collectionVariables.set(\"pending_cursor_bookings\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/bookings/by-ids?ids={{ids_bookings}}","host":["{{base_url}}"],"path":["bookings","by-ids"],"query":[{"key":"ids","value":"{{ids_bookings}}"}]},"description":"Aktueller Stand der Kennungen aus (3) dieser Ressource (höchstens 100). Eine Kennung, die fehlt, ist nicht mehr sichtbar: lokal entfernen. Lieferte (3) keine Kennung, entfällt dieser Aufruf (der Cursor ist dann schon weitergerückt)."},"response":[]}]},{"name":"Zahlungseingänge","description":"Reihenfolge: (1) Einstiegs-Cursor **zuerst**, (2) Vollabruf, (3) Änderungen seit dem Cursor, (4) Kennungen nachladen; den neuen Cursor erst nach erfolgreicher Verarbeitung behalten.","item":[{"name":"(1) Einstiegs-Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","pm.collectionVariables.set(\"changes_cursor_payments\", pm.response.json().data.cursor);"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/payments/changes/cursor","host":["{{base_url}}"],"path":["payments","changes","cursor"]}},"response":[]},{"name":"(2) Vollabruf im Zeitraum","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/payments?from={{from_day}}&to={{to_day}}&limit=200","host":["{{base_url}}"],"path":["payments"],"query":[{"key":"from","value":"{{from_day}}"},{"key":"to","value":"{{to_day}}"},{"key":"limit","value":"200"}]},"description":"`from` bis einschließlich `to`; je Aufruf gilt die Höchstspanne des Endpunkts (`range_too_large`). Weiter mit `next_cursor` (siehe Ordner Seitenweise abrufen)."},"response":[]},{"name":"(3) Änderungen seit dem Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","const daten = pm.response.json().data;","pm.collectionVariables.set(\"pending_cursor_payments\", daten.next_cursor || daten.resume_cursor || \"\");","const ids = daten.items.map(function (e) { return e.id; }).filter(function (id, i, alle) { return alle.indexOf(id) === i; });","pm.collectionVariables.set(\"ids_payments\", ids.join(\",\"));","// nothing changed: there is nothing to reload, so the cursor can move on right away","if (ids.length === 0) {","  pm.collectionVariables.set(\"changes_cursor_payments\", pm.collectionVariables.get(\"pending_cursor_payments\"));","  pm.collectionVariables.set(\"pending_cursor_payments\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/payments/changes?cursor={{changes_cursor_payments}}&limit=100","host":["{{base_url}}"],"path":["payments","changes"],"query":[{"key":"cursor","value":"{{changes_cursor_payments}}"},{"key":"limit","value":"100"}]},"description":"Nur Kennungen, höchstens 100 je Seite (genau so viele lädt der nächste Aufruf nach). Der Folge-Cursor (`next_cursor`, am Ende `resume_cursor`) wird erst von „(4) Kennungen nachladen“ übernommen, wenn das Nachladen gelungen ist; bei einem Fehler senden Sie (3) und (4) einfach erneut."},"response":[]},{"name":"(4) Kennungen nachladen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","// the page is processed: now (and only now) move the cursor forward","if (pm.response.code === 200 && pm.collectionVariables.get(\"pending_cursor_payments\")) {","  pm.collectionVariables.set(\"changes_cursor_payments\", pm.collectionVariables.get(\"pending_cursor_payments\"));","  pm.collectionVariables.set(\"pending_cursor_payments\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/payments/by-ids?ids={{ids_payments}}","host":["{{base_url}}"],"path":["payments","by-ids"],"query":[{"key":"ids","value":"{{ids_payments}}"}]},"description":"Aktueller Stand der Kennungen aus (3) dieser Ressource (höchstens 100). Eine Kennung, die fehlt, ist nicht mehr sichtbar: lokal entfernen. Lieferte (3) keine Kennung, entfällt dieser Aufruf (der Cursor ist dann schon weitergerückt)."},"response":[]}]},{"name":"Rechnungen","description":"Reihenfolge: (1) Einstiegs-Cursor **zuerst**, (2) Vollabruf, (3) Änderungen seit dem Cursor, (4) Kennungen nachladen; den neuen Cursor erst nach erfolgreicher Verarbeitung behalten.","item":[{"name":"(1) Einstiegs-Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","pm.collectionVariables.set(\"changes_cursor_invoices\", pm.response.json().data.cursor);"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/invoices/changes/cursor","host":["{{base_url}}"],"path":["invoices","changes","cursor"]}},"response":[]},{"name":"(2) Vollabruf im Zeitraum","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/invoices?from={{from_day}}&to={{to_day}}&limit=200","host":["{{base_url}}"],"path":["invoices"],"query":[{"key":"from","value":"{{from_day}}"},{"key":"to","value":"{{to_day}}"},{"key":"limit","value":"200"}]},"description":"`from` bis einschließlich `to`; je Aufruf gilt die Höchstspanne des Endpunkts (`range_too_large`). Weiter mit `next_cursor` (siehe Ordner Seitenweise abrufen)."},"response":[]},{"name":"(3) Änderungen seit dem Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","const daten = pm.response.json().data;","pm.collectionVariables.set(\"pending_cursor_invoices\", daten.next_cursor || daten.resume_cursor || \"\");","const ids = daten.items.map(function (e) { return e.id; }).filter(function (id, i, alle) { return alle.indexOf(id) === i; });","pm.collectionVariables.set(\"ids_invoices\", ids.join(\",\"));","// nothing changed: there is nothing to reload, so the cursor can move on right away","if (ids.length === 0) {","  pm.collectionVariables.set(\"changes_cursor_invoices\", pm.collectionVariables.get(\"pending_cursor_invoices\"));","  pm.collectionVariables.set(\"pending_cursor_invoices\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/invoices/changes?cursor={{changes_cursor_invoices}}&limit=100","host":["{{base_url}}"],"path":["invoices","changes"],"query":[{"key":"cursor","value":"{{changes_cursor_invoices}}"},{"key":"limit","value":"100"}]},"description":"Nur Kennungen, höchstens 100 je Seite (genau so viele lädt der nächste Aufruf nach). Der Folge-Cursor (`next_cursor`, am Ende `resume_cursor`) wird erst von „(4) Kennungen nachladen“ übernommen, wenn das Nachladen gelungen ist; bei einem Fehler senden Sie (3) und (4) einfach erneut."},"response":[]},{"name":"(4) Kennungen nachladen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","// the page is processed: now (and only now) move the cursor forward","if (pm.response.code === 200 && pm.collectionVariables.get(\"pending_cursor_invoices\")) {","  pm.collectionVariables.set(\"changes_cursor_invoices\", pm.collectionVariables.get(\"pending_cursor_invoices\"));","  pm.collectionVariables.set(\"pending_cursor_invoices\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/invoices/by-ids?ids={{ids_invoices}}","host":["{{base_url}}"],"path":["invoices","by-ids"],"query":[{"key":"ids","value":"{{ids_invoices}}"}]},"description":"Aktueller Stand der Kennungen aus (3) dieser Ressource (höchstens 100). Eine Kennung, die fehlt, ist nicht mehr sichtbar: lokal entfernen. Lieferte (3) keine Kennung, entfällt dieser Aufruf (der Cursor ist dann schon weitergerückt)."},"response":[]}]},{"name":"Mahnungen","description":"Reihenfolge: (1) Einstiegs-Cursor **zuerst**, (2) Vollabruf, (3) Änderungen seit dem Cursor, (4) Kennungen nachladen; den neuen Cursor erst nach erfolgreicher Verarbeitung behalten.","item":[{"name":"(1) Einstiegs-Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","pm.collectionVariables.set(\"changes_cursor_dunning_notices\", pm.response.json().data.cursor);"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/dunning/notices/changes/cursor","host":["{{base_url}}"],"path":["dunning","notices","changes","cursor"]}},"response":[]},{"name":"(2) Vollabruf im Zeitraum","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/dunning/notices?from={{from_day}}&to={{to_day}}&limit=200","host":["{{base_url}}"],"path":["dunning","notices"],"query":[{"key":"from","value":"{{from_day}}"},{"key":"to","value":"{{to_day}}"},{"key":"limit","value":"200"}]},"description":"`from` bis einschließlich `to`; je Aufruf gilt die Höchstspanne des Endpunkts (`range_too_large`). Weiter mit `next_cursor` (siehe Ordner Seitenweise abrufen)."},"response":[]},{"name":"(3) Änderungen seit dem Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","const daten = pm.response.json().data;","pm.collectionVariables.set(\"pending_cursor_dunning_notices\", daten.next_cursor || daten.resume_cursor || \"\");","const ids = daten.items.map(function (e) { return e.id; }).filter(function (id, i, alle) { return alle.indexOf(id) === i; });","pm.collectionVariables.set(\"ids_dunning_notices\", ids.join(\",\"));","// nothing changed: there is nothing to reload, so the cursor can move on right away","if (ids.length === 0) {","  pm.collectionVariables.set(\"changes_cursor_dunning_notices\", pm.collectionVariables.get(\"pending_cursor_dunning_notices\"));","  pm.collectionVariables.set(\"pending_cursor_dunning_notices\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/dunning/notices/changes?cursor={{changes_cursor_dunning_notices}}&limit=100","host":["{{base_url}}"],"path":["dunning","notices","changes"],"query":[{"key":"cursor","value":"{{changes_cursor_dunning_notices}}"},{"key":"limit","value":"100"}]},"description":"Nur Kennungen, höchstens 100 je Seite (genau so viele lädt der nächste Aufruf nach). Der Folge-Cursor (`next_cursor`, am Ende `resume_cursor`) wird erst von „(4) Kennungen nachladen“ übernommen, wenn das Nachladen gelungen ist; bei einem Fehler senden Sie (3) und (4) einfach erneut."},"response":[]},{"name":"(4) Kennungen nachladen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","// the page is processed: now (and only now) move the cursor forward","if (pm.response.code === 200 && pm.collectionVariables.get(\"pending_cursor_dunning_notices\")) {","  pm.collectionVariables.set(\"changes_cursor_dunning_notices\", pm.collectionVariables.get(\"pending_cursor_dunning_notices\"));","  pm.collectionVariables.set(\"pending_cursor_dunning_notices\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/dunning/notices/by-ids?ids={{ids_dunning_notices}}","host":["{{base_url}}"],"path":["dunning","notices","by-ids"],"query":[{"key":"ids","value":"{{ids_dunning_notices}}"}]},"description":"Aktueller Stand der Kennungen aus (3) dieser Ressource (höchstens 100). Eine Kennung, die fehlt, ist nicht mehr sichtbar: lokal entfernen. Lieferte (3) keine Kennung, entfällt dieser Aufruf (der Cursor ist dann schon weitergerückt)."},"response":[]}]},{"name":"Dokumente","description":"Reihenfolge: (1) Einstiegs-Cursor **zuerst**, (2) Vollabruf, (3) Änderungen seit dem Cursor, (4) Kennungen nachladen; den neuen Cursor erst nach erfolgreicher Verarbeitung behalten.","item":[{"name":"(1) Einstiegs-Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","pm.collectionVariables.set(\"changes_cursor_documents\", pm.response.json().data.cursor);"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/changes/cursor","host":["{{base_url}}"],"path":["documents","changes","cursor"]}},"response":[]},{"name":"(2) Vollabruf","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents?period=all&limit=200","host":["{{base_url}}"],"path":["documents"],"query":[{"key":"period","value":"all"},{"key":"limit","value":"200"}]},"description":"`period=all`; mit `next_cursor` weiterblättern."},"response":[]},{"name":"(3) Änderungen seit dem Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","const daten = pm.response.json().data;","pm.collectionVariables.set(\"pending_cursor_documents\", daten.next_cursor || daten.resume_cursor || \"\");","const ids = daten.items.map(function (e) { return e.id; }).filter(function (id, i, alle) { return alle.indexOf(id) === i; });","pm.collectionVariables.set(\"ids_documents\", ids.join(\",\"));","// nothing changed: there is nothing to reload, so the cursor can move on right away","if (ids.length === 0) {","  pm.collectionVariables.set(\"changes_cursor_documents\", pm.collectionVariables.get(\"pending_cursor_documents\"));","  pm.collectionVariables.set(\"pending_cursor_documents\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/changes?cursor={{changes_cursor_documents}}&limit=100","host":["{{base_url}}"],"path":["documents","changes"],"query":[{"key":"cursor","value":"{{changes_cursor_documents}}"},{"key":"limit","value":"100"}]},"description":"Nur Kennungen, höchstens 100 je Seite (genau so viele lädt der nächste Aufruf nach). Der Folge-Cursor (`next_cursor`, am Ende `resume_cursor`) wird erst von „(4) Kennungen nachladen“ übernommen, wenn das Nachladen gelungen ist; bei einem Fehler senden Sie (3) und (4) einfach erneut."},"response":[]},{"name":"(4) Kennungen nachladen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","// the page is processed: now (and only now) move the cursor forward","if (pm.response.code === 200 && pm.collectionVariables.get(\"pending_cursor_documents\")) {","  pm.collectionVariables.set(\"changes_cursor_documents\", pm.collectionVariables.get(\"pending_cursor_documents\"));","  pm.collectionVariables.set(\"pending_cursor_documents\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents/by-ids?ids={{ids_documents}}","host":["{{base_url}}"],"path":["documents","by-ids"],"query":[{"key":"ids","value":"{{ids_documents}}"}]},"description":"Aktueller Stand der Kennungen aus (3) dieser Ressource (höchstens 100). Eine Kennung, die fehlt, ist nicht mehr sichtbar: lokal entfernen. Lieferte (3) keine Kennung, entfällt dieser Aufruf (der Cursor ist dann schon weitergerückt)."},"response":[]}]},{"name":"E-Mails","description":"Reihenfolge: (1) Einstiegs-Cursor **zuerst**, (2) Vollabruf, (3) Änderungen seit dem Cursor, (4) Kennungen nachladen; den neuen Cursor erst nach erfolgreicher Verarbeitung behalten.","item":[{"name":"(1) Einstiegs-Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","pm.collectionVariables.set(\"changes_cursor_emails\", pm.response.json().data.cursor);"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/emails/changes/cursor","host":["{{base_url}}"],"path":["emails","changes","cursor"]}},"response":[]},{"name":"(2) Vollabruf","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/emails?period=all&limit=200","host":["{{base_url}}"],"path":["emails"],"query":[{"key":"period","value":"all"},{"key":"limit","value":"200"}]},"description":"`period=all`; mit `next_cursor` weiterblättern."},"response":[]},{"name":"(3) Änderungen seit dem Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","const daten = pm.response.json().data;","pm.collectionVariables.set(\"pending_cursor_emails\", daten.next_cursor || daten.resume_cursor || \"\");","const ids = daten.items.map(function (e) { return e.id; }).filter(function (id, i, alle) { return alle.indexOf(id) === i; });","pm.collectionVariables.set(\"ids_emails\", ids.join(\",\"));","// nothing changed: there is nothing to reload, so the cursor can move on right away","if (ids.length === 0) {","  pm.collectionVariables.set(\"changes_cursor_emails\", pm.collectionVariables.get(\"pending_cursor_emails\"));","  pm.collectionVariables.set(\"pending_cursor_emails\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/emails/changes?cursor={{changes_cursor_emails}}&limit=100","host":["{{base_url}}"],"path":["emails","changes"],"query":[{"key":"cursor","value":"{{changes_cursor_emails}}"},{"key":"limit","value":"100"}]},"description":"Nur Kennungen, höchstens 100 je Seite (genau so viele lädt der nächste Aufruf nach). Der Folge-Cursor (`next_cursor`, am Ende `resume_cursor`) wird erst von „(4) Kennungen nachladen“ übernommen, wenn das Nachladen gelungen ist; bei einem Fehler senden Sie (3) und (4) einfach erneut."},"response":[]},{"name":"(4) Kennungen nachladen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","// the page is processed: now (and only now) move the cursor forward","if (pm.response.code === 200 && pm.collectionVariables.get(\"pending_cursor_emails\")) {","  pm.collectionVariables.set(\"changes_cursor_emails\", pm.collectionVariables.get(\"pending_cursor_emails\"));","  pm.collectionVariables.set(\"pending_cursor_emails\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/emails/by-ids?ids={{ids_emails}}","host":["{{base_url}}"],"path":["emails","by-ids"],"query":[{"key":"ids","value":"{{ids_emails}}"}]},"description":"Aktueller Stand der Kennungen aus (3) dieser Ressource (höchstens 100). Eine Kennung, die fehlt, ist nicht mehr sichtbar: lokal entfernen. Lieferte (3) keine Kennung, entfällt dieser Aufruf (der Cursor ist dann schon weitergerückt)."},"response":[]}]},{"name":"Verträge","description":"Reihenfolge: (1) Einstiegs-Cursor **zuerst**, (2) Vollabruf, (3) Änderungen seit dem Cursor, (4) Kennungen nachladen; den neuen Cursor erst nach erfolgreicher Verarbeitung behalten.","item":[{"name":"(1) Einstiegs-Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","pm.collectionVariables.set(\"changes_cursor_contracts\", pm.response.json().data.cursor);"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/contracts/changes/cursor","host":["{{base_url}}"],"path":["contracts","changes","cursor"]}},"response":[]},{"name":"(2) Vollabruf","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/contracts?period=all&limit=200","host":["{{base_url}}"],"path":["contracts"],"query":[{"key":"period","value":"all"},{"key":"limit","value":"200"}]},"description":"`period=all`; mit `next_cursor` weiterblättern."},"response":[]},{"name":"(3) Änderungen seit dem Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","const daten = pm.response.json().data;","pm.collectionVariables.set(\"pending_cursor_contracts\", daten.next_cursor || daten.resume_cursor || \"\");","const ids = daten.items.map(function (e) { return e.id; }).filter(function (id, i, alle) { return alle.indexOf(id) === i; });","pm.collectionVariables.set(\"ids_contracts\", ids.join(\",\"));","// nothing changed: there is nothing to reload, so the cursor can move on right away","if (ids.length === 0) {","  pm.collectionVariables.set(\"changes_cursor_contracts\", pm.collectionVariables.get(\"pending_cursor_contracts\"));","  pm.collectionVariables.set(\"pending_cursor_contracts\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/contracts/changes?cursor={{changes_cursor_contracts}}&limit=100","host":["{{base_url}}"],"path":["contracts","changes"],"query":[{"key":"cursor","value":"{{changes_cursor_contracts}}"},{"key":"limit","value":"100"}]},"description":"Nur Kennungen, höchstens 100 je Seite (genau so viele lädt der nächste Aufruf nach). Der Folge-Cursor (`next_cursor`, am Ende `resume_cursor`) wird erst von „(4) Kennungen nachladen“ übernommen, wenn das Nachladen gelungen ist; bei einem Fehler senden Sie (3) und (4) einfach erneut."},"response":[]},{"name":"(4) Kennungen nachladen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","// the page is processed: now (and only now) move the cursor forward","if (pm.response.code === 200 && pm.collectionVariables.get(\"pending_cursor_contracts\")) {","  pm.collectionVariables.set(\"changes_cursor_contracts\", pm.collectionVariables.get(\"pending_cursor_contracts\"));","  pm.collectionVariables.set(\"pending_cursor_contracts\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/contracts/by-ids?ids={{ids_contracts}}","host":["{{base_url}}"],"path":["contracts","by-ids"],"query":[{"key":"ids","value":"{{ids_contracts}}"}]},"description":"Aktueller Stand der Kennungen aus (3) dieser Ressource (höchstens 100). Eine Kennung, die fehlt, ist nicht mehr sichtbar: lokal entfernen. Lieferte (3) keine Kennung, entfällt dieser Aufruf (der Cursor ist dann schon weitergerückt)."},"response":[]}]},{"name":"Schäden","description":"Reihenfolge: (1) Einstiegs-Cursor **zuerst**, (2) Vollabruf, (3) Änderungen seit dem Cursor, (4) Kennungen nachladen; den neuen Cursor erst nach erfolgreicher Verarbeitung behalten.","item":[{"name":"(1) Einstiegs-Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","pm.collectionVariables.set(\"changes_cursor_damages\", pm.response.json().data.cursor);"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/damages/changes/cursor","host":["{{base_url}}"],"path":["damages","changes","cursor"]}},"response":[]},{"name":"(2) Vollabruf","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/damages?period=all&limit=200","host":["{{base_url}}"],"path":["damages"],"query":[{"key":"period","value":"all"},{"key":"limit","value":"200"}]},"description":"`period=all`; mit `next_cursor` weiterblättern."},"response":[]},{"name":"(3) Änderungen seit dem Cursor","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","const daten = pm.response.json().data;","pm.collectionVariables.set(\"pending_cursor_damages\", daten.next_cursor || daten.resume_cursor || \"\");","const ids = daten.items.map(function (e) { return e.id; }).filter(function (id, i, alle) { return alle.indexOf(id) === i; });","pm.collectionVariables.set(\"ids_damages\", ids.join(\",\"));","// nothing changed: there is nothing to reload, so the cursor can move on right away","if (ids.length === 0) {","  pm.collectionVariables.set(\"changes_cursor_damages\", pm.collectionVariables.get(\"pending_cursor_damages\"));","  pm.collectionVariables.set(\"pending_cursor_damages\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/damages/changes?cursor={{changes_cursor_damages}}&limit=100","host":["{{base_url}}"],"path":["damages","changes"],"query":[{"key":"cursor","value":"{{changes_cursor_damages}}"},{"key":"limit","value":"100"}]},"description":"Nur Kennungen, höchstens 100 je Seite (genau so viele lädt der nächste Aufruf nach). Der Folge-Cursor (`next_cursor`, am Ende `resume_cursor`) wird erst von „(4) Kennungen nachladen“ übernommen, wenn das Nachladen gelungen ist; bei einem Fehler senden Sie (3) und (4) einfach erneut."},"response":[]},{"name":"(4) Kennungen nachladen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","// the page is processed: now (and only now) move the cursor forward","if (pm.response.code === 200 && pm.collectionVariables.get(\"pending_cursor_damages\")) {","  pm.collectionVariables.set(\"changes_cursor_damages\", pm.collectionVariables.get(\"pending_cursor_damages\"));","  pm.collectionVariables.set(\"pending_cursor_damages\", \"\");","}"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/damages/by-ids?ids={{ids_damages}}","host":["{{base_url}}"],"path":["damages","by-ids"],"query":[{"key":"ids","value":"{{ids_damages}}"}]},"description":"Aktueller Stand der Kennungen aus (3) dieser Ressource (höchstens 100). Eine Kennung, die fehlt, ist nicht mehr sichtbar: lokal entfernen. Lieferte (3) keine Kennung, entfällt dieser Aufruf (der Cursor ist dann schon weitergerückt)."},"response":[]},{"name":"Ein Schaden mit Dokumenten","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/damages/{{object_id}}","host":["{{base_url}}"],"path":["damages","{{object_id}}"]}},"response":[]}]}]},{"name":"4. Seitenweise abrufen","description":"Jede Liste liefert `items` und `next_cursor`. Senden Sie „Nächste Seite“, bis `next_cursor` `null` ist. Der Cursor gilt nur mit denselben Filtern wie die erste Seite.","item":[{"name":"Erste Seite (2 Einträge)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","pm.collectionVariables.set(\"page_cursor\", pm.response.json().data.next_cursor || \"\");"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents?period=all&limit=2","host":["{{base_url}}"],"path":["documents"],"query":[{"key":"period","value":"all"},{"key":"limit","value":"2"}]}},"response":[]},{"name":"Nächste Seite","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","pm.collectionVariables.set(\"page_cursor\", pm.response.json().data.next_cursor || \"\");","pm.test(\"next_cursor ist vorhanden (null = letzte Seite)\", function () {","  pm.expect(pm.response.json().data).to.have.property(\"next_cursor\");","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/documents?period=all&limit=2&cursor={{page_cursor}}","host":["{{base_url}}"],"path":["documents"],"query":[{"key":"period","value":"all"},{"key":"limit","value":"2"},{"key":"cursor","value":"{{page_cursor}}"}]}},"response":[]}]},{"name":"5. Fehlerfälle","description":"Jede Anfrage löst absichtlich einen Fehler aus; der Test prüft Status und `error.code`. Jede Fehlerantwort trägt eine `request_id`: nennen Sie sie dem Support.","item":[{"name":"Ohne Token (401)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 401', function () {","  pm.expect(pm.response.code).to.be.oneOf([401]);","});","pm.test('error.code ist missing_token', function () {","  pm.expect(pm.response.json().error.code).to.eql('missing_token');","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks","host":["{{base_url}}"],"path":["webhooks"]},"auth":{"type":"noauth"}},"response":[]},{"name":"Ungültiges Token (401)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 401', function () {","  pm.expect(pm.response.code).to.be.oneOf([401]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks","host":["{{base_url}}"],"path":["webhooks"]},"auth":{"type":"bearer","bearer":[{"key":"token","value":"kein-gueltiges-token","type":"string"}]}},"response":[]},{"name":"Unbekannter Parameter (400)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 400', function () {","  pm.expect(pm.response.code).to.be.oneOf([400]);","});","pm.test('error.code ist validation_error', function () {","  pm.expect(pm.response.json().error.code).to.eql('validation_error');","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/payments?from={{from_day}}&to={{to_day}}&gibt_es_nicht=1","host":["{{base_url}}"],"path":["payments"],"query":[{"key":"from","value":"{{from_day}}"},{"key":"to","value":"{{to_day}}"},{"key":"gibt_es_nicht","value":"1"}]}},"response":[]},{"name":"Ungültige Kennung im Pfad (400)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 400', function () {","  pm.expect(pm.response.code).to.be.oneOf([400]);","});","pm.test('error.code ist validation_error', function () {","  pm.expect(pm.response.json().error.code).to.eql('validation_error');","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/invoices/keine-uuid","host":["{{base_url}}"],"path":["invoices","keine-uuid"]}},"response":[]},{"name":"Unbekannte Kennung (404)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([404]);","});","pm.test('error.code ist not_found', function () {","  pm.expect(pm.response.json().error.code).to.eql('not_found');","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/invoices/00000000-0000-4000-8000-000000000000","host":["{{base_url}}"],"path":["invoices","00000000-0000-4000-8000-000000000000"]}},"response":[]},{"name":"Zeitraum zu groß (400)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 400', function () {","  pm.expect(pm.response.code).to.be.oneOf([400]);","});","pm.test('error.code ist range_too_large', function () {","  pm.expect(pm.response.json().error.code).to.eql('range_too_large');","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/payments?from=2020-01-01&to=2026-10-12","host":["{{base_url}}"],"path":["payments"],"query":[{"key":"from","value":"2020-01-01"},{"key":"to","value":"2026-10-12"}]}},"response":[]},{"name":"Zeitraum umgekehrt (400)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 400', function () {","  pm.expect(pm.response.code).to.be.oneOf([400]);","});","pm.test('error.code ist range_invalid', function () {","  pm.expect(pm.response.json().error.code).to.eql('range_invalid');","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/payments?from=2026-10-12&to=2026-01-01","host":["{{base_url}}"],"path":["payments"],"query":[{"key":"from","value":"2026-10-12"},{"key":"to","value":"2026-01-01"}]}},"response":[]},{"name":"Ungültiger Cursor (400)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 400', function () {","  pm.expect(pm.response.code).to.be.oneOf([400]);","});","pm.test('error.code ist invalid_cursor', function () {","  pm.expect(pm.response.json().error.code).to.eql('invalid_cursor');","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/payments/changes?cursor=kein-cursor","host":["{{base_url}}"],"path":["payments","changes"],"query":[{"key":"cursor","value":"kein-cursor"}]}},"response":[]},{"name":"Unbekannte Adresse (404)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([404]);","});","pm.test('error.code ist route_not_found', function () {","  pm.expect(pm.response.json().error.code).to.eql('route_not_found');","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/does-not-exist","host":["{{base_url}}"],"path":["does-not-exist"]}},"response":[]},{"name":"Schreibender Aufruf ohne Idempotency-Key (400)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 400', function () {","  pm.expect(pm.response.code).to.be.oneOf([400]);","});","pm.test('error.code ist idempotency_key_required', function () {","  pm.expect(pm.response.json().error.code).to.eql('idempotency_key_required');","});"]}}],"request":{"method":"POST","header":[],"url":{"raw":"{{base_url}}/webhooks/00000000-0000-4000-8000-000000000000/test","host":["{{base_url}}"],"path":["webhooks","00000000-0000-4000-8000-000000000000","test"]}},"response":[]}]},{"name":"6. Idempotency-Key","description":"Gleicher Schlüssel und gleicher Inhalt: derselbe Erfolg ohne zweite Wirkung. Gleicher Schlüssel und anderer Inhalt: 409 `idempotency_conflict`. Die beiden Anfragen nutzen den festen Schlüssel `demo_key`. **Die erste legt einen echten Webhook an** (löschen Sie ihn danach mit der dritten Anfrage dieses Ordners; sie löscht nur diesen Demo-Webhook, nicht den aus Ordner 1).","item":[{"name":"Webhook anlegen (Inhalt A)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 201', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 201]);","});","if (pm.response.code === 200 || pm.response.code === 201) {","  pm.collectionVariables.set(\"demo_webhook_id\", pm.response.json().data.id);","}"]}}],"request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"{{demo_key}}"},{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/webhooks","host":["{{base_url}}"],"path":["webhooks"]},"description":"Wiederholt gesendet: 200 ohne Geheimnis, kein zweiter Webhook.","body":{"mode":"raw","raw":"{\n  \"url\": \"{{receiver_url}}\",\n  \"events\": [\n    \"payment.received\"\n  ],\n  \"description\": \"Postman idempotency demo\"\n}","options":{"raw":{"language":"json"}}}},"response":[]},{"name":"Gleicher Schlüssel, anderer Inhalt (409)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 409', function () {","  pm.expect(pm.response.code).to.be.oneOf([409]);","});"]}}],"request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"{{demo_key}}"},{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/webhooks","host":["{{base_url}}"],"path":["webhooks"]},"description":"Erwartet 409 `idempotency_conflict`: derselbe Schlüssel wurde mit anderem Inhalt benutzt.","body":{"mode":"raw","raw":"{\n  \"url\": \"{{receiver_url}}\",\n  \"events\": [\n    \"invoice.created\"\n  ],\n  \"description\": \"Postman idempotency demo\"\n}","options":{"raw":{"language":"json"}}}},"response":[]},{"name":"Demo-Webhook löschen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 404', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 404]);","});"]}}],"request":{"method":"DELETE","header":[],"url":{"raw":"{{base_url}}/webhooks/{{demo_webhook_id}}","host":["{{base_url}}"],"path":["webhooks","{{demo_webhook_id}}"]},"description":"Löscht den Webhook der ersten Anfrage dieses Ordners (Variable `demo_webhook_id`), nie den aus Ordner 1."},"response":[]}]},{"name":"7. Sandbox (Testmodus)","description":"Zum Ausprobieren ohne echte Daten. Tragen Sie unter **Variables** ein **Test-Token** (`m2h_test_…`, Administration → API-Zugänge → Sandbox) als `sandbox_token` ein; die Anfragen dieses Ordners nutzen nie das echte `token`. Die Sandbox braucht aktiven API-Zugang (sonst 403 `sandbox_unavailable`). Zustellung an Ihren Empfänger gibt es nur aus der Produktion; Nachrichten tragen `livemode: false`.","item":[{"name":"Standorte lesen (Musterdaten)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","pm.test(\"Antwortkopf X-M2H-Sandbox ist true\", function () {","  pm.expect(pm.response.headers.get(\"X-M2H-Sandbox\")).to.eql(\"true\");","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/locations","host":["{{base_url}}"],"path":["locations"]},"description":"Jede Antwort auf ein Test-Token trägt den Kopf `X-M2H-Sandbox: true`.","auth":{"type":"bearer","bearer":[{"key":"token","value":"{{sandbox_token}}","type":"string"}]}},"response":[]},{"name":"Webhook für die Sandbox anlegen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200 oder 201', function () {","  pm.expect(pm.response.code).to.be.oneOf([200, 201]);","});","if (pm.response.code === 201 || pm.response.code === 200) {","  pm.collectionVariables.set(\"sandbox_webhook_id\", pm.response.json().data.id);","}"]}}],"request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"{{sandbox_webhook_key}}"},{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/webhooks","host":["{{base_url}}"],"path":["webhooks"]},"description":"Das Test-Token braucht den Scope `webhooks:manage`; höchstens 3 Webhooks je Sandbox. Die Antwort enthält das Geheimnis einmalig.","auth":{"type":"bearer","bearer":[{"key":"token","value":"{{sandbox_token}}","type":"string"}]},"body":{"mode":"raw","raw":"{\n  \"url\": \"{{receiver_url}}\",\n  \"events\": [\n    \"payment.received\",\n    \"invoice.created\",\n    \"dunning.sent\"\n  ],\n  \"description\": \"Postman Sandbox\"\n}","options":{"raw":{"language":"json"}}}},"response":[]},{"name":"Ereignis simulieren: Zahlungseingang","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","pm.test(\"Antwortkopf X-M2H-Sandbox ist true\", function () {","  pm.expect(pm.response.headers.get(\"X-M2H-Sandbox\")).to.eql(\"true\");","});"]}}],"request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"{{idempotency_key}}"},{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/sandbox/events","host":["{{base_url}}"],"path":["sandbox","events"]},"description":"Stellt `payment.received` für ein Musterobjekt der Sandbox ein, ohne echte Buchung. Der Server sendet nur aus der Produktion (`delivery` in der Antwort); der Verlauf steht unter `/webhooks/{id}/deliveries`. Quoten: 100 wartende und 500 je 24 Stunden.","auth":{"type":"bearer","bearer":[{"key":"token","value":"{{sandbox_token}}","type":"string"}]},"body":{"mode":"raw","raw":"{\n  \"type\": \"payment.received\"\n}","options":{"raw":{"language":"json"}}}},"response":[]},{"name":"Ereignis simulieren: Rechnung","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","pm.test(\"Antwortkopf X-M2H-Sandbox ist true\", function () {","  pm.expect(pm.response.headers.get(\"X-M2H-Sandbox\")).to.eql(\"true\");","});"]}}],"request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"{{idempotency_key}}"},{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/sandbox/events","host":["{{base_url}}"],"path":["sandbox","events"]},"description":"Stellt `invoice.created` für ein Musterobjekt der Sandbox ein, ohne echte Buchung. Der Server sendet nur aus der Produktion (`delivery` in der Antwort); der Verlauf steht unter `/webhooks/{id}/deliveries`. Quoten: 100 wartende und 500 je 24 Stunden.","auth":{"type":"bearer","bearer":[{"key":"token","value":"{{sandbox_token}}","type":"string"}]},"body":{"mode":"raw","raw":"{\n  \"type\": \"invoice.created\"\n}","options":{"raw":{"language":"json"}}}},"response":[]},{"name":"Ereignis simulieren: Mahnung","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});","pm.test(\"Antwortkopf X-M2H-Sandbox ist true\", function () {","  pm.expect(pm.response.headers.get(\"X-M2H-Sandbox\")).to.eql(\"true\");","});"]}}],"request":{"method":"POST","header":[{"key":"Idempotency-Key","value":"{{idempotency_key}}"},{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{base_url}}/sandbox/events","host":["{{base_url}}"],"path":["sandbox","events"]},"description":"Stellt `dunning.sent` für ein Musterobjekt der Sandbox ein, ohne echte Buchung. Der Server sendet nur aus der Produktion (`delivery` in der Antwort); der Verlauf steht unter `/webhooks/{id}/deliveries`. Quoten: 100 wartende und 500 je 24 Stunden.","auth":{"type":"bearer","bearer":[{"key":"token","value":"{{sandbox_token}}","type":"string"}]},"body":{"mode":"raw","raw":"{\n  \"type\": \"dunning.sent\"\n}","options":{"raw":{"language":"json"}}}},"response":[]},{"name":"Zustellverlauf der Sandbox","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"GET","header":[],"url":{"raw":"{{base_url}}/webhooks/{{sandbox_webhook_id}}/deliveries?limit=50","host":["{{base_url}}"],"path":["webhooks","{{sandbox_webhook_id}}","deliveries"],"query":[{"key":"limit","value":"50"}]},"auth":{"type":"bearer","bearer":[{"key":"token","value":"{{sandbox_token}}","type":"string"}]}},"response":[]},{"name":"Sandbox-Webhook löschen","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Status ist 200', function () {","  pm.expect(pm.response.code).to.be.oneOf([200]);","});"]}}],"request":{"method":"DELETE","header":[],"url":{"raw":"{{base_url}}/webhooks/{{sandbox_webhook_id}}","host":["{{base_url}}"],"path":["webhooks","{{sandbox_webhook_id}}"]},"auth":{"type":"bearer","bearer":[{"key":"token","value":"{{sandbox_token}}","type":"string"}]}},"response":[]}]}]}