Trust API · v1
Auf verifizierter Identität und geklärten Rechten aufbauen
Agenturen und Plattformen prüfen mit der Trust API, ob eine Person verifiziert ist, ob eine angefragte Nutzung zu ihren veröffentlichten Bedingungen passt und ob ein Inhalt zur Verbreitung bereit ist. Schlüssel werden im Mitglieder-Dashboard unter Trust Layer erstellt und sind auf die Identitäten beschränkt, auf die das Konto Zugriff hat.
Authentifizierung
Senden Sie Authorization: Bearer pg_live_… mit jeder Anfrage. Schlüssel werden gehasht gespeichert, einmal angezeigt und können jederzeit widerrufen werden. Anfragen sind pro Schlüssel begrenzt; eine 429 Antwort enthält Retry-After.
Endpunkte
- GET
/api/v1/personas/{pgId}Identity and credential status, plus the public rights summary. - POST
/api/v1/personas/{pgId}/evaluateClassifies a rights request against the owner policy. Advisory only, never a grant. - POST
/api/v1/complianceRuns a distribution assessment for an asset the key owner registered. - GET
/api/v1/events?pgId=&since=Reads the trust event ledger for identities the key can access. - GET
/api/v1/proof/{reference}Returns a stored proof package and its SHA-256 hash.
curl -X POST https://thepersonagrata.com/api/v1/personas/PG-XXXX-XXXX/evaluate \
-H "Authorization: Bearer pg_live_..." \
-H "Content-Type: application/json" \
-d '{
"rights": { "face": true, "image": true },
"uses": ["organicSocial"],
"channels": ["social"],
"territory": "EU",
"durationMonths": 6,
"feeCents": 250000,
"currency": "EUR"
}'Das Ergebnis ist eines von WITHIN_POLICY, REQUIRES_OWNER_APPROVAL oder OUTSIDE_POLICY, mit einer Prüfung für jede Dimension. Nur der Inhaber der Identität kann eine Lizenz erteilen.
Webhooks
Jede Zustellung wird mit Ihrem Endpunkt-Secret signiert. Fehlgeschlagene Zustellungen werden mit zunehmendem Abstand bis zu 8-mal über einige Tage wiederholt; dauerhaft fehlschlagende Endpunkte werden automatisch deaktiviert. Ereignis-IDs sind stabil, Wiederholungen können Sie also gefahrlos ignorieren.
import { createHmac, timingSafeEqual } from 'node:crypto'
// Header: PG-Signature: t=1715000000,v1=<hex>
export function verify(rawBody: string, header: string, secret: string) {
const parts = Object.fromEntries(header.split(',').map((p) => p.split('=')))
const expected = createHmac('sha256', secret).update(`${parts.t}.${rawBody}`).digest('hex')
const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300
return fresh && timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1 ?? ''))
}asset.registeredasset.provenance.signedasset.provenance.pendingasset.provenance.failedasset.revokedrights.requestedrights.approvedrights.grantedrights.expiredrights.revokedrights.declinedaccount.connectedaccount.verifiedaccount.disconnectedpersona.verifiedpersona.suspendedpersona.revokedenforcement.case.createdenforcement.case.updatedcompliance.assessed