Zum Hauptinhalt springen

Compliance

Das Compliance-Protokoll ist ein Eintrag für alles, was mit den Beiträgen eines Workspaces geschah, nachdem sie ihn verlassen haben: jeder übergebene Beitrag, jedes Update, Löschen und erneute Senden, jede Freigabeentscheidung, das Ergebnis jeder Zustellung, jede Meldung, wo ein Beitrag steht, und jede Änderung an der Freigabe eines Kanals. Jeder Eintrag wird einmal geschrieben und nie geändert, in die Kette des Workspaces versiegelt, von Reelwire signiert, einmal am Tag von einer externen Stelle mit einem Zeitstempel versehen und zehn Jahre aufbewahrt, was auch immer seither mit dem Clip, dem Beitrag oder dem Kanal geschehen ist. Wozu es dient und wie eine Person es nutzt, steht auf der Seite Compliance.

Das Protokoll gehört zu Enterprise und zeichnet von dem Moment an auf, in dem ein Workspace darin ist. Ein Workspace, der Enterprise verlässt, zeichnet nichts Neues mehr auf und kann das, was er hat, 90 Tage lang weiter lesen und exportieren, danach wird es gelöscht. In jedem anderen Tarif ist das Lesen ein 403 mit einem Satz, der das sagt. Die Freigaberegeln zu ändern und Prüfer hinzuzufügen ist allein Enterprise vorbehalten, ebenfalls ein 403 während dieser 90 Tage; einen Prüfer zu entfernen funktioniert in jedem Tarif.

MethodePfadBerechtigung
GET/v1/compliancecompliance:read
GET/v1/compliance/recordscompliance:read
GET/v1/compliance/records/{id}compliance:read
GET/v1/compliance/exportcompliance:read
GET/v1/compliance/export/linkcompliance:read
GET/v1/compliance-files/{tenantId}allein der signierte Link, keine Zugangsberechtigung
GET/v1/compliance/auditcompliance:read
PUT/v1/compliance/approval-rules/{channelId}angemeldete Person: Freigaben
GET/v1/compliance/auditorsangemeldete Person
POST/v1/compliance/auditorsangemeldete Person: Verwaltung
POST/v1/compliance/auditors/{userId}/resendangemeldete Person: Verwaltung
POST/v1/compliance/auditors/{userId}/deleteangemeldete Person: Verwaltung

Wer es liest. Ein Schlüssel mit der Berechtigung Compliance, die nur lesend ist: Eine Maschine darf das Protokoll lesen, eine Datei dagegen prüfen und den Export für ein eigenes Archiv abrufen. Eine angemeldete Person mit Freigaben oder Verwaltung (der Inhaber hat beides) und ein Prüfer. Die Freigaberegeln und die Prüfer beantworten eine Dashboard-Sitzung und nie einen Schlüssel, weil die einen eine Kontrolle lockern und die anderen jemanden hereinlassen: Ein Schlüssel erhält die Ablehnung „Sign in to do this“, beschrieben unter Authentifizierung.

Die Übersicht​

curl http://localhost:4000/v1/compliance \
-H "Authorization: Bearer rw_your_key_here"
{
"on": true,
"lapsed": null,
"retentionYears": 10,
"graceDays": 90,
"entries": 1284,
"sealed": 1283,
"waiting": 1,
"firstEntryAt": "2026-10-14T09:12:40.118Z",
"chain": { "seq": 1283, "headHash": "4f0c9a...e71d" },
"anchor": {
"day": "2026-10-15",
"seq": 1270,
"state": "STAMPED",
"genTime": "2026-10-15T00:01:12.000Z",
"tsaUrl": "http://timestamp.digicert.com"
},
"timeStampAuthority": "http://timestamp.digicert.com",
"keys": [
{ "id": "01M3B4Z9Q8R0J5V2C6N1T7K4WD", "publicKeyPem": "-----BEGIN PUBLIC KEY-----\n...", "createdAt": "2026-10-14T09:12:41.002Z", "retired": false }
],
"kinds": [
{ "id": "post.publish", "label": "Handed over" },
{ "id": "post.update", "label": "Update handed over" }
]
}

Gekürzt: kinds listet alle acht, und Hashes sind 64 Hexadezimalzeichen lang.

  • on gibt an, ob der Workspace jetzt aufzeichnet. lapsed ist null oder, bei einem Workspace, der Enterprise verlassen hat, since (wann) und deletesOn (wann das, was er aufgezeichnet hat, gelöscht wird).
  • entries zählt sie, sealed die, die ihre Nummer und Signatur haben, und waiting die, die in den nächsten Sekunden versiegelt werden.
  • chain ist die Nummer und der Hash des neuesten Eintrags.
  • anchor ist der neueste tägliche Zeitstempel, der diesen Workspace abdeckt, bis zu welchem Eintrag (seq), und sein state: PENDING, solange die Stelle erneut gefragt wird, etwa alle zehn Minuten, STAMPED mit dem Moment, in dem sie signiert hat (genTime), oder FAILED, sobald sie 48-mal ohne Antwort gefragt wurde.
  • keys sind die öffentlichen Hälften der Schlüssel, mit denen Reelwire Einträge signiert, als PEM.

Einträge​

curl "http://localhost:4000/v1/compliance/records?kind=post.publish&perPage=1" \
-H "Authorization: Bearer rw_your_key_here"
{
"records": [
{
"id": "01M3B5C2D1E0F9G8H7J6K5M4N3",
"kind": "post.publish",
"label": "Handed over",
"occurredAt": "2026-10-15T08:30:02.411Z",
"summary": "Orchid Invest DE: Der DAX schloss 412 Punkte hoeher.",
"tone": "good",
"channels": ["Orchid Invest DE"],
"channelIds": ["01M1VFRWE7EWSY5D7QDQ0KNK1S"],
"postKey": "01M3B5BZQ1X0W9V8T7S6R5Q4P3",
"postIds": ["01M3B5C0A9B8C7D6E5F4G3H2J1"],
"videoSha256": ["9b2e1f...c04a"],
"seq": 1283,
"sealed": true,
"entryHash": "4f0c9a...e71d",
"frames": 3,
"stills": "DONE"
}
],
"total": 412,
"all": 1284,
"page": 1,
"perPage": 1,
"facets": { "kind": ["post.publish", "post.update", "..."], "channelId": ["01M1VFRWE7EWSY5D7QDQ0KNK1S"] },
"labels": { "kind": { "post.publish": "Handed over" }, "channelId": { "01M1VFRWE7EWSY5D7QDQ0KNK1S": "Orchid Invest DE" } }
}

Er paginiert, durchsucht und sortiert wie jedes Protokoll (siehe Listen und Paginierung), die neuesten zuerst, sofern nicht ascending=true:

ParameterWas es bewirkt
since, untilNur Einträge, die in diesem Zeitfenster geschahen, ISO-8601-Zeitpunkte.
kindEine Art oder mehrere, durch Kommas getrennt (unten).
channelIdEin Kanal oder mehrere, durch Kommas getrennt.
sha256Nur die Einträge, die diese Videodatei nennen, über die 64 Hexadezimalzeichen ihres SHA-256. Alles andere ist ein 400. Siehe Eine Videodatei prüfen.
qEin Beitragsschlüssel, eine Beitrags-ID, der Hash eines Eintrags oder Wörter einer Beschreibung oder des Namens eines Kanals.
page, perPageperPage ist 1 bis 200, standardmäßig 25.

summary ist der Eintrag in einer Zeile, allein aus dem Eintrag gelesen, und tone, wie er auf einen Blick wirkt (good, bad, waiting oder plain). sealed ist false in den wenigen Sekunden, bevor ein Eintrag seine Nummer (seq) und seinen Hash hat. stills sagt, wie es um seine Einzelbilder steht: NONE für einen Eintrag ohne eigenes Video, PENDING, bis sie aufgenommen sind, DONE oder MISSING, wo der Clip den Speicher vorher verlassen hatte.

kindBezeichnungGeschrieben, wenn
post.publishÜbergebenEin Beitrag ging auf einem Kanal hinaus. Ein Eintrag je Kanal einer Übergabe.
post.updateUpdate übergebenEine Änderung an einem bereits veröffentlichten Beitrag wurde übergeben.
post.deleteLöschen übergebenEine Anfrage, einen Beitrag zu entfernen, wurde übergeben.
post.resendErneut gesendetEin erneutes Senden per E-Mail, per Webhook oder an Syndikationsteilnehmer, eine Wiederveröffentlichung über den Plattform-Connector oder ein neuer Versuch bei einem fehlgeschlagenen Beitrag.
approval.decisionFreigabeentscheidungJemand hat einen Beitrag oder ein Update freigegeben oder abgelehnt oder die erste von zwei Freigaben erteilt.
delivery.outcomeZustellergebnisEine E-Mail, ein Webhook-Aufruf oder ein Beitrag über einen Plattform-Connector wurde zugestellt oder schlug nach allen Versuchen fehl.
post.reportGemeldetEin Beitrag wurde als veröffentlicht (mit seinem Link), übersprungen, nicht veröffentlicht oder gelöscht gemeldet.
channel.approvalFreigaberegel geändertDie Freigabe eines Kanals wurde umgeschaltet, oder die Zahl ihrer Freigebenden hat sich geändert.

Ein Eintrag​

GET /v1/compliance/records/{id} antwortet mit einem ganzen Eintrag: was aufgezeichnet wurde, sein Siegel, der tägliche Zeitstempel, der ihn abdeckt, und seine Einzelbilder.

{
"record": {
"id": "01M3B5C2D1E0F9G8H7J6K5M4N3",
"kind": "post.publish",
"label": "Handed over",
"occurredAt": "2026-10-15T08:30:02.411Z",
"summary": "Orchid Invest DE: Der DAX schloss 412 Punkte hoeher.",
"body": {
"v": 1,
"kind": "post.publish",
"occurredAt": "2026-10-15T08:30:02.411Z",
"workspace": { "id": "01M1VFRWE3A35H892VAAEKKDA6", "name": "Orchid Invest" },
"handover": { "id": "01M3B5C1...", "postKey": "01M3B5BZQ1X0W9V8T7S6R5Q4P3", "ways": ["EMAIL", "WEBHOOK"] },
"post": { "id": "01M3B5C0A9B8C7D6E5F4G3H2J1", "postGroupId": "01M3B5BZW..." },
"channel": { "id": "01M1VFRWE7EWSY5D7QDQ0KNK1S", "name": "Orchid Invest DE", "platform": "instagram", "surface": "instagram-reels", "ratio": "9x16", "locale": "de" },
"brand": "Orchid Invest",
"template": { "id": "tpl_dd7e6b264fb8", "variant": "Corporate glass", "version": "1.0.0", "build": "a41c...9e02" },
"source": { "kind": "queue", "queueName": "Market close", "title": "DAX close" },
"author": { "kind": "person", "id": "anna@orchid.example", "name": "Anna Berg" },
"ai": null,
"approval": {
"required": true,
"needed": 1,
"decisions": [{ "by": { "kind": "person", "id": "lena@orchid.example", "name": "Lena Kraus" }, "at": "2026-10-15T08:29:51.004Z", "note": "Figures checked." }]
},
"video": { "assetId": "01M3B5BZX...", "kind": "video", "ratio": "9x16", "mimeType": "video/mp4", "width": 1080, "height": 1920, "durationMs": 12000, "byteSize": 3481202, "sha256": "9b2e1f...c04a" },
"text": { "caption": "Der DAX schloss 412 Punkte hoeher.", "hashtags": ["dax", "boerse"], "disclaimer": "Keine Anlageberatung." }
},
"bodyHash": "c3d1...77aa",
"seal": {
"seq": 1283,
"prevHash": "8e91...02bd",
"entryHash": "4f0c9a...e71d",
"signature": "3vQ9...Bw==",
"keyId": "01M3B4Z9Q8R0J5V2C6N1T7K4WD",
"sealedAt": "2026-10-15T08:30:03.120Z"
},
"anchor": null,
"stills": "DONE",
"frames": [
{ "id": "01M3B5D...", "atMs": 1200, "width": 480, "height": 854, "url": "http://localhost:4000/v1/assets/01M3B5D.../download?exp=...&sig=...", "expiresAt": "2026-10-15T09:31:00.000Z" }
]
}
}

Gekürzt: Die drei Einzelbilder werden bei einem Zehntel, in der Mitte und bei neun Zehnteln des Videos aufgenommen, und ihre Links funktionieren eine Stunde. anchor ist null, bis der nächste tägliche Zeitstempel den Eintrag abdeckt, danach sein day, state, genTime, tsaUrl und root. Eine ID, die keinem Eintrag dieses Workspaces gehört, ist ein 404.

Was body trägt, hängt von seiner Art ab, und jeder Body nennt sein v, kind und occurredAt:

  • Eine Übergabe (post.publish, post.resend): der Workspace, die Übergabe mit ihren ways (EMAIL, WEBHOOK, CONNECTOR, SYNDICATION) und, bei einem erneuten Senden, again, das sagt, welcher; der Beitrag (mit permalink, wo einer bekannt war), der Kanal, die Marke, die Vorlage mit dem Fingerabdruck ihres build, die source, der author (eine Person, ein API-Schlüssel oder feed für einen fertigen Feed), ai (was die KI-Schritte des Feed-Servers mit dem Inhalt eines fertigen Feeds getan haben, wie er es beim Senden angab), die approval mit jeder Entscheidung, das video und das cover mit ihrem SHA-256, der text, jede Länge der Beschreibung, in der er übergeben wurde (captions), und die Veröffentlichungseinstellungen. Ein erneutes Senden nennt, wer es verlangt hat (requestedBy).
  • Ein Update: derselbe Kanal und Beitrag, requestedBy, die approval, durch die die Änderung ging, und die change selbst: ihr Text, ihre Beschreibungen und, wo sie das Video ersetzt hat, das neue video.
  • Ein Löschen: der Kanal und der Beitrag und requestedBy.
  • Eine Freigabeentscheidung: approval mit about (post oder update), decision (approved, rejected oder first-approval), needed, by, note, requestedBy (der Autor) und, bei einem Update, der freigegebenen change.
  • Das Ergebnis einer Zustellung: delivery mit ihrem way, outcome (delivered oder failed), attempts, dem target des Webhooks oder der Plattform, dem letzten status und einer note.
  • Eine Meldung: report mit dem state des Beitrags (PUBLISHED, SKIPPED, FAILED oder RECALLED), by und der angegebenen url, platformPostId oder dem reason.
  • Eine geänderte Freigaberegel: der Kanal, by sowie from und to, jeweils seine approval und approvers.

Personen werden mit den Werten genannt, die sie in diesem Moment hatten (kind, id als Anmeldeadresse oder ID des Schlüssels und name), sodass ein seither entfernter Kollege oder widerrufener Schlüssel weiterhin nennt, wer es getan hat. Text, der von außerhalb des Workspaces kam, ein Fehler eines Empfängers oder ein Grund, den jemand in eine Meldung getippt hat, wird so aufgezeichnet, wie er ankam.

Eine Videodatei prüfen​

Welcher Beitrag ist diese Datei? Berechnen Sie ihren SHA-256 dort, wo sie liegt, und fragen Sie:

sha256sum clip.mp4          # macOS: shasum -a 256 clip.mp4
curl "http://localhost:4000/v1/compliance/records?sha256=9b2e1f...c04a" \
-H "Authorization: Bearer rw_your_key_here"

Jeder Eintrag, der diese Datei nennt, kommt zurück. Eine Übereinstimmung beweist bis aufs Byte, dass es die übergebene Datei ist. Eine von einer Plattform heruntergeladene Kopie stimmt nie überein, weil Plattformen neu kodieren, was sie veröffentlichen: Der Fingerabdruck gehört zu der Datei, die Reelwire übergeben hat, die Ihr Empfänger oder Ihr Beitragspaket erhalten hat und die aufzubewahren ist.

Der Export​

GET /v1/compliance/export antwortet mit einem ZIP für einen Zeitraum und, wo verlangt, einige Kanäle: was einem Prüfer übergeben wird. Es ist das, was Export für einen Prüfer herunterladen auf der Seite herunterlädt.

curl -o compliance.zip \
"http://localhost:4000/v1/compliance/export?since=2026-09-01T00:00:00Z&until=2026-09-30T23:59:59Z&channelId=01M1VFRWE7EWSY5D7QDQ0KNK1S" \
-H "Authorization: Bearer rw_your_key_here"
ParameterWas es bewirkt
since, untilDer Zeitraum, ISO-8601-Zeitpunkte. until ist standardmäßig jetzt und since 30 Tage davor. Ein Zeitraum, der nach seinem Ende beginnt, ist ein 400.
channelIdNur einige Kanäle, durch Kommas getrennt oder wiederholt. Fehlt es, sind es alle Kanäle.

Es antwortet mit application/zip, sein Dateiname ist der des Workspaces und des Zeitraums. Nur versiegelte Einträge sind darin; einer, der in den letzten Sekunden geschrieben wurde, kommt in den nächsten. Ein Export enthält höchstens 3.000 Einträge: Ein Zeitraum mit mehr ist ein 409, der sagt, wie viele er enthält; verlangen Sie also einen kürzeren Zeitraum oder weniger Kanäle und rufen Sie den Rest gesondert ab. Jeder Export wird in das Audit-Protokoll geschrieben (compliance.exported), mit dem Zeitraum und den Kanälen.

DateiWas es ist
report.pdfDas Protokoll für eine Person aufbereitet, Beitrag für Beitrag, mit drei Einzelbildern je Video. Seine erste Seite sagt, was Reelwire fand, als es den Export vor dem Schreiben geprüft hat. Es beschreibt; records.json beweist.
records.jsonentries, jeder mit seinem body, bodyHash, seq, prevHash, entryHash, signature und keyId; chain, jedes Glied vom ersten Eintrag des Zeitraums bis zum neuesten, den ein täglicher Zeitstempel abdeckt; anchors, jeder tägliche Zeitstempel mit dem Nachweis dieses Workspaces; und keys, die öffentlichen Schlüssel, die signiert haben.
anchors/Jeder tägliche Zeitstempel (RFC 3161), wie die Stelle ihn beantwortet hat, eine .tsr-Datei je Tag.
stills/Die Einzelbilder, die der Bericht zeigt, benannt nach Eintrag und Position.
verify.mjsJede Prüfung unten, ausgeschrieben. Node.js 18 oder neuer, nichts zu installieren.
README.txtWas alles das ist und wie man es prüft.

GET /v1/compliance/export/link, mit denselben since, until und channelId, antwortet statt mit dem ZIP mit einer signierten Adresse zu diesem ZIP: für einen Aufrufer, der die Datei nicht zu der Person tragen kann, die sie will, etwa ein KI-Assistent über eine gehostete Verbindung, der der Person den Link zum Anklicken gibt.

{
"url": "https://app.reelwire.io/v1/compliance-files/01M1V...?since=2026-09-01T00%3A00%3A00.000Z&until=...&link=01M...&exp=1792371234&sig=...",
"expiresAt": "2026-10-18T21:15:00.000Z",
"since": "2026-09-01T00:00:00.000Z",
"until": "2026-09-30T23:59:59.000Z",
"channels": []
}

Die Adresse braucht keine Zugangsberechtigung, weil sie selbst eine ist, für diesen einen Export, und sie funktioniert fünfzehn Minuten. Der Zeitraum, die Kanäle und der Workspace sind in sie signiert: Eine Adresse, die bearbeitet wurde, um weiter zurück oder in einen anderen Workspace zu reichen, ist ein 403, ebenso eine nach Ablauf ihrer Zeit. Der Workspace muss das Protokoll noch haben, wenn der Link verwendet wird. Einen Link anzufordern steht im Audit-Protokoll (compliance.export_linked), ebenso jeder Download darüber (compliance.exported, im Namen dessen, der den Link angefordert hat).

Einen Export verifizieren​

Nichts darin fragt Reelwire. Aus dem Ordner, in den er entpackt wurde:

node verify.mjs                     # every entry, the chain and the time stamps
node verify.mjs --clips ./videos # also: which entry each video in ./videos is

Es gibt eine Zeile je Befund aus, endet mit „Everything checked holds.“ oder damit, wie viele Prüfungen fehlschlugen, und beendet sich mit 1, wenn etwas fehlschlug. Was es prüft, für jeden, der eine eigene Prüfung schreibt:

  1. Der Inhalt jedes Eintrags. bodyHash ist der SHA-256, hexadezimal, von body als kanonisches JSON: Schlüssel auf jeder Ebene sortiert, nichts undefiniert, keine Leerzeichen.

  2. Das Siegel jedes Eintrags. entryHash ist der SHA-256 des kanonischen JSON eines Objekts, das die ID des Workspaces (tenantId, workspace.id in records.json), seq, prevHash und bodyHash enthält. signature ist die Ed25519-Signatur von Reelwire, in Base64, über die 32 Bytes von entryHash, geprüft mit dem Schlüssel in keys, den keyId nennt.

  3. Die Kette. Die Nummern folgen lückenlos aufeinander, und der prevHash jedes Glieds ist der entryHash des vorherigen. Der erste Eintrag, den ein Workspace je aufgezeichnet hat, verweist auf 64 Nullen. Ein nachträglich geänderter, entfernter oder eingeschobener Eintrag bricht jedes Glied danach.

  4. Die täglichen Zeitstempel. Einmal je UTC-Tag wird der neueste Eintrag jedes Workspaces, der etwas aufgezeichnet hat, zum Blatt eines Merkle-Baums, und eine externe Zeitstempelstelle signiert seine Wurzel. Ein Blatt ist der SHA-256 eines 0-Bytes, gefolgt von tenantId, seq und headHash, durch Zeilenvorschübe verbunden; ein Knoten ist der SHA-256 eines 1-Bytes, gefolgt von den je 32 Bytes der beiden Hashes. Der proof.path jedes Ankers listet die Geschwister-Hashes vom Blatt aufwärts auf, mit der Seite (L oder R), auf der jeder steht, und führt zu root. Ein Nachweis nennt nur Hashes, nie einen anderen Workspace.

  5. Die eigene Signatur der Stelle, mit OpenSSL. Der root des Ankers ist der Hash, den die Stelle signiert hat, er wird also als Digest angegeben, mit einem CA-Bundle, das das Stammzertifikat der Stelle enthält (das eigene Bundle der meisten Systeme tut das):

    openssl ts -verify -digest <root> -in anchors/<day>.tsr -CAfile <CA bundle>
    openssl ts -reply -in anchors/<day>.tsr -text # what a time stamp says

    Die Stelle ist an jedem Anker benannt (tsaUrl) und veröffentlicht ihre eigenen Zertifikate.

Ein Eintrag, der besteht, wurde von Reelwire geschrieben und hat sich seither nicht geändert. Ein Eintrag, den ein Zeitstempel abdeckt, existierte so, wie er ist, in dem Moment, in dem die Stelle signierte: Niemand, Reelwire eingeschlossen, hätte ihn danach schreiben oder ändern können, ohne die Kette zu brechen, die zu diesem Zeitstempel führt. Einträge, die neuer sind als der letzte Zeitstempel, sind versiegelt und signiert und warten auf den nächsten.

Das Audit-Protokoll​

GET /v1/compliance/audit ist das eigene Audit-Protokoll des Workspaces: wer was geändert hat, wer hinzugefügt und mit welchen Berechtigungen versehen wurde, welche Schlüssel erstellt wurden, was jeder Beitrag durchlaufen hat.

{
"entries": [
{
"id": "01M3B5E...",
"occurredAt": "2026-10-15T08:29:51.010Z",
"actor": "lena@orchid.example",
"actorKind": "person",
"action": "approval.decided",
"entityType": "ApprovalRequest",
"entityId": "01M3B5D7...",
"fromState": "PENDING",
"toState": "APPROVED",
"detail": { "kind": "POST", "posts": 1, "note": "Figures checked." }
}
],
"total": 37,
"all": 9120,
"page": 1,
"perPage": 25,
"facets": { "who": ["all"] }
}

Es nimmt since, until, q (eine Aktion, eine Person oder ein Schlüssel oder eine ID), page, perPage und ascending entgegen, wie die Einträge. Standardmäßig listet es, was eine Person oder ein Schlüssel getan hat (actorKind person oder key); who=all fügt die eigenen Schritte von Reelwire bei jedem Beitrag hinzu (system), die den größten Teil ausmachen.

Freigaberegeln​

Bei Enterprise kann ein Kanal, der eine Freigabe verlangt, zwei Freigebende verlangen: Zwei verschiedene Personen mit Freigaben geben einen Beitrag oder ein Update jeweils frei, bevor er hinausgeht. Ob ein Kanal überhaupt eine Freigabe verlangt, ist seine approval unter Kanäle; approvers dort nennt die Zahl, und hier wird sie gesetzt.

curl -X PUT http://localhost:4000/v1/compliance/approval-rules/01M1VFRWE7EWSY5D7QDQ0KNK1S \
-H "Authorization: Bearer rws_your_session" \
-H "Content-Type: application/json" \
-d '{"approvers":2}'
{ "channel": { "id": "01M1VFRWE7EWSY5D7QDQ0KNK1S", "name": "Orchid Invest DE", "approval": "PER_POST", "approvers": 2 } }

approvers ist 1 oder 2; alles andere ist ein 400, und ein Kanal, der nicht zu diesem Workspace gehört oder entfernt wurde, ein 404. Es braucht eine Person mit Freigaben, da das Senken eine Kontrolle lockert. Es gilt für das, was ab dann zu warten beginnt; was schon wartet, behält die Zahl, mit der es verlangt wurde. Eine Änderung wird in das Audit-Protokoll geschrieben und ist ein Eintrag des Protokolls.

Eine weitere Regel gilt bei Enterprise ohne Einstellung: Niemand gibt seinen eigenen Beitrag oder sein eigenes Update frei. Wie beide bei /v1/approvals erscheinen, steht unter Freigaben.

Prüfer​

Personen von außerhalb des Workspaces, die sich anmelden, um das Protokoll, seinen Export, das Audit-Protokoll und, ohne etwas zu ändern, den Rest des Workspaces zu lesen. Sie belegen keinen Nutzerplatz, stehen nicht in GET /v1/team/users, und ein Workspace hat höchstens 5. Sie sind ausgesperrt, solange der Workspace nicht bei Enterprise ist.

GET /v1/compliance/auditors antwortet mit auditors, jeder mit id, email, displayName, lastLoginAt und createdAt, und max.

POST /v1/compliance/auditors mit { "email": "auditor@example.com", "displayName": "Jane Doe" } (der Name optional, bis zu 120 Zeichen) fügt einen hinzu und sendet ihm die E-Mail, die ein Kollege erhält, mit einem Link, um das eigene Passwort zu setzen, der nicht abläuft. Es antwortet mit 201 und dem auditor sowie einem einmaligen password, nur in dieser Antwort gezeigt. Ein sechster Prüfer oder eine Adresse, die irgendwo in Reelwire schon verwendet wird, ist ein 409.

POST /v1/compliance/auditors/{userId}/resend sendet einen neuen Link, der den vorherigen ersetzt; innerhalb einer Minute nach dem letzten ist es ein 409. POST /v1/compliance/auditors/{userId}/delete meldet ihn überall ab, löscht sein Konto, informiert ihn per E-Mail und antwortet mit { "removed": true }; was er getan hat, bleibt im Audit-Protokoll. Das Entfernen funktioniert in jedem Tarif, sodass ein Workspace, der Enterprise verlassen hat, trotzdem einen hinausbegleiten kann. Die eigenen Routen des Teams lehnen einen Prüfer mit einem 409 ab, der hierher verweist.