PlatformXeDocs
Get API Key

Relationships API

Manage Zanzibar-style relationship tuples.

Relationship tuples power ReBAC (relationship-based access control). Each tuple represents a subject-relation-object triple used in graph traversal during permission checks.

Scope: permissions:manage

Rate limit: 500/hr

List relationships

GET /api/v1/permissions/relationships

Supports filtering by subject, relation, or object.

ParameterTypeDescription
subjectstringFilter by subject (e.g., user:steve)
relationstringFilter by relation (e.g., owner)
objectstringFilter by object (e.g., folder:design)
curl "https://api.platformxe.com/api/v1/permissions/relationships?subject=user:steve" \
  -H "x-api-key: pxk_live_your_api_key_here"
const rels = await px.permissions.listRelationships({
  subject: 'user:steve',
});

Response

{
  "success": true,
  "data": {
    "relationships": [
      {
        "id": "rel_abc123",
        "subject": "user:steve",
        "relation": "owner",
        "object": "folder:design",
        "createdAt": "2026-04-01T10:00:00.000Z"
      }
    ]
  }
}

Batch write/delete relationships

POST /api/v1/permissions/relationships

Send an array of operations. Each operation is either WRITE (create) or DELETE (remove).

FieldTypeRequiredDescription
operationsarrayYesBatch of write/delete operations
operations[].operationstringYesWRITE or DELETE
operations[].subjectstringYesSubject identifier (e.g., user:alice)
operations[].relationstringYesRelation type (e.g., member, owner)
operations[].objectstringYesObject identifier (e.g., team:engineering)
curl -X POST https://api.platformxe.com/api/v1/permissions/relationships \
  -H "Content-Type: application/json" \
  -H "x-api-key: pxk_live_your_api_key_here" \
  -d '{
    "operations": [
      { "operation": "WRITE", "subject": "user:alice", "relation": "member", "object": "team:design" },
      { "operation": "WRITE", "subject": "team:design", "relation": "owner", "object": "project:rebrand" },
      { "operation": "DELETE", "subject": "user:bob", "relation": "member", "object": "team:design" }
    ]
  }'
await px.permissions.writeRelationships({
  operations: [
    { operation: 'WRITE', subject: 'user:alice', relation: 'member', object: 'team:design' },
    { operation: 'WRITE', subject: 'team:design', relation: 'owner', object: 'project:rebrand' },
    { operation: 'DELETE', subject: 'user:bob', relation: 'member', object: 'team:design' },
  ],
});

Use the type:id naming convention for subjects and objects (e.g., user:alice, folder:docs). This makes relationship graphs easier to query and debug.

Error responses

CodeDescription
BAD_REQUESTMissing required fields or invalid operation type
FORBIDDENAPI key missing permissions:manage scope