{
  "info": {
    "name": "Ollacore API",
    "description": "Every customer-facing Ollacore operation, with the request and response recorded from real traffic. Start with the Quickstart folder: set account_email and account_password, then run it top to bottom. Each request that returns a credential or an id stores it in a collection variable for the requests after it. Keys are created in the test environment unless you change key_environment, so experiments never touch live data. The other folders hold one request per operation, in reference order, and are not meant to run top to bottom. The operator plane (HMAC-signed) is not included. Docs: https://www.ollacore.com/docs/",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://api.ollacore.com",
      "description": "API origin."
    },
    {
      "key": "as_session",
      "value": "",
      "description": "Account session (as_…). Set by Sign up or Log in."
    },
    {
      "key": "ak_key",
      "value": "",
      "description": "Server API key (ak_…). Set by Create a key. Never ship it in an app."
    },
    {
      "key": "access_token",
      "value": "",
      "description": "Room-scoped session token (JWT). Set by minting a token."
    },
    {
      "key": "du_session",
      "value": "",
      "description": "Directory session (du_…). Set by verifying an OTP."
    },
    {
      "key": "account_email",
      "value": "",
      "description": "Your account email, for Sign up and Log in."
    },
    {
      "key": "account_password",
      "value": "",
      "description": "Your account password, for Sign up and Log in."
    },
    {
      "key": "key_environment",
      "value": "test",
      "description": "Environment for Create a key: test (the default, isolated from live data) or live."
    },
    {
      "key": "phone",
      "value": "",
      "description": "The E.164 phone number for Request an OTP and Verify."
    },
    {
      "key": "otp_code",
      "value": "",
      "description": "The 6-digit code delivered to that phone. Set it before Verify; it expires in 5 minutes."
    },
    {
      "key": "room_id",
      "value": "",
      "description": "A room id — set by \"Provision a room\" or a directory conversation."
    },
    {
      "key": "message_id",
      "value": "",
      "description": "A message id — set by sending a message."
    },
    {
      "key": "principal_id",
      "value": "",
      "description": "An opaque principal id you choose, e.g. \"alice\"."
    },
    {
      "key": "attachment_id",
      "value": "",
      "description": "Set by \"Begin an upload\"."
    },
    {
      "key": "webhook_id",
      "value": "",
      "description": "Set by creating a webhook."
    },
    {
      "key": "delivery_id",
      "value": "",
      "description": "A delivery id from the delivery log."
    },
    {
      "key": "key_id",
      "value": "",
      "description": "Set by creating a key."
    },
    {
      "key": "app_id",
      "value": "",
      "description": "Set by creating a directory app."
    },
    {
      "key": "user_id",
      "value": "",
      "description": "Directory user id. Set by verifying an OTP; another user's id comes from contacts lookup or a member list."
    },
    {
      "key": "invite_id",
      "value": "",
      "description": "Set by creating an invite link."
    }
  ],
  "item": [
    {
      "name": "Quickstart — run in order",
      "description": "Set account_email and account_password in the collection variables, then run this folder top to bottom. Each request stores what the next one needs. The key is a test key unless you change key_environment.",
      "item": [
        {
          "name": "Create an account (set account_email and account_password first)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/account/signup",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "account",
                "signup"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"{{account_email}}\",\n  \"password\": \"{{account_password}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "auth": {
              "type": "noauth"
            },
            "description": "`signup`"
          },
          "response": [
            {
              "name": "Recorded example (200)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/account/signup",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "account",
                    "signup"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"email\": \"dev@example.com\",\n  \"password\": \"<redacted>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "noauth"
                }
              },
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"tenant_id\": \"acct_fac91b282191cc02dd29912c8db43f1c\",\n  \"session_token\": \"as_EXAMPLE_SESSION\",\n  \"expires_at\": \"2026-02-14T09:30:00Z\"\n}",
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const body = pm.response.json();",
                  "if (body[\"session_token\"] !== undefined) pm.collectionVariables.set(\"as_session\", body[\"session_token\"]);"
                ]
              }
            }
          ]
        },
        {
          "name": "Create a key (test by default; see key_environment)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/account/api-keys",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "account",
                "api-keys"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"docs-example-key\",\n  \"environment\": \"{{key_environment}}\",\n  \"scopes\": [\n    \"rooms:read\",\n    \"rooms:write\",\n    \"members:write\",\n    \"tokens:mint\",\n    \"messages:write\",\n    \"webhooks:manage\",\n    \"usage:read\",\n    \"rooms:delete\",\n    \"data:erase\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{as_session}}",
                  "type": "string"
                }
              ]
            },
            "description": "`createKey`"
          },
          "response": [
            {
              "name": "Recorded example (200)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/account/api-keys",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "account",
                    "api-keys"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"docs-example-key\",\n  \"environment\": \"live\",\n  \"scopes\": [\n    \"rooms:read\",\n    \"rooms:write\",\n    \"members:write\",\n    \"tokens:mint\",\n    \"messages:write\",\n    \"webhooks:manage\",\n    \"usage:read\",\n    \"rooms:delete\",\n    \"data:erase\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{as_session}}",
                      "type": "string"
                    }
                  ]
                }
              },
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"key_id\": \"key-id-main\",\n  \"api_key\": \"ak_live_EXAMPLE.NOT_A_REAL_KEY\",\n  \"environment\": \"live\",\n  \"scopes\": [\n    \"rooms:read\",\n    \"rooms:write\",\n    \"members:write\",\n    \"tokens:mint\",\n    \"messages:write\",\n    \"webhooks:manage\",\n    \"usage:read\",\n    \"rooms:delete\",\n    \"data:erase\"\n  ]\n}",
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const body = pm.response.json();",
                  "if (body[\"api_key\"] !== undefined) pm.collectionVariables.set(\"ak_key\", body[\"api_key\"]);",
                  "if (body[\"key_id\"] !== undefined) pm.collectionVariables.set(\"key_id\", body[\"key_id\"]);"
                ]
              }
            }
          ]
        },
        {
          "name": "Provision a room",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/server/rooms",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "server",
                "rooms"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"created_by\": \"alice\",\n  \"external_ref\": \"order-7781\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{ak_key}}",
                  "type": "string"
                }
              ]
            },
            "description": "`provisionRoom`\n\nScope: `rooms:write`."
          },
          "response": [
            {
              "name": "Recorded example (200)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"created_by\": \"alice\",\n  \"external_ref\": \"order-7781\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                }
              },
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n  \"tenant_id\": \"acct_fac91b282191cc02dd29912c8db43f1c\",\n  \"external_ref\": \"order-7781\",\n  \"created_by\": \"alice\",\n  \"status\": \"active\",\n  \"e2ee\": false,\n  \"created_at\": \"2026-01-15T09:30:03Z\"\n}",
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const body = pm.response.json();",
                  "if (body[\"id\"] !== undefined) pm.collectionVariables.set(\"room_id\", body[\"id\"]);"
                ]
              }
            }
          ]
        },
        {
          "name": "Add a member",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "server",
                "rooms",
                "{{room_id}}",
                "members"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"principal_id\": \"alice\",\n  \"role\": \"owner\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{ak_key}}",
                  "type": "string"
                }
              ]
            },
            "description": "`addRoomMember`\n\nScope: `members:write`."
          },
          "response": [
            {
              "name": "Recorded example (200)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms",
                    "{{room_id}}",
                    "members"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"principal_id\": \"alice\",\n  \"role\": \"owner\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                }
              },
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"tenant_id\": \"acct_fac91b282191cc02dd29912c8db43f1c\",\n  \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n  \"principal_id\": \"alice\",\n  \"role\": \"owner\",\n  \"joined_at\": \"2026-01-15T09:30:03Z\"\n}",
              "_postman_previewlanguage": "json"
            }
          ]
        },
        {
          "name": "Mint a room-scoped token for that member",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/server/session-tokens",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "server",
                "session-tokens"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"room_id\": \"{{room_id}}\",\n  \"principal_id\": \"alice\",\n  \"role\": \"owner\",\n  \"ttl_seconds\": 3600,\n  \"device_id\": \"dev-alice\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{ak_key}}",
                  "type": "string"
                }
              ]
            },
            "description": "`createSessionToken`\n\nScope: `tokens:mint`."
          },
          "response": [
            {
              "name": "Recorded example (200)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/server/session-tokens",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "session-tokens"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n  \"principal_id\": \"alice\",\n  \"role\": \"owner\",\n  \"ttl_seconds\": 3600,\n  \"device_id\": \"dev-alice\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                }
              },
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"access_token\": \"eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCIsImtpZCI6ImEwM2I1NjQ4MjM3YjlmZWIifQ.eyJpc3MiOiJjaGF0Ym94LWJhY2tlbmQiLCJhdWQiOiJjaGF0Ym94LXJlYWx0aW1lIiwic3ViIjoiYWxpY2UiLCJ0aWQiOiJhY2N0X2ZhYzkxYjI4MjE5MWNjMDJkZDI5OTEyYzhkYjQzZjFjIiwicmlkIjoiMjU5NjRmMTItOWFlOS00MzU2LTgwZTgtNjliYzVmNzQ5YmQxIiwicm9sZSI6Im93bmVyIiwicGVybWlzc2lvbnMiOlsiY2hhdDpzZW5kIiwiY2hhdDpoaXN0b3J5IiwiYXR0YWNobWVudDp1cGxvYWQiLCJhdHRhY2htZW50OmRvd25sb2FkIiwicnRjOnB1Ymxpc2giLCJydGM6c3Vic2NyaWJlIl0sImRpZCI6ImRldi1hbGljZSIsImp0aSI6ImU5MDg1MDAyLTFkMTAtNGE4My1hZGQyLTcxZmIyM2UxODIwMCIsImlhdCI6MTc5MjMyNDY2NywibmJmIjoxNzkyMzI0NjY3LCJleHAiOjE3OTIzMjgyNjd9.SIGNATURE_REMOVED\",\n  \"expires_at\": \"2026-01-15T10:30:04Z\",\n  \"rtc_websocket_url\": \"wss://api.ollacore.com/v1/rtc/ws\",\n  \"chat_websocket_url\": \"wss://api.ollacore.com/v1/chat/ws\",\n  \"ice_servers\": [\n    {\n      \"urls\": [\n        \"stun:api.ollacore.com:3478\"\n      ]\n    },\n    {\n      \"urls\": [\n        \"turn:api.ollacore.com:3478\",\n        \"turns:api.ollacore.com:5349\"\n      ],\n      \"username\": \"1789064267:alice\",\n      \"credential\": \"EXAMPLE_TURN_CREDENTIAL=\"\n    }\n  ]\n}",
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const body = pm.response.json();",
                  "if (body[\"access_token\"] !== undefined) pm.collectionVariables.set(\"access_token\", body[\"access_token\"]);"
                ]
              }
            }
          ]
        },
        {
          "name": "Send a message",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "rooms",
                "{{room_id}}",
                "messages"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"client_message_id\": \"c-9f3b7e21\",\n  \"kind\": \"text\",\n  \"body\": {\n    \"text\": \"Hey — are we still on for 3pm?\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "description": "`postMessage`"
          },
          "response": [
            {
              "name": "Recorded example (200)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "messages"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"client_message_id\": \"c-9f3b7e21\",\n  \"kind\": \"text\",\n  \"body\": {\n    \"text\": \"Hey — are we still on for 3pm?\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                }
              },
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"duplicate\": false,\n  \"message\": {\n    \"body\": {\n      \"text\": \"Hey — are we still on for 3pm?\"\n    },\n    \"client_message_id\": \"c-9f3b7e21\",\n    \"created_at\": \"2026-01-15T09:30:06Z\",\n    \"event_seq\": 5202,\n    \"id\": \"e8b186e4-845a-41dc-bb28-102dd8d0cb8d\",\n    \"kind\": \"text\",\n    \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n    \"sender_id\": \"alice\"\n  }\n}",
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const body = pm.response.json();",
                  "if (body[\"message\"][\"id\"] !== undefined) pm.collectionVariables.set(\"message_id\", body[\"message\"][\"id\"]);"
                ]
              }
            }
          ]
        },
        {
          "name": "Read the history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages?limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "rooms",
                "{{room_id}}",
                "messages"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{access_token}}",
                  "type": "string"
                }
              ]
            },
            "description": "`listMessages`"
          },
          "response": [
            {
              "name": "Recorded example (200)",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "messages"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                }
              },
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"messages\": [\n    {\n      \"id\": \"e0b25ea0-1320-4862-af8d-bc28a2547b27\",\n      \"event_seq\": 5200,\n      \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n      \"sender_id\": \"support-bot\",\n      \"client_message_id\": \"srv-8c1f2a\",\n      \"kind\": \"text\",\n      \"body\": {\n        \"text\": \"Your order #7781 has shipped.\"\n      },\n      \"created_at\": \"2026-01-15T09:30:04Z\"\n    },\n    {\n      \"id\": \"e8b186e4-845a-41dc-bb28-102dd8d0cb8d\",\n      \"event_seq\": 5202,\n      \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n      \"sender_id\": \"alice\",\n      \"client_message_id\": \"c-9f3b7e21\",\n      \"kind\": \"text\",\n      \"body\": {\n        \"text\": \"Hey — are we still on for 3pm?\"\n      },\n      \"created_at\": \"2026-01-15T09:30:06Z\"\n    }\n  ],\n  \"latest_seq\": 5202\n}",
              "_postman_previewlanguage": "json"
            }
          ]
        }
      ]
    },
    {
      "name": "Account API",
      "description": "Self-serve control surface. Dashboard/admin credential — never ship it in a product build.\n\nCredential: as_ account session. Reference: https://www.ollacore.com/docs/api/account/\n\nOne request per operation, in reference order. Not meant to run top to bottom: some requests delete what others create. Use the Quickstart folder for a runnable sequence.",
      "item": [
        {
          "name": "Account",
          "item": [
            {
              "name": "Create an account and its tenant",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/account/signup",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "account",
                    "signup"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"email\": \"{{account_email}}\",\n  \"password\": \"{{account_password}}\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "noauth"
                },
                "description": "`signup`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/account/signup",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "account",
                        "signup"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"email\": \"dev@example.com\",\n  \"password\": \"<redacted>\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "noauth"
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"tenant_id\": \"acct_fac91b282191cc02dd29912c8db43f1c\",\n  \"session_token\": \"as_EXAMPLE_SESSION\",\n  \"expires_at\": \"2026-02-14T09:30:00Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"session_token\"] !== undefined) pm.collectionVariables.set(\"as_session\", body[\"session_token\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Log in",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/account/login",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "account",
                    "login"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"email\": \"{{account_email}}\",\n  \"password\": \"{{account_password}}\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "noauth"
                },
                "description": "`login`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/account/login",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "account",
                        "login"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"email\": \"dev@example.com\",\n  \"password\": \"<redacted>\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "noauth"
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"tenant_id\": \"acct_fac91b282191cc02dd29912c8db43f1c\",\n  \"session_token\": \"as_EXAMPLE_SESSION\",\n  \"expires_at\": \"2026-02-14T09:30:01Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"session_token\"] !== undefined) pm.collectionVariables.set(\"as_session\", body[\"session_token\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Invalidate the session",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/account/logout",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "account",
                    "logout"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{as_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`logout`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/account/logout",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "account",
                        "logout"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{as_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"logged_out\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        },
        {
          "name": "API keys",
          "item": [
            {
              "name": "List keys",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/account/api-keys",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "account",
                    "api-keys"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{as_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`listKeys`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/account/api-keys",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "account",
                        "api-keys"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{as_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"api_keys\": [\n    {\n      \"created_at\": \"2026-01-15T09:30:01Z\",\n      \"environment\": \"live\",\n      \"expires_at\": null,\n      \"id\": \"key-id-main\",\n      \"last_used_at\": null,\n      \"name\": \"docs-example-key\",\n      \"plan\": \"default\",\n      \"revoked_at\": null,\n      \"scopes\": [\n        \"rooms:read\",\n        \"rooms:write\",\n        \"members:write\",\n        \"tokens:mint\",\n        \"messages:write\",\n        \"webhooks:manage\",\n        \"usage:read\",\n        \"rooms:delete\",\n        \"data:erase\"\n      ]\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Create a key (secret shown once)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/account/api-keys",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "account",
                    "api-keys"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"docs-example-key\",\n  \"environment\": \"{{key_environment}}\",\n  \"scopes\": [\n    \"rooms:read\",\n    \"rooms:write\",\n    \"members:write\",\n    \"tokens:mint\",\n    \"messages:write\",\n    \"webhooks:manage\",\n    \"usage:read\",\n    \"rooms:delete\",\n    \"data:erase\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{as_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`createKey`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/account/api-keys",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "account",
                        "api-keys"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"name\": \"docs-example-key\",\n  \"environment\": \"live\",\n  \"scopes\": [\n    \"rooms:read\",\n    \"rooms:write\",\n    \"members:write\",\n    \"tokens:mint\",\n    \"messages:write\",\n    \"webhooks:manage\",\n    \"usage:read\",\n    \"rooms:delete\",\n    \"data:erase\"\n  ]\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{as_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"key_id\": \"key-id-main\",\n  \"api_key\": \"ak_live_EXAMPLE.NOT_A_REAL_KEY\",\n  \"environment\": \"live\",\n  \"scopes\": [\n    \"rooms:read\",\n    \"rooms:write\",\n    \"members:write\",\n    \"tokens:mint\",\n    \"messages:write\",\n    \"webhooks:manage\",\n    \"usage:read\",\n    \"rooms:delete\",\n    \"data:erase\"\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"api_key\"] !== undefined) pm.collectionVariables.set(\"ak_key\", body[\"api_key\"]);",
                      "if (body[\"key_id\"] !== undefined) pm.collectionVariables.set(\"key_id\", body[\"key_id\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Rotate atomically",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/account/api-keys/{{key_id}}/rotate",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "account",
                    "api-keys",
                    "{{key_id}}",
                    "rotate"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{as_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`rotateKey`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/account/api-keys/{{key_id}}/rotate",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "account",
                        "api-keys",
                        "{{key_id}}",
                        "rotate"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{as_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"api_key\": \"ak_live_EXAMPLE.NOT_A_REAL_KEY\",\n  \"key_id\": \"ak_live_616b8de93a24dfbf2c5839186fd5b29a\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"api_key\"] !== undefined) pm.collectionVariables.set(\"ak_key\", body[\"api_key\"]);",
                      "if (body[\"key_id\"] !== undefined) pm.collectionVariables.set(\"key_id\", body[\"key_id\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Revoke",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/account/api-keys/{{key_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "account",
                    "api-keys",
                    "{{key_id}}"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{as_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`deleteKey`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/account/api-keys/{{key_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "account",
                        "api-keys",
                        "{{key_id}}"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{as_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"revoked\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        },
        {
          "name": "Directory apps",
          "item": [
            {
              "name": "Provision an app (webhook or SMS provider)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/account/directory-apps",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "account",
                    "directory-apps"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"delivery_webhook_url\": \"https://hooks.example.com/hook\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{as_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`createDirectoryApp`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/account/directory-apps",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "account",
                        "directory-apps"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"delivery_webhook_url\": \"https://hooks.example.com/hook\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{as_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"app_id\": \"da_03270a6c821fcca6c63a2049d93b62fe\",\n  \"delivery_mode\": \"webhook\",\n  \"delivery_secret\": \"dsec_EXAMPLE_NOT_A_REAL_SECRET\",\n  \"delivery_webhook_url\": \"https://hooks.example.com/hook\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"app_id\"] !== undefined) pm.collectionVariables.set(\"app_id\", body[\"app_id\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "List apps and which push transports are configured",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/account/directory-apps",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "account",
                    "directory-apps"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{as_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`listDirectoryApps`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/account/directory-apps",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "account",
                        "directory-apps"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{as_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"directory_apps\": [\n    {\n      \"app_id\": \"da_03270a6c821fcca6c63a2049d93b62fe\",\n      \"created_at\": \"2026-01-15T09:30:01Z\",\n      \"delivery_mode\": \"webhook\",\n      \"delivery_webhook_url\": \"https://hooks.example.com/hook\",\n      \"push_apns\": false,\n      \"push_fcm\": false\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Delete an app",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/account/directory-apps/{{app_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "account",
                    "directory-apps",
                    "{{app_id}}"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{as_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`deleteDirectoryApp`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/account/directory-apps/{{app_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "account",
                        "directory-apps",
                        "{{app_id}}"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{as_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"deleted\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Set FCM/APNs credentials (write-only)",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/account/directory-apps/{{app_id}}/push",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "account",
                    "directory-apps",
                    "{{app_id}}",
                    "push"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"fcm\": {\n    \"service_account\": {\n      \"project_id\": \"my-firebase-project\",\n      \"client_email\": \"push@my-firebase-project.iam.gserviceaccount.com\",\n      \"private_key\": \"-----BEGIN PRIVATE KEY-----\\n<redacted>\\n-----END PRIVATE KEY-----\"\n    }\n  },\n  \"apns\": {\n    \"p8\": \"-----BEGIN PRIVATE KEY-----\\n<redacted>\\n-----END PRIVATE KEY-----\",\n    \"key_id\": \"ABC123DEFG\",\n    \"team_id\": \"TEAM123456\",\n    \"topic\": \"com.example.chat\",\n    \"env\": \"production\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{as_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`setPush`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "PUT",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/account/directory-apps/{{app_id}}/push",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "account",
                        "directory-apps",
                        "{{app_id}}",
                        "push"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"fcm\": {\n    \"service_account\": {\n      \"project_id\": \"my-firebase-project\",\n      \"client_email\": \"push@my-firebase-project.iam.gserviceaccount.com\",\n      \"private_key\": \"-----BEGIN PRIVATE KEY-----\\n<redacted>\\n-----END PRIVATE KEY-----\"\n    }\n  },\n  \"apns\": {\n    \"p8\": \"-----BEGIN PRIVATE KEY-----\\n<redacted>\\n-----END PRIVATE KEY-----\",\n    \"key_id\": \"ABC123DEFG\",\n    \"team_id\": \"TEAM123456\",\n    \"topic\": \"com.example.chat\",\n    \"env\": \"production\"\n  }\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{as_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"push_apns\": true,\n  \"push_fcm\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "Customer server API",
      "description": "Your backend calls these. Tenant comes from the key — a tenant_id in a body is rejected. Scope-gated.\n\nCredential: ak_ server key. Reference: https://www.ollacore.com/docs/api/server/\n\nOne request per operation, in reference order. Not meant to run top to bottom: some requests delete what others create. Use the Quickstart folder for a runnable sequence.",
      "item": [
        {
          "name": "Rooms & members",
          "item": [
            {
              "name": "Provision a room (idempotent on external_ref)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"created_by\": \"alice\",\n  \"external_ref\": \"order-7781\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`provisionRoom`\n\nScope: `rooms:write`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/server/rooms",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "rooms"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"created_by\": \"alice\",\n  \"external_ref\": \"order-7781\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n  \"tenant_id\": \"acct_fac91b282191cc02dd29912c8db43f1c\",\n  \"external_ref\": \"order-7781\",\n  \"created_by\": \"alice\",\n  \"status\": \"active\",\n  \"e2ee\": false,\n  \"created_at\": \"2026-01-15T09:30:03Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"id\"] !== undefined) pm.collectionVariables.set(\"room_id\", body[\"id\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Fetch a room",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms/{{room_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms",
                    "{{room_id}}"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`getRoom`\n\nScope: `rooms:read`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/server/rooms/{{room_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "rooms",
                        "{{room_id}}"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n  \"tenant_id\": \"acct_fac91b282191cc02dd29912c8db43f1c\",\n  \"external_ref\": \"order-7781\",\n  \"created_by\": \"alice\",\n  \"status\": \"active\",\n  \"e2ee\": false,\n  \"created_at\": \"2026-01-15T09:30:03Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Erase a room — rows and blobs",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms/{{room_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms",
                    "{{room_id}}"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`deleteRoom`\n\nScope: `rooms:delete`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/server/rooms/{{room_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "rooms",
                        "{{room_id}}"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"deleting\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Add or restore a member (409 once the room holds 5,000)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms",
                    "{{room_id}}",
                    "members"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"principal_id\": \"alice\",\n  \"role\": \"owner\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`addRoomMember`\n\nScope: `members:write`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "rooms",
                        "{{room_id}}",
                        "members"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"principal_id\": \"alice\",\n  \"role\": \"owner\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"tenant_id\": \"acct_fac91b282191cc02dd29912c8db43f1c\",\n  \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n  \"principal_id\": \"alice\",\n  \"role\": \"owner\",\n  \"joined_at\": \"2026-01-15T09:30:03Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Remove a member",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms",
                    "{{room_id}}",
                    "members",
                    "{{principal_id}}"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`removeRoomMember`\n\nScope: `members:write`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "rooms",
                        "{{room_id}}",
                        "members",
                        "{{principal_id}}"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"removed\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Silence the room's push for a member — 8h, 1w or always (members:write)",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}/mute",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms",
                    "{{room_id}}",
                    "members",
                    "{{principal_id}}",
                    "mute"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"duration\": \"8h\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`muteRoomMember`\n\nScope: `members:write`.\n\nPush only: the member still receives every event live and a call still rings. Durations are 8h, 1w or always; for always, muted_until is a date in the year 9999."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "PUT",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}/mute",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "rooms",
                        "{{room_id}}",
                        "members",
                        "{{principal_id}}",
                        "mute"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"duration\": \"8h\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"tenant_id\": \"acct_fac91b282191cc02dd29912c8db43f1c\",\n  \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n  \"principal_id\": \"bob\",\n  \"role\": \"member\",\n  \"joined_at\": \"2026-01-15T09:30:03Z\",\n  \"muted_until\": \"2026-01-15T17:30:03Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Unmute (idempotent)",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}/mute",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms",
                    "{{room_id}}",
                    "members",
                    "{{principal_id}}",
                    "mute"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`unmuteRoomMember`\n\nScope: `members:write`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}/mute",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "rooms",
                        "{{room_id}}",
                        "members",
                        "{{principal_id}}",
                        "mute"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"tenant_id\": \"acct_fac91b282191cc02dd29912c8db43f1c\",\n  \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n  \"principal_id\": \"bob\",\n  \"role\": \"member\",\n  \"joined_at\": \"2026-01-15T09:30:03Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Pin which simulcast layer of a publisher's track the member receives — low, medium, high or auto (members:write)",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}/preferences",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms",
                    "{{room_id}}",
                    "members",
                    "{{principal_id}}",
                    "preferences"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tracks\": [\n    {\n      \"publisher\": \"alice\",\n      \"track_id\": \"cam-alice\",\n      \"layer\": \"high\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`setMemberPreferences`\n\nScope: `members:write`.\n\nKeyed by the publisher's principal and the publisher's own track id — what a chatbox.msid-principal socket reads off the msid. The whole list is replaced on each PUT; an auto entry clears that track, [] clears all. Applied within about a second to every connection the member has; a member not in the call keeps it for a 30 s grace."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "PUT",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}/preferences",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "rooms",
                        "{{room_id}}",
                        "members",
                        "{{principal_id}}",
                        "preferences"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"tracks\": [\n    {\n      \"publisher\": \"alice\",\n      \"track_id\": \"cam-alice\",\n      \"layer\": \"high\"\n    }\n  ]\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"principal_id\": \"bob\",\n  \"in_call\": false,\n  \"tracks\": [\n    {\n      \"publisher\": \"alice\",\n      \"track_id\": \"cam-alice\",\n      \"layer\": \"high\"\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "What is pinned for the member, and whether they are in the call (rooms:read)",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}/preferences",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms",
                    "{{room_id}}",
                    "members",
                    "{{principal_id}}",
                    "preferences"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`getMemberPreferences`\n\nScope: `rooms:read`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}/preferences",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "rooms",
                        "{{room_id}}",
                        "members",
                        "{{principal_id}}",
                        "preferences"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"principal_id\": \"bob\",\n  \"in_call\": false,\n  \"tracks\": [\n    {\n      \"publisher\": \"alice\",\n      \"track_id\": \"cam-alice\",\n      \"layer\": \"high\"\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Restrict what the member may publish and receive, which peers it sees, how many devices it may bring, and its chat and attachment rights — revisioned, live within about a second (members:write)",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}/rtc-policy",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms",
                    "{{room_id}}",
                    "members",
                    "{{principal_id}}",
                    "rtc-policy"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"revision\": 3,\n  \"publish\": {\n    \"audio\": false,\n    \"video\": true,\n    \"max_audio_tracks\": 0,\n    \"max_video_tracks\": 1\n  },\n  \"subscribe\": {\n    \"mode\": \"allowlist\",\n    \"publishers\": [\n      \"host\"\n    ]\n  },\n  \"chat\": {\n    \"send\": false,\n    \"history\": false\n  },\n  \"attachments\": {\n    \"upload\": false,\n    \"download\": false\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`setMemberRtcPolicy`\n\nScope: `members:write`.\n\nalice is not in a call during this run, so publish.applied_revision is null and applied is false: there is no leg to apply the publish rules to yet. subscribe is stored and reported, enforced from Phase 2 (enforcement.subscribe.supported: false)."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "PUT",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}/rtc-policy",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "rooms",
                        "{{room_id}}",
                        "members",
                        "{{principal_id}}",
                        "rtc-policy"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"revision\": 3,\n  \"publish\": {\n    \"audio\": false,\n    \"video\": true,\n    \"max_audio_tracks\": 0,\n    \"max_video_tracks\": 1\n  },\n  \"subscribe\": {\n    \"mode\": \"allowlist\",\n    \"publishers\": [\n      \"host\"\n    ]\n  },\n  \"chat\": {\n    \"send\": false,\n    \"history\": false\n  },\n  \"attachments\": {\n    \"upload\": false,\n    \"download\": false\n  }\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"principal_id\": \"alice\",\n  \"stored_revision\": 3,\n  \"applied_revision\": null,\n  \"applied\": false,\n  \"applied_at\": null,\n  \"in_call\": false,\n  \"active_legs\": 0,\n  \"applied_legs\": 0,\n  \"subscribe_enforced\": true,\n  \"enforcement\": {\n    \"publish\": {\n      \"supported\": true,\n      \"requested\": true,\n      \"applied_revision\": null\n    },\n    \"capabilities\": {\n      \"supported\": true,\n      \"requested\": true,\n      \"applied_revision\": 3\n    },\n    \"subscribe\": {\n      \"supported\": true,\n      \"requested\": true,\n      \"applied_revision\": null\n    },\n    \"roster\": {\n      \"supported\": true,\n      \"requested\": false,\n      \"applied_revision\": null\n    },\n    \"devices\": {\n      \"supported\": true,\n      \"requested\": false,\n      \"applied_revision\": null\n    }\n  },\n  \"policy\": {\n    \"revision\": 3,\n    \"publish\": {\n      \"audio\": false,\n      \"video\": true,\n      \"max_audio_tracks\": 0,\n      \"max_video_tracks\": 1\n    },\n    \"subscribe\": {\n      \"mode\": \"allowlist\",\n      \"publishers\": [\n        \"host\"\n      ]\n    },\n    \"chat\": {\n      \"send\": false,\n      \"history\": false\n    },\n    \"attachments\": {\n      \"upload\": false,\n      \"download\": false\n    }\n  }\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "The member's stored policy and how far it has reached their live connections, per component (rooms:read)",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}/rtc-policy",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms",
                    "{{room_id}}",
                    "members",
                    "{{principal_id}}",
                    "rtc-policy"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`getMemberRtcPolicy`\n\nScope: `rooms:read`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}/rtc-policy",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "rooms",
                        "{{room_id}}",
                        "members",
                        "{{principal_id}}",
                        "rtc-policy"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"principal_id\": \"alice\",\n  \"stored_revision\": 3,\n  \"applied_revision\": null,\n  \"applied\": false,\n  \"applied_at\": null,\n  \"in_call\": false,\n  \"active_legs\": 0,\n  \"applied_legs\": 0,\n  \"subscribe_enforced\": true,\n  \"enforcement\": {\n    \"publish\": {\n      \"supported\": true,\n      \"requested\": true,\n      \"applied_revision\": null\n    },\n    \"capabilities\": {\n      \"supported\": true,\n      \"requested\": true,\n      \"applied_revision\": 3\n    },\n    \"subscribe\": {\n      \"supported\": true,\n      \"requested\": true,\n      \"applied_revision\": null\n    },\n    \"roster\": {\n      \"supported\": true,\n      \"requested\": false,\n      \"applied_revision\": null\n    },\n    \"devices\": {\n      \"supported\": true,\n      \"requested\": false,\n      \"applied_revision\": null\n    }\n  },\n  \"policy\": {\n    \"revision\": 3,\n    \"publish\": {\n      \"audio\": false,\n      \"video\": true,\n      \"max_audio_tracks\": 0,\n      \"max_video_tracks\": 1\n    },\n    \"subscribe\": {\n      \"mode\": \"allowlist\",\n      \"publishers\": [\n        \"host\"\n      ]\n    },\n    \"chat\": {\n      \"send\": false,\n      \"history\": false\n    },\n    \"attachments\": {\n      \"upload\": false,\n      \"download\": false\n    }\n  }\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Back to role-only rights — a write in the same revision sequence, ?revision= required (members:write)",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}/rtc-policy?revision=4",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms",
                    "{{room_id}}",
                    "members",
                    "{{principal_id}}",
                    "rtc-policy"
                  ],
                  "query": [
                    {
                      "key": "revision",
                      "value": "4"
                    }
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`deleteMemberRtcPolicy`\n\nScope: `members:write`.\n\nA deletion is a write in the same revision sequence: ?revision= must exceed the stored revision and stays on the row as a tombstone, so the next PUT must be higher than 4."
              },
              "response": [
                {
                  "name": "Recorded example (204)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/members/{{principal_id}}/rtc-policy?revision=4",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "rooms",
                        "{{room_id}}",
                        "members",
                        "{{principal_id}}",
                        "rtc-policy"
                      ],
                      "query": [
                        {
                          "key": "revision",
                          "value": "4"
                        }
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 204,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "text/plain"
                    }
                  ],
                  "body": "",
                  "_postman_previewlanguage": "text"
                }
              ]
            },
            {
              "name": "Who receives whose media in the call right now, with the simulcast layer (rooms:read)",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/rtc/forwarding",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms",
                    "{{room_id}}",
                    "rtc",
                    "forwarding"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`getRoomForwarding`\n\nScope: `rooms:read`.\n\nNobody is in the call during this run, so in_call is false and publishers is empty. In a live call each publishing connection lists its tracks and every connection receiving each one, with the simulcast layer."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/rtc/forwarding",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "rooms",
                        "{{room_id}}",
                        "rtc",
                        "forwarding"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n  \"in_call\": false,\n  \"publishers\": []\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        },
        {
          "name": "Tokens, principals, messages",
          "item": [
            {
              "name": "Mint a room-scoped client token",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/server/session-tokens",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "session-tokens"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"room_id\": \"{{room_id}}\",\n  \"principal_id\": \"alice\",\n  \"role\": \"owner\",\n  \"ttl_seconds\": 3600,\n  \"device_id\": \"dev-alice\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`createSessionToken`\n\nScope: `tokens:mint`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/server/session-tokens",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "session-tokens"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n  \"principal_id\": \"alice\",\n  \"role\": \"owner\",\n  \"ttl_seconds\": 3600,\n  \"device_id\": \"dev-alice\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"access_token\": \"eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCIsImtpZCI6ImEwM2I1NjQ4MjM3YjlmZWIifQ.eyJpc3MiOiJjaGF0Ym94LWJhY2tlbmQiLCJhdWQiOiJjaGF0Ym94LXJlYWx0aW1lIiwic3ViIjoiYWxpY2UiLCJ0aWQiOiJhY2N0X2ZhYzkxYjI4MjE5MWNjMDJkZDI5OTEyYzhkYjQzZjFjIiwicmlkIjoiMjU5NjRmMTItOWFlOS00MzU2LTgwZTgtNjliYzVmNzQ5YmQxIiwicm9sZSI6Im93bmVyIiwicGVybWlzc2lvbnMiOlsiY2hhdDpzZW5kIiwiY2hhdDpoaXN0b3J5IiwiYXR0YWNobWVudDp1cGxvYWQiLCJhdHRhY2htZW50OmRvd25sb2FkIiwicnRjOnB1Ymxpc2giLCJydGM6c3Vic2NyaWJlIl0sImRpZCI6ImRldi1hbGljZSIsImp0aSI6ImU5MDg1MDAyLTFkMTAtNGE4My1hZGQyLTcxZmIyM2UxODIwMCIsImlhdCI6MTc5MjMyNDY2NywibmJmIjoxNzkyMzI0NjY3LCJleHAiOjE3OTIzMjgyNjd9.SIGNATURE_REMOVED\",\n  \"expires_at\": \"2026-01-15T10:30:04Z\",\n  \"rtc_websocket_url\": \"wss://api.ollacore.com/v1/rtc/ws\",\n  \"chat_websocket_url\": \"wss://api.ollacore.com/v1/chat/ws\",\n  \"ice_servers\": [\n    {\n      \"urls\": [\n        \"stun:api.ollacore.com:3478\"\n      ]\n    },\n    {\n      \"urls\": [\n        \"turn:api.ollacore.com:3478\",\n        \"turns:api.ollacore.com:5349\"\n      ],\n      \"username\": \"1789064267:alice\",\n      \"credential\": \"EXAMPLE_TURN_CREDENTIAL=\"\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"access_token\"] !== undefined) pm.collectionVariables.set(\"access_token\", body[\"access_token\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Register a principal (bot/service identity)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/server/principals",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "principals"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"principal_id\": \"support-bot\",\n  \"kind\": \"agent\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`registerPrincipal`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/server/principals",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "principals"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"principal_id\": \"support-bot\",\n  \"kind\": \"agent\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"principal_id\": \"support-bot\",\n  \"kind\": \"agent\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "GDPR erase a principal",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/server/principals/{{principal_id}}/erase",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "principals",
                    "{{principal_id}}",
                    "erase"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`erasePrincipal`\n\nScope: `data:erase`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/server/principals/{{principal_id}}/erase",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "principals",
                        "{{principal_id}}",
                        "erase"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"erasing\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Send as a principal (server-side)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/messages",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "rooms",
                    "{{room_id}}",
                    "messages"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"sender_principal_id\": \"support-bot\",\n  \"client_message_id\": \"srv-8c1f2a\",\n  \"kind\": \"text\",\n  \"body\": {\n    \"text\": \"Your order #7781 has shipped.\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`sendMessage`\n\nScope: `messages:write`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/server/rooms/{{room_id}}/messages",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "rooms",
                        "{{room_id}}",
                        "messages"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"sender_principal_id\": \"support-bot\",\n  \"client_message_id\": \"srv-8c1f2a\",\n  \"kind\": \"text\",\n  \"body\": {\n    \"text\": \"Your order #7781 has shipped.\"\n  }\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"id\": \"e0b25ea0-1320-4862-af8d-bc28a2547b27\",\n  \"event_seq\": 5200,\n  \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n  \"sender_id\": \"support-bot\",\n  \"client_message_id\": \"srv-8c1f2a\",\n  \"kind\": \"text\",\n  \"body\": {\n    \"text\": \"Your order #7781 has shipped.\"\n  },\n  \"created_at\": \"2026-01-15T09:30:04Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"id\"] !== undefined) pm.collectionVariables.set(\"message_id\", body[\"id\"]);"
                    ]
                  }
                }
              ]
            }
          ]
        },
        {
          "name": "Usage & webhooks",
          "item": [
            {
              "name": "Metered usage for a window",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/server/usage",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "usage"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`getUsage`\n\nScope: `usage:read`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/server/usage",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "usage"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"from\": \"2025-12-16T09:30:48Z\",\n  \"to\": \"2026-01-15T09:30:48Z\",\n  \"usage\": [\n    {\n      \"metric\": \"attachment.bytes\",\n      \"total\": 160\n    },\n    {\n      \"metric\": \"message.sent\",\n      \"total\": 6\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Create an endpoint subscription",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/server/webhooks",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "webhooks"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"url\": \"https://hooks.example.com/health\",\n  \"event_types\": [\n    \"message.created\",\n    \"call.started\",\n    \"member.added\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`createWebhook`\n\nScope: `webhooks:manage`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/server/webhooks",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "webhooks"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"url\": \"https://hooks.example.com/health\",\n  \"event_types\": [\n    \"message.created\",\n    \"call.started\",\n    \"member.added\"\n  ]\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"id\": \"whe_2416dc932158009799ae0c3d084c29c0\",\n  \"url\": \"https://hooks.example.com/health\",\n  \"event_types\": [\n    \"message.created\",\n    \"call.started\",\n    \"member.added\"\n  ],\n  \"secret\": \"whsec_EXAMPLE_NOT_A_REAL_SECRET\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"id\"] !== undefined) pm.collectionVariables.set(\"webhook_id\", body[\"id\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "List endpoints",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/server/webhooks",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "webhooks"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`listWebhooks`\n\nScope: `webhooks:manage`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/server/webhooks",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "webhooks"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "[\n  {\n    \"id\": \"whe_2416dc932158009799ae0c3d084c29c0\",\n    \"url\": \"https://hooks.example.com/health\",\n    \"event_types\": [\n      \"message.created\",\n      \"call.started\",\n      \"member.added\"\n    ],\n    \"enabled\": true,\n    \"created_at\": \"2026-01-15T09:30:05Z\"\n  }\n]",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Delete an endpoint",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/server/webhooks/{{webhook_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "webhooks",
                    "{{webhook_id}}"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`deleteWebhook`\n\nScope: `webhooks:manage`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/server/webhooks/{{webhook_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "webhooks",
                        "{{webhook_id}}"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"disabled\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Delivery audit log",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/server/webhooks/{{webhook_id}}/deliveries",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "webhooks",
                    "{{webhook_id}}",
                    "deliveries"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`listWebhookDeliveries`\n\nScope: `webhooks:manage`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/server/webhooks/{{webhook_id}}/deliveries",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "webhooks",
                        "{{webhook_id}}",
                        "deliveries"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "[\n  {\n    \"id\": \"whd_7d282f27fea842a9ab25a16bc1b2b72a\",\n    \"event_id\": \"evt_16dac5b07cf72653ebcc599c\",\n    \"event_type\": \"call.started\",\n    \"status\": \"delivered\",\n    \"attempt\": 0,\n    \"last_status_code\": 200,\n    \"last_error\": null,\n    \"created_at\": \"2026-01-15T09:30:33Z\",\n    \"updated_at\": \"2026-01-15T09:30:34Z\"\n  },\n  {\n    \"id\": \"whd_7eebb7ce833d4b1f8f0d05eb10f7e035\",\n    \"event_id\": \"evt_4656e090af7f80263ee36867\",\n    \"event_type\": \"message.created\",\n    \"status\": \"delivered\",\n    \"attempt\": 0,\n    \"last_status_code\": 200,\n    \"last_error\": null,\n    \"created_at\": \"2026-01-15T09:30:14Z\",\n    \"updated_at\": \"2026-01-15T09:30:15Z\"\n  },\n  {\n    \"id\": \"whd_91cf0dc2f85f4ec1a4a9718d04c5785d\",\n    \"event_id\": \"evt_113ded9a5ab832955cab6c67\",\n    \"event_type\": \"message.created\",\n    \"status\": \"delivered\",\n    \"attempt\": 0,\n    \"last_status_code\": 200,\n    \"last_error\": null,\n    \"created_at\": \"2026-01-15T09:30:08Z\",\n    \"updated_at\": \"2026-01-15T09:30:08Z\"\n  },\n  {\n    \"id\": \"whd_e7dff7fae5034b78bdc3287f48a5589d\",\n    \"event_id\": \"evt_1a16ba018c483822d15a987b\",\n    \"event_type\": \"message.created\",\n    \"status\": \"delivered\",\n    \"attempt\": 0,\n    \"last_status_code\": 200,\n    \"last_error\": null,\n    \"created_at\": \"2026-01-15T09:30:07Z\",\n    \"updated_at\": \"2026-01-15T09:30:08Z\"\n  },\n  {\n    \"id\": \"whd_2a6d536f8bd34ae6b1a0995159d87565\",\n    \"event_id\": \"evt_2f695376505edc586f7fffd9\",\n    \"event_type\": \"message.created\",\n    \"status\": \"delivered\",\n    \"attempt\": 0,\n    \"last_status_code\": 200,\n    \"last_error\": null,\n    \"created_at\": \"2026-01-15T09:30:06Z\",\n    \"updated_at\": \"2026-01-15T09:30:07Z\"\n  }\n]",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Replay a delivery",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/server/webhooks/{{webhook_id}}/deliveries/{{delivery_id}}/replay",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "server",
                    "webhooks",
                    "{{webhook_id}}",
                    "deliveries",
                    "{{delivery_id}}",
                    "replay"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{ak_key}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`replayWebhookDelivery`\n\nScope: `webhooks:manage`."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/server/webhooks/{{webhook_id}}/deliveries/{{delivery_id}}/replay",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "server",
                        "webhooks",
                        "{{webhook_id}}",
                        "deliveries",
                        "{{delivery_id}}",
                        "replay"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{ak_key}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"replayed\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "Client API",
      "description": "What your app calls directly. Every path is authorised against the token’s room and principal.\n\nCredential: room-scoped session token. Reference: https://www.ollacore.com/docs/api/client/\n\nOne request per operation, in reference order. Not meant to run top to bottom: some requests delete what others create. Use the Quickstart folder for a runnable sequence.",
      "item": [
        {
          "name": "Messages",
          "item": [
            {
              "name": "Send",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "messages"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"client_message_id\": \"c-9f3b7e21\",\n  \"kind\": \"text\",\n  \"body\": {\n    \"text\": \"Hey — are we still on for 3pm?\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`postMessage`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "messages"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"client_message_id\": \"c-9f3b7e21\",\n  \"kind\": \"text\",\n  \"body\": {\n    \"text\": \"Hey — are we still on for 3pm?\"\n  }\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"duplicate\": false,\n  \"message\": {\n    \"body\": {\n      \"text\": \"Hey — are we still on for 3pm?\"\n    },\n    \"client_message_id\": \"c-9f3b7e21\",\n    \"created_at\": \"2026-01-15T09:30:06Z\",\n    \"event_seq\": 5202,\n    \"id\": \"e8b186e4-845a-41dc-bb28-102dd8d0cb8d\",\n    \"kind\": \"text\",\n    \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n    \"sender_id\": \"alice\"\n  }\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"message\"][\"id\"] !== undefined) pm.collectionVariables.set(\"message_id\", body[\"message\"][\"id\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "History (after_seq / before_seq / limit)",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "messages"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`listMessages`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages?limit=20",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "messages"
                      ],
                      "query": [
                        {
                          "key": "limit",
                          "value": "20"
                        }
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"messages\": [\n    {\n      \"id\": \"e0b25ea0-1320-4862-af8d-bc28a2547b27\",\n      \"event_seq\": 5200,\n      \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n      \"sender_id\": \"support-bot\",\n      \"client_message_id\": \"srv-8c1f2a\",\n      \"kind\": \"text\",\n      \"body\": {\n        \"text\": \"Your order #7781 has shipped.\"\n      },\n      \"created_at\": \"2026-01-15T09:30:04Z\"\n    },\n    {\n      \"id\": \"e8b186e4-845a-41dc-bb28-102dd8d0cb8d\",\n      \"event_seq\": 5202,\n      \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n      \"sender_id\": \"alice\",\n      \"client_message_id\": \"c-9f3b7e21\",\n      \"kind\": \"text\",\n      \"body\": {\n        \"text\": \"Hey — are we still on for 3pm?\"\n      },\n      \"created_at\": \"2026-01-15T09:30:06Z\"\n    }\n  ],\n  \"latest_seq\": 5202\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Edit (author only)",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages/{{message_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "messages",
                    "{{message_id}}"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"body\": {\n    \"text\": \"Hey — are we still on for 3:30pm?\"\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`editMessage`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "PATCH",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages/{{message_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "messages",
                        "{{message_id}}"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"body\": {\n    \"text\": \"Hey — are we still on for 3:30pm?\"\n  }\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"message\": {\n    \"body\": {\n      \"text\": \"Hey — are we still on for 3:30pm?\"\n    },\n    \"client_message_id\": \"c-9f3b7e21\",\n    \"created_at\": \"2026-01-15T09:30:06Z\",\n    \"edited_at\": \"2026-01-15T09:30:06Z\",\n    \"event_seq\": 5202,\n    \"id\": \"e8b186e4-845a-41dc-bb28-102dd8d0cb8d\",\n    \"kind\": \"text\",\n    \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n    \"sender_id\": \"alice\"\n  }\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Soft delete",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages/{{message_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "messages",
                    "{{message_id}}"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`deleteMessage`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages/{{message_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "messages",
                        "{{message_id}}"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"message\": {\n    \"body\": null,\n    \"client_message_id\": \"c-doomed\",\n    \"created_at\": \"2026-01-15T09:30:08Z\",\n    \"deleted_at\": \"2026-01-15T09:30:08Z\",\n    \"event_seq\": 5204,\n    \"id\": \"883e28db-e669-4fba-9a60-e071d1b79b8d\",\n    \"kind\": \"deleted\",\n    \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n    \"sender_id\": \"alice\"\n  }\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Full-text search within the room",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages/search?q=invoice&limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "messages",
                    "search"
                  ],
                  "query": [
                    {
                      "key": "q",
                      "value": "invoice"
                    },
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`searchMessages`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages/search?q=invoice&limit=20",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "messages",
                        "search"
                      ],
                      "query": [
                        {
                          "key": "q",
                          "value": "invoice"
                        },
                        {
                          "key": "limit",
                          "value": "20"
                        }
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"messages\": [\n    {\n      \"id\": \"5c6e7377-ca7d-4567-9beb-dafb87d2a4d9\",\n      \"event_seq\": 5203,\n      \"room_id\": \"25964f12-9ae9-4356-80e8-69bc5f749bd1\",\n      \"sender_id\": \"bob\",\n      \"client_message_id\": \"c-searchable\",\n      \"kind\": \"text\",\n      \"body\": {\n        \"text\": \"The quarterly invoice is attached.\"\n      },\n      \"created_at\": \"2026-01-15T09:30:07Z\"\n    }\n  ],\n  \"latest_seq\": 5203\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Add a reaction",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages/{{message_id}}/reactions",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "messages",
                    "{{message_id}}",
                    "reactions"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"emoji\": \"👍\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`addReaction`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages/{{message_id}}/reactions",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "messages",
                        "{{message_id}}",
                        "reactions"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"emoji\": \"👍\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"changed\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Remove a reaction",
              "request": {
                "method": "DELETE",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages/{{message_id}}/reactions",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "messages",
                    "{{message_id}}",
                    "reactions"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"emoji\": \"👍\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`removeReaction`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages/{{message_id}}/reactions",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "messages",
                        "{{message_id}}",
                        "reactions"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"emoji\": \"👍\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"changed\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        },
        {
          "name": "Receipts & presence",
          "item": [
            {
              "name": "Delivery receipt",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages/{{message_id}}/delivered",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "messages",
                    "{{message_id}}",
                    "delivered"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`receiptDelivered`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages/{{message_id}}/delivered",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "messages",
                        "{{message_id}}",
                        "delivered"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"advanced\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Read receipt (advances cursor)",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages/{{message_id}}/read",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "messages",
                    "{{message_id}}",
                    "read"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`receiptRead`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/messages/{{message_id}}/read",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "messages",
                        "{{message_id}}",
                        "read"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"advanced\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Unread count and cursors",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/unread",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "unread"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`unread`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/unread",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "unread"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"unread_count\": 0,\n  \"last_read_seq\": 5202,\n  \"latest_seq\": 5202\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Room participants",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/participants",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "participants"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`participants`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/participants",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "participants"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"participants\": [\n    {\n      \"principal_id\": \"alice\",\n      \"role\": \"owner\",\n      \"online\": false\n    },\n    {\n      \"principal_id\": \"bob\",\n      \"role\": \"member\",\n      \"online\": false\n    },\n    {\n      \"principal_id\": \"carol\",\n      \"role\": \"member\",\n      \"online\": false\n    },\n    {\n      \"principal_id\": \"support-bot\",\n      \"role\": \"member\",\n      \"online\": false\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        },
        {
          "name": "Attachments",
          "item": [
            {
              "name": "Begin an upload",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/attachments/init",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "attachments",
                    "init"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"original_name\": \"invoice-q3.jpg\",\n  \"declared_mime\": \"image/jpeg\",\n  \"byte_size\": 160\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`initAttachment`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/attachments/init",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "attachments",
                        "init"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"original_name\": \"invoice-q3.jpg\",\n  \"declared_mime\": \"image/jpeg\",\n  \"byte_size\": 160\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"attachment_id\": \"ee86f695-3f58-48e2-9ca8-66ee9651ee3e\",\n  \"upload_url\": \"https://files.example.com/objects/…?X-Amz-Signature=…\",\n  \"upload_expires_at\": \"2026-01-15T09:35:10Z\",\n  \"required_headers\": [\n    [\n      \"content-type\",\n      \"application/octet-stream\"\n    ]\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"attachment_id\"] !== undefined) pm.collectionVariables.set(\"attachment_id\", body[\"attachment_id\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Finish and verify",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/attachments/{{attachment_id}}/complete",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "attachments",
                    "{{attachment_id}}",
                    "complete"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`completeAttachment`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/attachments/{{attachment_id}}/complete",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "attachments",
                        "{{attachment_id}}",
                        "complete"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"attachment_id\": \"ee86f695-3f58-48e2-9ca8-66ee9651ee3e\",\n  \"status\": \"uploaded\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Begin a multipart upload",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/attachments/init-multipart",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "attachments",
                    "init-multipart"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"original_name\": \"standup.mp4\",\n  \"declared_mime\": \"video/mp4\",\n  \"byte_size\": 5243904,\n  \"part_size\": 5242880\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`initMultipart`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/attachments/init-multipart",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "attachments",
                        "init-multipart"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"original_name\": \"standup.mp4\",\n  \"declared_mime\": \"video/mp4\",\n  \"byte_size\": 5243904,\n  \"part_size\": 5242880\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"attachment_id\": \"2b575b88-88bb-40d0-b616-57536b782806\",\n  \"upload_id\": \"ZTY5ODdmMjMtMGI1OS00Y2QxLTk5MzYtNzllZjk2YjdiZDY5LmZkZGEzZGE4LTJmYjUtNDJjZS1iY2E2LTk4ZDhiZjM3NGJkOXgxNzkyMzI0Njc1MTk1NzY5NDk1\",\n  \"part_size\": 5242880,\n  \"part_urls\": [\n    \"https://files.example.com/objects/…?X-Amz-Signature=…\",\n    \"https://files.example.com/objects/…?X-Amz-Signature=…\"\n  ],\n  \"expires_at\": \"2026-01-15T09:35:12Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"attachment_id\"] !== undefined) pm.collectionVariables.set(\"attachment_id\", body[\"attachment_id\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Finish multipart",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/attachments/{{attachment_id}}/complete-multipart",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "attachments",
                    "{{attachment_id}}",
                    "complete-multipart"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"parts\": [\n    {\n      \"part_number\": 1,\n      \"etag\": \"b8fc857a25e7958868c2f003d5e0952d\"\n    },\n    {\n      \"part_number\": 2,\n      \"etag\": \"e9f8000caffbce369d7fee9c07d43509\"\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`completeMultipart`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/attachments/{{attachment_id}}/complete-multipart",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "attachments",
                        "{{attachment_id}}",
                        "complete-multipart"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"parts\": [\n    {\n      \"part_number\": 1,\n      \"etag\": \"b8fc857a25e7958868c2f003d5e0952d\"\n    },\n    {\n      \"part_number\": 2,\n      \"etag\": \"e9f8000caffbce369d7fee9c07d43509\"\n    }\n  ]\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"attachment_id\": \"2b575b88-88bb-40d0-b616-57536b782806\",\n  \"status\": \"uploaded\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Presigned download",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/attachments/{{attachment_id}}/download",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "attachments",
                    "{{attachment_id}}",
                    "download"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`downloadAttachment`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/attachments/{{attachment_id}}/download",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "attachments",
                        "{{attachment_id}}",
                        "download"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"download_url\": \"https://files.example.com/objects/…?X-Amz-Signature=…\",\n  \"expires_at\": \"2026-01-15T09:35:12Z\",\n  \"mime\": \"image/jpeg\",\n  \"original_name\": \"invoice-q3.jpg\",\n  \"thumbnail_url\": \"https://files.example.com/objects/…?X-Amz-Signature=…\",\n  \"disposition\": \"inline\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        },
        {
          "name": "Push",
          "item": [
            {
              "name": "Register a Web Push subscription",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/push/subscriptions",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "push",
                    "subscriptions"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"endpoint\": \"https://fcm.googleapis.com/fcm/send/EXAMPLE\",\n  \"keys\": {\n    \"p256dh\": \"<redacted>\",\n    \"auth\": \"c2VjcmV0MTIzNDU2Nzg\"\n  },\n  \"user_agent\": \"Mozilla/5.0 (Android 14; Pixel 8)\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`pushSubscribe`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/push/subscriptions",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "push",
                        "subscriptions"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"endpoint\": \"https://fcm.googleapis.com/fcm/send/EXAMPLE\",\n  \"keys\": {\n    \"p256dh\": \"<redacted>\",\n    \"auth\": \"c2VjcmV0MTIzNDU2Nzg\"\n  },\n  \"user_agent\": \"Mozilla/5.0 (Android 14; Pixel 8)\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"subscribed\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Unregister one",
              "request": {
                "method": "DELETE",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/push/subscriptions",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "push",
                    "subscriptions"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"endpoint\": \"https://fcm.googleapis.com/fcm/send/EXAMPLE\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`pushUnsubscribe`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/push/subscriptions",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "push",
                        "subscriptions"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"endpoint\": \"https://fcm.googleapis.com/fcm/send/EXAMPLE\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"removed\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "VAPID public key",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/push/vapid-public-key",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "push",
                    "vapid-public-key"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`vapidPublicKey`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/push/vapid-public-key",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "push",
                        "vapid-public-key"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"vapid_public_key\": \"BOCW_h9I_7rKsBL9E6EXl2eENH5vPkbuYPcIR9AVhUDwFJipZ4vC5RMAUqiKWSlVEhK3T2Zyv0DnJGXC1i0cNoE\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        },
        {
          "name": "End-to-end encryption",
          "item": [
            {
              "name": "Publish device + one-time keys",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/e2ee/keys/upload",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "e2ee",
                    "keys",
                    "upload"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"device_keys\": {\n    \"user_id\": \"alice\",\n    \"device_id\": \"dev-alice\",\n    \"algorithms\": [\n      \"m.olm.v1.curve25519-aes-sha2\",\n      \"m.megolm.v1.aes-sha2\"\n    ],\n    \"keys\": {\n      \"curve25519:dev-alice\": \"JGDn8Xz3…\",\n      \"ed25519:dev-alice\": \"lEuiSJHm…\"\n    }\n  },\n  \"one_time_keys\": {\n    \"signed_curve25519:AAAAAQ\": {\n      \"key\": \"zKbLg+NrIjpn…\"\n    },\n    \"signed_curve25519:AAAAAg\": {\n      \"key\": \"mYWt2yTv8p…\"\n    },\n    \"signed_curve25519:AAAAAw\": {\n      \"key\": \"qR7dLm3nXk…\"\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`keysUpload`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/e2ee/keys/upload",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "e2ee",
                        "keys",
                        "upload"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"device_keys\": {\n    \"user_id\": \"alice\",\n    \"device_id\": \"dev-alice\",\n    \"algorithms\": [\n      \"m.olm.v1.curve25519-aes-sha2\",\n      \"m.megolm.v1.aes-sha2\"\n    ],\n    \"keys\": {\n      \"curve25519:dev-alice\": \"JGDn8Xz3…\",\n      \"ed25519:dev-alice\": \"lEuiSJHm…\"\n    }\n  },\n  \"one_time_keys\": {\n    \"signed_curve25519:AAAAAQ\": {\n      \"key\": \"zKbLg+NrIjpn…\"\n    },\n    \"signed_curve25519:AAAAAg\": {\n      \"key\": \"mYWt2yTv8p…\"\n    },\n    \"signed_curve25519:AAAAAw\": {\n      \"key\": \"qR7dLm3nXk…\"\n    }\n  }\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"one_time_key_counts\": {\n    \"signed_curve25519\": 3\n  }\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Query devices for principals",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/e2ee/keys/query",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "e2ee",
                    "keys",
                    "query"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"device_keys\": {\n    \"alice\": {},\n    \"bob\": {}\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`keysQuery`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/e2ee/keys/query",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "e2ee",
                        "keys",
                        "query"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"device_keys\": {\n    \"alice\": {},\n    \"bob\": {}\n  }\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"device_keys\": {\n    \"alice\": {\n      \"dev-alice\": {\n        \"algorithms\": [\n          \"m.olm.v1.curve25519-aes-sha2\",\n          \"m.megolm.v1.aes-sha2\"\n        ],\n        \"device_id\": \"dev-alice\",\n        \"keys\": {\n          \"curve25519:dev-alice\": \"JGDn8Xz3…\",\n          \"ed25519:dev-alice\": \"lEuiSJHm…\"\n        },\n        \"user_id\": \"alice\"\n      }\n    },\n    \"bob\": {\n      \"dev-bob\": {\n        \"algorithms\": [\n          \"m.olm.v1.curve25519-aes-sha2\"\n        ],\n        \"device_id\": \"dev-bob\",\n        \"keys\": {\n          \"curve25519:dev-bob\": \"aBcD…\"\n        },\n        \"user_id\": \"bob\"\n      }\n    }\n  }\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Claim a one-time key (atomic)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/e2ee/keys/claim",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "e2ee",
                    "keys",
                    "claim"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"one_time_keys\": {\n    \"bob\": {\n      \"dev-bob\": \"signed_curve25519\"\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`keysClaim`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/e2ee/keys/claim",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "e2ee",
                        "keys",
                        "claim"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"one_time_keys\": {\n    \"bob\": {\n      \"dev-bob\": \"signed_curve25519\"\n    }\n  }\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"one_time_keys\": {\n    \"bob\": {\n      \"dev-bob\": {\n        \"signed_curve25519:BBBBAQ\": {\n          \"key\": \"nnn…\"\n        }\n      }\n    }\n  }\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Send a to-device message",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/e2ee/todevice",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "e2ee",
                    "todevice"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"event_type\": \"m.room_key_request\",\n  \"messages\": {\n    \"bob\": {\n      \"dev-bob\": {\n        \"action\": \"request\",\n        \"requesting_device_id\": \"dev-alice\"\n      }\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`todeviceSend`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/e2ee/todevice",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "e2ee",
                        "todevice"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"event_type\": \"m.room_key_request\",\n  \"messages\": {\n    \"bob\": {\n      \"dev-bob\": {\n        \"action\": \"request\",\n        \"requesting_device_id\": \"dev-alice\"\n      }\n    }\n  }\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"queued\": 1\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Fetch queued to-device messages",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/e2ee/todevice",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "e2ee",
                    "todevice"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`todeviceFetch`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/e2ee/todevice",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "e2ee",
                        "todevice"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"device_list_changes\": [\n    \"alice\",\n    \"bob\"\n  ],\n  \"device_list_watermark\": 157,\n  \"events\": [\n    {\n      \"content\": {\n        \"action\": \"request\",\n        \"requesting_device_id\": \"dev-alice\"\n      },\n      \"sender\": \"alice\",\n      \"type\": \"m.room_key_request\"\n    }\n  ],\n  \"next_token\": 130,\n  \"one_time_key_counts\": {\n    \"signed_curve25519\": 1\n  },\n  \"unused_fallback_key_algorithms\": []\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Upload MLS key packages",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/keypackages",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "keypackages"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"device_id\": \"dev-alice\",\n  \"packages\": [\n    \"AAECAwQFBgcICQoLDA0ODw==\",\n    \"EBESExQVFhcYGRobHB0eHw==\",\n    \"ICEiIyQlJicoKSorLC0uLw==\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`uploadKeyPackages`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/keypackages",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "keypackages"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"device_id\": \"dev-alice\",\n  \"packages\": [\n    \"AAECAwQFBgcICQoLDA0ODw==\",\n    \"EBESExQVFhcYGRobHB0eHw==\",\n    \"ICEiIyQlJicoKSorLC0uLw==\"\n  ]\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"stored\": 3\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Remaining key-package count",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/keypackages/count",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "keypackages",
                    "count"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`keyPackageCount`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/keypackages/count",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "keypackages",
                        "count"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"devices\": [\n    {\n      \"device_id\": \"dev-alice\",\n      \"last_resort\": false,\n      \"remaining\": 3\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Consume one key package",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/keypackages/{{principal_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "keypackages",
                    "{{principal_id}}"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`consumeKeyPackages`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/keypackages/{{principal_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "keypackages",
                        "{{principal_id}}"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"principal_id\": \"alice\",\n  \"packages\": [\n    {\n      \"device_id\": \"dev-alice\",\n      \"package\": \"AAECAwQFBgcICQoLDA0ODw==\",\n      \"last_resort\": false\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Publish the MLS GroupInfo + ratchet tree",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/mls/group-info",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "mls",
                    "group-info"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"epoch\": 3,\n  \"group_info\": \"AAECAwQFBgcICQoLDA0ODw==\",\n  \"ratchet_tree\": \"EBESExQVFhcYGRobHB0eHw==\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`putGroupInfo`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "PUT",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/mls/group-info",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "mls",
                        "group-info"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"epoch\": 3,\n  \"group_info\": \"AAECAwQFBgcICQoLDA0ODw==\",\n  \"ratchet_tree\": \"EBESExQVFhcYGRobHB0eHw==\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"epoch\": 3\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Latest GroupInfo + ratchet tree",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/mls/group-info",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "mls",
                    "group-info"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`getGroupInfo`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/mls/group-info",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "mls",
                        "group-info"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"epoch\": 3,\n  \"group_info\": \"AAECAwQFBgcICQoLDA0ODw==\",\n  \"ratchet_tree\": \"EBESExQVFhcYGRobHB0eHw==\",\n  \"updated_by\": \"alice\",\n  \"updated_at\": \"2026-01-15T09:30:53Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        },
        {
          "name": "Deprecated",
          "item": [
            {
              "name": "Sunset 2027-01-05 — camera feeds were withdrawn; always an empty list, with Deprecation and Sunset headers",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/rooms/{{room_id}}/recordings?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "rooms",
                    "{{room_id}}",
                    "recordings"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{access_token}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`listRecordings`\n\nDeprecated since 2026-10-03 (camera feeds were decommissioned): always an empty list, with Deprecation and Sunset headers on every response. May be removed on or after 2027-01-05."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/rooms/{{room_id}}/recordings?limit=20",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "rooms",
                        "{{room_id}}",
                        "recordings"
                      ],
                      "query": [
                        {
                          "key": "limit",
                          "value": "20"
                        }
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{access_token}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"segments\": []\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "Directory (end-user) API",
      "description": "The turnkey identity plane. Your client calls these directly.\n\nCredential: du_ directory session — or none for OTP. Reference: https://www.ollacore.com/docs/api/directory/\n\nOne request per operation, in reference order. Not meant to run top to bottom: some requests delete what others create. Use the Quickstart folder for a runnable sequence.",
      "item": [
        {
          "name": "Sign-in & profile",
          "item": [
            {
              "name": "Request a one-time code (unauthenticated)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/otp/request",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "otp",
                    "request"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"app_id\": \"{{app_id}}\",\n  \"phone\": \"{{phone}}\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "noauth"
                },
                "description": "`otpRequest`\n\nThe code is never returned here — it is delivered to your configured webhook or SMS provider."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/otp/request",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "otp",
                        "request"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"app_id\": \"da_3a0a2cfaabd34b7dbfb4ecd5033b0c5f\",\n  \"phone\": \"+15550001111\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "noauth"
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"dispatched\": true,\n  \"expires_at\": \"2026-01-15T09:35:42Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Verify and receive a du_ session",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/otp/verify",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "otp",
                    "verify"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"app_id\": \"{{app_id}}\",\n  \"phone\": \"{{phone}}\",\n  \"code\": \"{{otp_code}}\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "noauth"
                },
                "description": "`otpVerify`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/otp/verify",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "otp",
                        "verify"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"app_id\": \"da_3a0a2cfaabd34b7dbfb4ecd5033b0c5f\",\n  \"phone\": \"+15550001111\",\n  \"code\": \"481920\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "noauth"
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"session_token\": \"as_EXAMPLE_SESSION\",\n  \"user_id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\",\n  \"display_name\": \"Alice Nakamura\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"session_token\"] !== undefined) pm.collectionVariables.set(\"du_session\", body[\"session_token\"]);",
                      "if (body[\"user_id\"] !== undefined) pm.collectionVariables.set(\"user_id\", body[\"user_id\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Revoke this session (or every device)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/logout",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "logout"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"all_devices\": false\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`directoryLogout`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/logout",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "logout"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"all_devices\": false\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"logged_out\": true,\n  \"sessions_revoked\": 1\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Current user: id, phone, display_name, about, avatar_version",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/me",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "me"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`meGet`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/me",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "me"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\",\n  \"phone\": \"+15550001111\",\n  \"display_name\": \"Alice Nakamura\",\n  \"about\": \"Ships things. Slow to reply at weekends.\",\n  \"avatar_version\": null\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Update display name and/or about line",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/me",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "me"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"display_name\": \"Alice Nakamura\",\n  \"about\": \"Ships things. Slow to reply at weekends.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`mePatch`\n\nEither field or both; a field left out is untouched and an empty about clears it. Answers the whole profile."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "PATCH",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/me",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "me"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"display_name\": \"Alice Nakamura\",\n  \"about\": \"Ships things. Slow to reply at weekends.\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\",\n  \"phone\": \"+15550001111\",\n  \"display_name\": \"Alice Nakamura\",\n  \"about\": \"Ships things. Slow to reply at weekends.\",\n  \"avatar_version\": null\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Start a profile-photo upload (JPEG/PNG/WebP/GIF, ≤ 2 MiB)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/me/avatar/init",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "me",
                    "avatar",
                    "init"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"declared_mime\": \"image/jpeg\",\n  \"byte_size\": 160\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`meAvatarInit`\n\nImage types only (JPEG, PNG, WebP, GIF), at most 2 MiB; downscale on the device first. PUT the raw bytes to upload_url, then call complete."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/me/avatar/init",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "me",
                        "avatar",
                        "init"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"declared_mime\": \"image/jpeg\",\n  \"byte_size\": 160\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"expires_at\": \"2026-01-15T09:35:43Z\",\n  \"max_bytes\": 2097152,\n  \"upload_id\": \"3a7d0ead-8ffa-4194-b38e-2e5c0ce04738\",\n  \"upload_url\": \"https://files.example.com/objects/…?X-Amz-Signature=…\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Make the uploaded bytes your photo — verified before it answers",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/me/avatar/complete",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "me",
                    "avatar",
                    "complete"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"upload_id\": \"3a7d0ead-8ffa-4194-b38e-2e5c0ce04738\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`meAvatarComplete`\n\nSynchronous: the bytes are read back, sniffed, decoded and thumbnailed before this answers (415 if they are not an image). avatar_version is the value every list carries and the value to cache the picture by."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/me/avatar/complete",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "me",
                        "avatar",
                        "complete"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"upload_id\": \"3a7d0ead-8ffa-4194-b38e-2e5c0ce04738\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\",\n  \"phone\": \"+15550001111\",\n  \"display_name\": \"Alice Nakamura\",\n  \"about\": \"Ships things. Slow to reply at weekends.\",\n  \"avatar_version\": \"2026-01-15T09:30:44Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Remove your profile photo",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/me/avatar",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "me",
                    "avatar"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`meAvatarDelete`\n\nIdempotent: the photo and its thumbnail are deleted and avatar_version becomes null."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/me/avatar",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "me",
                        "avatar"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\",\n  \"phone\": \"+15550001111\",\n  \"display_name\": \"Alice Nakamura\",\n  \"about\": \"Ships things. Slow to reply at weekends.\",\n  \"avatar_version\": null\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "A user's photo: 302 to the bytes, ETag = avatar_version",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/users/{{user_id}}/avatar?size=thumb",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "users",
                    "{{user_id}}",
                    "avatar"
                  ],
                  "query": [
                    {
                      "key": "size",
                      "value": "thumb"
                    }
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`userAvatar`\n\nFollow Location for the bytes — a short-lived presigned URL, not shown here. ETag is the avatar_version the lists carry; send it as If-None-Match to get 304 instead of a redirect. Cache the bytes by version, never the redirect."
              },
              "response": [
                {
                  "name": "Recorded example (302)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/users/{{user_id}}/avatar?size=thumb",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "users",
                        "{{user_id}}",
                        "avatar"
                      ],
                      "query": [
                        {
                          "key": "size",
                          "value": "thumb"
                        }
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 302,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "text/plain"
                    }
                  ],
                  "body": "",
                  "_postman_previewlanguage": "text"
                }
              ]
            }
          ]
        },
        {
          "name": "Contacts & conversations",
          "item": [
            {
              "name": "Which phone numbers are registered (≤500)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/contacts/lookup",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "contacts",
                    "lookup"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"phones\": [\n    \"+15550002222\",\n    \"+15550009999\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`contactsLookup`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/contacts/lookup",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "contacts",
                        "lookup"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"phones\": [\n    \"+15550002222\",\n    \"+15550009999\"\n  ]\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"contacts\": [\n    {\n      \"about\": null,\n      \"avatar_version\": null,\n      \"display_name\": \"malavika rajesh\",\n      \"phone\": \"+15550002222\",\n      \"user_id\": \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Open a 1:1 (idempotent; blocked across a block)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/direct",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "direct"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"peer_user_id\": \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`conversationDirect`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/direct",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "direct"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"peer_user_id\": \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"room_id\": \"eb0a0da1-5344-483f-8b18-b95bfc4d1e36\",\n  \"kind\": \"direct\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"room_id\"] !== undefined) pm.collectionVariables.set(\"room_id\", body[\"room_id\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Create a group",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/group",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "group"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"member_user_ids\": [\n    \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n  ],\n  \"name\": \"Weekend plans\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`conversationGroup`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/group",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "group"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"member_user_ids\": [\n    \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n  ],\n  \"name\": \"Weekend plans\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"room_id\": \"60f99e3b-2084-4bb5-9adb-527ee9907673\",\n  \"kind\": \"group\",\n  \"name\": \"Weekend plans\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"room_id\"] !== undefined) pm.collectionVariables.set(\"room_id\", body[\"room_id\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "List conversations",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`conversationsList`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"conversations\": [\n    {\n      \"created_at\": \"2026-01-15T09:30:44Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Weekend plans\",\n      \"room_id\": \"60f99e3b-2084-4bb5-9adb-527ee9907673\"\n    },\n    {\n      \"created_at\": \"2026-01-15T08:20:10Z\",\n      \"description\": \"Saturday hike, then dinner at eight.\",\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Weekend plans\",\n      \"room_id\": \"1cac5f45-0101-442b-a6cf-bdc9136a4c55\"\n    },\n    {\n      \"created_at\": \"2026-01-15T05:11:50Z\",\n      \"description\": \"Saturday hike, then dinner at eight.\",\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Weekend plans\",\n      \"room_id\": \"8ef5c24c-eca5-4c18-b1c3-bb4e86b24632\"\n    },\n    {\n      \"created_at\": \"2026-01-14T05:48:54Z\",\n      \"description\": \"Saturday hike, then dinner at eight.\",\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Weekend plans\",\n      \"room_id\": \"94a7993d-f741-47dc-b524-dc63a8986899\"\n    },\n    {\n      \"created_at\": \"2026-01-14T05:44:03Z\",\n      \"description\": \"Saturday hike, then dinner at eight.\",\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Weekend plans\",\n      \"room_id\": \"b7740fb5-02e4-4095-980c-abd1f098ae37\"\n    },\n    {\n      \"created_at\": \"2026-01-07T02:12:15Z\",\n      \"description\": \"Saturday hike, then dinner at eight.\",\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Weekend plans\",\n      \"room_id\": \"aca2ceb1-e310-4e14-8882-d8e966b7d712\"\n    },\n    {\n      \"created_at\": \"2026-01-07T02:10:38Z\",\n      \"description\": \"Saturday hike, then dinner at eight.\",\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Weekend plans\",\n      \"room_id\": \"b5e03d35-ea1d-403e-9a87-02e614aee58a\"\n    },\n    {\n      \"created_at\": \"2026-01-04T06:25:11Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"testing me\",\n      \"room_id\": \"61f13be9-cf5b-4e1c-9d33-e39872d872c7\"\n    },\n    {\n      \"created_at\": \"2026-01-02T08:34:58Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"test group\",\n      \"room_id\": \"6eb71e13-fe76-4e5a-a9c2-6c197c5f1400\"\n    },\n    {\n      \"created_at\": \"2026-01-02T06:08:08Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Live Verify Group 1791189343212\",\n      \"room_id\": \"9e052209-79c3-487b-9a5a-ad43bbceb481\"\n    },\n    {\n      \"created_at\": \"2025-12-26T17:24:52Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"direct\",\n      \"name\": null,\n      \"room_id\": \"c8366e3b-a43d-4e20-91ef-567e1287e110\"\n    },\n    {\n      \"created_at\": \"2025-12-26T06:22:28Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Backend Test Grp\",\n      \"room_id\": \"36bf8624-46f1-40a0-9ead-1b6ad5a1163f\"\n    },\n    {\n      \"created_at\": \"2025-12-26T05:45:00Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"sdfghjklllkjhgfdcvbhjklkmnbv\",\n      \"room_id\": \"d4ac2357-7773-4840-b9ac-f4ebc7978267\"\n    },\n    {\n      \"created_at\": \"2025-12-23T08:09:04Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Self Media Group\",\n      \"room_id\": \"fadcd831-d379-493d-be50-222ecbf697e9\"\n    },\n    {\n      \"created_at\": \"2025-12-21T08:10:13Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Group call\",\n      \"room_id\": \"e23fb102-5878-4b14-a637-a6878a202935\"\n    },\n    {\n      \"created_at\": \"2025-12-21T08:02:17Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"TestGroup-1790159400517\",\n      \"room_id\": \"4d55f4fa-516c-4ddc-8e08-18719784882d\"\n    },\n    {\n      \"created_at\": \"2025-12-09T06:34:28Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Weekend plans\",\n      \"room_id\": \"dc18e5c2-e264-4ead-be79-1f78faf15a54\"\n    },\n    {\n      \"created_at\": \"2025-12-09T04:29:48Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"QA Test Group\",\n      \"room_id\": \"5e38f7cd-e6f7-428e-b3ec-1d57d6fc4025\"\n    },\n    {\n      \"created_at\": \"2025-12-09T04:28:31Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"QA Test Group\",\n      \"room_id\": \"d7f66e06-79d0-4cd8-9f13-6795b4ac692f\"\n    },\n    {\n      \"created_at\": \"2025-12-08T15:56:18Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Weekend plans\",\n      \"room_id\": \"6c0db0aa-7c88-410c-bcf1-e0f17cbe0cdf\"\n    },\n    {\n      \"created_at\": \"2025-12-08T15:53:16Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Weekend plans\",\n      \"room_id\": \"ee286c5c-7607-453f-8165-8a40f3e19214\"\n    },\n    {\n      \"created_at\": \"2025-12-08T15:43:20Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Weekend plans\",\n      \"room_id\": \"a970b461-8d3c-4c2e-88c2-77beee06a75f\"\n    },\n    {\n      \"created_at\": \"2025-12-08T15:40:48Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Weekend plans\",\n      \"room_id\": \"07191895-7185-4474-b1fd-e804fc432f1a\"\n    },\n    {\n      \"created_at\": \"2025-12-08T15:38:48Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"name\": \"Weekend plans\",\n      \"room_id\": \"f9f4c84c-1028-46de-905b-214423a81304\"\n    },\n    {\n      \"created_at\": \"2025-12-08T15:38:48Z\",\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"direct\",\n      \"name\": null,\n      \"room_id\": \"eb0a0da1-5344-483f-8b18-b95bfc4d1e36\"\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Mint a room token",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/token?device_id=dev-alice-phone",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "{{room_id}}",
                    "token"
                  ],
                  "query": [
                    {
                      "key": "device_id",
                      "value": "dev-alice-phone"
                    }
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`conversationToken`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/token?device_id=dev-alice-phone",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "{{room_id}}",
                        "token"
                      ],
                      "query": [
                        {
                          "key": "device_id",
                          "value": "dev-alice-phone"
                        }
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"access_token\": \"eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCIsImtpZCI6ImEwM2I1NjQ4MjM3YjlmZWIifQ.eyJpc3MiOiJjaGF0Ym94LWJhY2tlbmQiLCJhdWQiOiJjaGF0Ym94LXJlYWx0aW1lIiwic3ViIjoiNGE5OGU3NjctYTQyNi00N2U5LTg5YTAtYzQ5OWI1NGQyOTA0IiwidGlkIjoiYWNjdF9lZmFmN2YwMWEzNzM0NTNiYjEwMDQ2YzcyYzNiYjdiYiIsInJpZCI6ImViMGEwZGExLTUzNDQtNDgzZi04YjE4LWI5NWJmYzRkMWUzNiIsInJvbGUiOiJtZW1iZXIiLCJwZXJtaXNzaW9ucyI6WyJjaGF0OnNlbmQiLCJjaGF0Omhpc3RvcnkiLCJhdHRhY2htZW50OnVwbG9hZCIsImF0dGFjaG1lbnQ6ZG93bmxvYWQiLCJydGM6cHVibGlzaCIsInJ0YzpzdWJzY3JpYmUiXSwiZGlkIjoiZGV2LWFsaWNlLXBob25lIiwianRpIjoiY2MxYjhmMDEtNmVkMS00OWZmLWIyNGItZjFkMzA3NjAyYzc1IiwiaWF0IjoxNzkyMzI0NzA4LCJuYmYiOjE3OTIzMjQ3MDgsImV4cCI6MTc5MjMyNTMwOH0.SIGNATURE_REMOVED\",\n  \"expires_at\": \"2026-01-15T09:40:45Z\",\n  \"rtc_websocket_url\": \"wss://api.ollacore.com/v1/rtc/ws\",\n  \"chat_websocket_url\": \"wss://api.ollacore.com/v1/chat/ws\",\n  \"ice_servers\": [\n    {\n      \"urls\": [\n        \"stun:api.ollacore.com:3478\"\n      ]\n    },\n    {\n      \"urls\": [\n        \"turn:api.ollacore.com:3478\",\n        \"turns:api.ollacore.com:5349\"\n      ],\n      \"username\": \"1789064267:alice\",\n      \"credential\": \"EXAMPLE_TURN_CREDENTIAL=\"\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ],
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "type": "text/javascript",
                    "exec": [
                      "const body = pm.response.json();",
                      "if (body[\"access_token\"] !== undefined) pm.collectionVariables.set(\"access_token\", body[\"access_token\"]);"
                    ]
                  }
                }
              ]
            },
            {
              "name": "Chat list: peer, last message, unread, muted_until",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/inbox?limit=30",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "inbox"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "30"
                    }
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`listInbox`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/inbox?limit=30",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "inbox"
                      ],
                      "query": [
                        {
                          "key": "limit",
                          "value": "30"
                        }
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"conversations\": [\n    {\n      \"description\": \"Saturday hike, then dinner at eight.\",\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": {\n        \"created_at\": \"2026-01-15T09:30:45Z\",\n        \"event_seq\": 5208,\n        \"kind\": \"system\",\n        \"preview\": \"system\",\n        \"sender_id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\"\n      },\n      \"muted_until\": null,\n      \"name\": \"Weekend plans\",\n      \"peer\": null,\n      \"room_id\": \"60f99e3b-2084-4bb5-9adb-527ee9907673\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": \"Saturday hike, then dinner at eight.\",\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": {\n        \"created_at\": \"2026-01-15T08:20:11Z\",\n        \"event_seq\": 5196,\n        \"kind\": \"system\",\n        \"preview\": \"system\",\n        \"sender_id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\"\n      },\n      \"muted_until\": null,\n      \"name\": \"Weekend plans\",\n      \"peer\": null,\n      \"room_id\": \"1cac5f45-0101-442b-a6cf-bdc9136a4c55\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": \"Saturday hike, then dinner at eight.\",\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": {\n        \"created_at\": \"2026-01-15T05:11:51Z\",\n        \"event_seq\": 5184,\n        \"kind\": \"system\",\n        \"preview\": \"system\",\n        \"sender_id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\"\n      },\n      \"muted_until\": null,\n      \"name\": \"Weekend plans\",\n      \"peer\": null,\n      \"room_id\": \"8ef5c24c-eca5-4c18-b1c3-bb4e86b24632\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": \"Saturday hike, then dinner at eight.\",\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": {\n        \"created_at\": \"2026-01-14T05:48:55Z\",\n        \"event_seq\": 5131,\n        \"kind\": \"system\",\n        \"preview\": \"system\",\n        \"sender_id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\"\n      },\n      \"muted_until\": null,\n      \"name\": \"Weekend plans\",\n      \"peer\": null,\n      \"room_id\": \"94a7993d-f741-47dc-b524-dc63a8986899\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": \"Saturday hike, then dinner at eight.\",\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": {\n        \"created_at\": \"2026-01-14T05:44:04Z\",\n        \"event_seq\": 5122,\n        \"kind\": \"system\",\n        \"preview\": \"system\",\n        \"sender_id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\"\n      },\n      \"muted_until\": null,\n      \"name\": \"Weekend plans\",\n      \"peer\": null,\n      \"room_id\": \"b7740fb5-02e4-4095-980c-abd1f098ae37\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"direct\",\n      \"last_message\": {\n        \"created_at\": \"2026-01-09T06:55:18Z\",\n        \"event_seq\": 4842,\n        \"kind\": \"text\",\n        \"preview\": \"\",\n        \"sender_id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\"\n      },\n      \"muted_until\": \"2026-01-22T09:30:47Z\",\n      \"name\": null,\n      \"peer\": {\n        \"avatar_version\": null,\n        \"display_name\": \"malavika rajesh\",\n        \"phone\": \"+15550002222\",\n        \"user_id\": \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n      },\n      \"room_id\": \"eb0a0da1-5344-483f-8b18-b95bfc4d1e36\",\n      \"unread_count\": 5\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": {\n        \"created_at\": \"2026-01-08T11:56:21Z\",\n        \"event_seq\": 4733,\n        \"kind\": \"text\",\n        \"preview\": \"cna you see this\",\n        \"sender_id\": \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n      },\n      \"muted_until\": null,\n      \"name\": \"test group\",\n      \"peer\": null,\n      \"room_id\": \"6eb71e13-fe76-4e5a-a9c2-6c197c5f1400\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": \"Saturday hike, then dinner at eight.\",\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": {\n        \"created_at\": \"2026-01-07T02:12:16Z\",\n        \"event_seq\": 4689,\n        \"kind\": \"system\",\n        \"preview\": \"system\",\n        \"sender_id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\"\n      },\n      \"muted_until\": null,\n      \"name\": \"Weekend plans\",\n      \"peer\": null,\n      \"room_id\": \"aca2ceb1-e310-4e14-8882-d8e966b7d712\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": \"Saturday hike, then dinner at eight.\",\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": {\n        \"created_at\": \"2026-01-07T02:10:39Z\",\n        \"event_seq\": 4680,\n        \"kind\": \"system\",\n        \"preview\": \"system\",\n        \"sender_id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\"\n      },\n      \"muted_until\": null,\n      \"name\": \"Weekend plans\",\n      \"peer\": null,\n      \"room_id\": \"b5e03d35-ea1d-403e-9a87-02e614aee58a\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": {\n        \"created_at\": \"2026-01-04T08:56:33Z\",\n        \"event_seq\": 4373,\n        \"kind\": \"file\",\n        \"preview\": \"📎 File\",\n        \"sender_id\": \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n      },\n      \"muted_until\": null,\n      \"name\": \"testing me\",\n      \"peer\": null,\n      \"room_id\": \"61f13be9-cf5b-4e1c-9d33-e39872d872c7\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": {\n        \"created_at\": \"2026-01-03T07:42:03Z\",\n        \"event_seq\": 4270,\n        \"kind\": \"text\",\n        \"preview\": \"QA VERIFY 4\",\n        \"sender_id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\"\n      },\n      \"muted_until\": null,\n      \"name\": \"Self Media Group\",\n      \"peer\": null,\n      \"room_id\": \"fadcd831-d379-493d-be50-222ecbf697e9\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": {\n        \"created_at\": \"2026-01-02T08:38:19Z\",\n        \"event_seq\": 4072,\n        \"kind\": \"text\",\n        \"preview\": \"hyy\",\n        \"sender_id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\"\n      },\n      \"muted_until\": null,\n      \"name\": \"Live Verify Group 1791189343212\",\n      \"peer\": null,\n      \"room_id\": \"9e052209-79c3-487b-9a5a-ad43bbceb481\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"direct\",\n      \"last_message\": {\n        \"created_at\": \"2025-12-26T17:24:59Z\",\n        \"event_seq\": 3670,\n        \"kind\": \"text\",\n        \"preview\": \"hi\",\n        \"sender_id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\"\n      },\n      \"muted_until\": null,\n      \"name\": null,\n      \"peer\": {\n        \"avatar_version\": null,\n        \"display_name\": null,\n        \"phone\": \"+15550003333\",\n        \"user_id\": \"9b2f6052-edf8-424e-9c1a-ecd90a1607e4\"\n      },\n      \"room_id\": \"c8366e3b-a43d-4e20-91ef-567e1287e110\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": {\n        \"created_at\": \"2025-12-26T15:02:18Z\",\n        \"event_seq\": 3657,\n        \"kind\": \"deleted\",\n        \"preview\": \"Message deleted\",\n        \"sender_id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\"\n      },\n      \"muted_until\": null,\n      \"name\": \"sdfghjklllkjhgfdcvbhjklkmnbv\",\n      \"peer\": null,\n      \"room_id\": \"d4ac2357-7773-4840-b9ac-f4ebc7978267\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": null,\n      \"muted_until\": null,\n      \"name\": \"Backend Test Grp\",\n      \"peer\": null,\n      \"room_id\": \"36bf8624-46f1-40a0-9ead-1b6ad5a1163f\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": {\n        \"created_at\": \"2025-12-21T09:19:52Z\",\n        \"event_seq\": 3293,\n        \"kind\": \"text\",\n        \"preview\": \"ClearWatermarkProbe\",\n        \"sender_id\": \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n      },\n      \"muted_until\": null,\n      \"name\": \"Group call\",\n      \"peer\": null,\n      \"room_id\": \"e23fb102-5878-4b14-a637-a6878a202935\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": null,\n      \"muted_until\": null,\n      \"name\": \"TestGroup-1790159400517\",\n      \"peer\": null,\n      \"room_id\": \"4d55f4fa-516c-4ddc-8e08-18719784882d\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": null,\n      \"muted_until\": null,\n      \"name\": \"Weekend plans\",\n      \"peer\": null,\n      \"room_id\": \"dc18e5c2-e264-4ead-be79-1f78faf15a54\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": null,\n      \"muted_until\": null,\n      \"name\": \"QA Test Group\",\n      \"peer\": null,\n      \"room_id\": \"5e38f7cd-e6f7-428e-b3ec-1d57d6fc4025\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": null,\n      \"muted_until\": null,\n      \"name\": \"QA Test Group\",\n      \"peer\": null,\n      \"room_id\": \"d7f66e06-79d0-4cd8-9f13-6795b4ac692f\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": null,\n      \"muted_until\": null,\n      \"name\": \"Weekend plans\",\n      \"peer\": null,\n      \"room_id\": \"6c0db0aa-7c88-410c-bcf1-e0f17cbe0cdf\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": null,\n      \"muted_until\": null,\n      \"name\": \"Weekend plans\",\n      \"peer\": null,\n      \"room_id\": \"ee286c5c-7607-453f-8165-8a40f3e19214\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": null,\n      \"muted_until\": null,\n      \"name\": \"Weekend plans\",\n      \"peer\": null,\n      \"room_id\": \"a970b461-8d3c-4c2e-88c2-77beee06a75f\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": null,\n      \"muted_until\": null,\n      \"name\": \"Weekend plans\",\n      \"peer\": null,\n      \"room_id\": \"07191895-7185-4474-b1fd-e804fc432f1a\",\n      \"unread_count\": 0\n    },\n    {\n      \"description\": null,\n      \"icon_attachment_id\": null,\n      \"kind\": \"group\",\n      \"last_message\": null,\n      \"muted_until\": null,\n      \"name\": \"Weekend plans\",\n      \"peer\": null,\n      \"room_id\": \"f9f4c84c-1028-46de-905b-214423a81304\",\n      \"unread_count\": 0\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        },
        {
          "name": "Group management",
          "item": [
            {
              "name": "A conversation as a member sees it: name, description, icon, size",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "{{room_id}}"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`conversationGet`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "{{room_id}}"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"room_id\": \"60f99e3b-2084-4bb5-9adb-527ee9907673\",\n  \"kind\": \"group\",\n  \"name\": \"Weekend plans\",\n  \"description\": null,\n  \"icon_attachment_id\": null,\n  \"member_count\": 2,\n  \"created_at\": \"2026-01-15T09:30:44Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Owner: rename a group, set its description or icon",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "{{room_id}}"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Weekend plans\",\n  \"description\": \"Saturday hike, then dinner at eight.\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`conversationRename`\n\nOwner only. Each change is posted into the room as a system message (group.renamed, group.description_changed, group.icon_changed). The icon is a ready image attachment uploaded to this group first and named here as icon_attachment_id."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "PATCH",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "{{room_id}}"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"name\": \"Weekend plans\",\n  \"description\": \"Saturday hike, then dinner at eight.\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"room_id\": \"60f99e3b-2084-4bb5-9adb-527ee9907673\",\n  \"kind\": \"group\",\n  \"name\": \"Weekend plans\",\n  \"description\": \"Saturday hike, then dinner at eight.\",\n  \"icon_attachment_id\": null,\n  \"member_count\": 2,\n  \"created_at\": \"2026-01-15T09:30:44Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Members, owners first",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/members",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "{{room_id}}",
                    "members"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`conversationMembers`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/members",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "{{room_id}}",
                        "members"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"members\": [\n    {\n      \"about\": \"Ships things. Slow to reply at weekends.\",\n      \"avatar_version\": \"2026-01-15T09:30:44Z\",\n      \"display_name\": \"Alice Nakamura\",\n      \"joined_at\": \"2026-01-15T09:30:44Z\",\n      \"phone\": \"+15550001111\",\n      \"role\": \"owner\",\n      \"user_id\": \"4a98e767-a426-47e9-89a0-c499b54d2904\"\n    },\n    {\n      \"about\": null,\n      \"avatar_version\": null,\n      \"display_name\": \"malavika rajesh\",\n      \"joined_at\": \"2026-01-15T09:30:44Z\",\n      \"phone\": \"+15550002222\",\n      \"role\": \"member\",\n      \"user_id\": \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Owner: add up to 256 members (409 once the room holds 5,000)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/members",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "{{room_id}}",
                    "members"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"member_user_ids\": [\n    \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`conversationAddMembers`\n\nUp to 256 ids per call; a previously removed member is restored. Anyone who has blocked you is left out and listed in not_added. 409 once the room holds 5,000."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/members",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "{{room_id}}",
                        "members"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"member_user_ids\": [\n    \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n  ]\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"added\": [\n    \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n  ],\n  \"member_count\": 2,\n  \"not_added\": []\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Owner: make a member an owner, or an owner a member",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/members/{{user_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "{{room_id}}",
                    "members",
                    "{{user_id}}"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"role\": \"owner\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`conversationSetRole`\n\nOwners are the admins and a group may have any number; the last one cannot be demoted. Announced to the room as member.updated."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "PUT",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/members/{{user_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "{{room_id}}",
                        "members",
                        "{{user_id}}"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"role\": \"owner\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"role\": \"owner\",\n  \"user_id\": \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Owner: remove a member",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/members/{{user_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "{{room_id}}",
                    "members",
                    "{{user_id}}"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`conversationRemoveMember`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/members/{{user_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "{{room_id}}",
                        "members",
                        "{{user_id}}"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"removed\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Leave a group; a lone owner's seat passes to the longest-standing member",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/leave",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "{{room_id}}",
                    "leave"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`conversationLeave`\n\nAny active member. A lone owner's seat passes to the longest-standing remaining member (announced as member.added with role owner); when nobody remains the room is closed."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/leave",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "{{room_id}}",
                        "leave"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"closed\": false,\n  \"left\": true,\n  \"new_owner\": null\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        },
        {
          "name": "Invite links",
          "item": [
            {
              "name": "Owner: create a link — the token is shown once",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/invites",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "{{room_id}}",
                    "invites"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"expires_in_seconds\": 86400,\n  \"max_uses\": 5\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`inviteCreate`\n\nOwner only. The token appears in this answer and nowhere else; only its hash is stored. At most 20 live links per group, an expiry at most 30 days out."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/invites",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "{{room_id}}",
                        "invites"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"expires_in_seconds\": 86400,\n  \"max_uses\": 5\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"created_at\": \"2026-01-15T09:30:46Z\",\n  \"created_by\": \"4a98e767-a426-47e9-89a0-c499b54d2904\",\n  \"expires_at\": \"2026-01-16T09:30:46Z\",\n  \"invite_id\": \"e7a02742-30b8-40ec-aa18-85744bbac5d3\",\n  \"max_uses\": 5,\n  \"room_id\": \"60f99e3b-2084-4bb5-9adb-527ee9907673\",\n  \"token\": \"EXAMPLE_INVITE_TOKEN\",\n  \"uses\": 0\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Owner: live links, without tokens",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/invites",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "{{room_id}}",
                    "invites"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`invitesList`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/invites",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "{{room_id}}",
                        "invites"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"invites\": [\n    {\n      \"created_at\": \"2026-01-15T09:30:46Z\",\n      \"created_by\": \"4a98e767-a426-47e9-89a0-c499b54d2904\",\n      \"expires_at\": \"2026-01-16T09:30:46Z\",\n      \"invite_id\": \"e7a02742-30b8-40ec-aa18-85744bbac5d3\",\n      \"max_uses\": 5,\n      \"room_id\": \"60f99e3b-2084-4bb5-9adb-527ee9907673\",\n      \"uses\": 0\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Owner: revoke a link",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/invites/{{invite_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "{{room_id}}",
                    "invites",
                    "{{invite_id}}"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`inviteRevoke`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/invites/{{invite_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "{{room_id}}",
                        "invites",
                        "{{invite_id}}"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"revoked\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "What a link leads to, before joining (token in the body)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/invites/preview",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "invites",
                    "preview"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"token\": \"EXAMPLE_INVITE_TOKEN\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`invitePreview`\n\nThe token travels in the body, never in a URL. Every way a link can be no good — unknown, revoked, expired, used up, another tenant's, group closed — is one 404."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/invites/preview",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "invites",
                        "preview"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"token\": \"EXAMPLE_INVITE_TOKEN\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"description\": \"Saturday hike, then dinner at eight.\",\n  \"expires_at\": \"2026-01-16T09:30:46Z\",\n  \"icon_attachment_id\": null,\n  \"member\": false,\n  \"member_count\": 1,\n  \"name\": \"Weekend plans\",\n  \"room_id\": \"60f99e3b-2084-4bb5-9adb-527ee9907673\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Join a group through a link",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/invites/join",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "invites",
                    "join"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"token\": \"EXAMPLE_INVITE_TOKEN\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`inviteJoin`\n\nAdmits you as a member and the room sees member.added. Someone already in the group gets joined: false and the link is not spent."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/invites/join",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "invites",
                        "join"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"token\": \"EXAMPLE_INVITE_TOKEN\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"joined\": true,\n  \"member_count\": 2,\n  \"room_id\": \"60f99e3b-2084-4bb5-9adb-527ee9907673\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        },
        {
          "name": "Mute & block",
          "item": [
            {
              "name": "Silence this conversation's push for yourself — 8h, 1w or always",
              "request": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/mute",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "{{room_id}}",
                    "mute"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"duration\": \"1w\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`conversationMute`\n\nPush only: the WebSocket still delivers and a call still rings. Private — no event is emitted. Durations are 8h, 1w or always; for always, muted_until is a date in the year 9999."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "PUT",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/mute",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "{{room_id}}",
                        "mute"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"duration\": \"1w\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"muted_until\": \"2026-01-22T09:30:47Z\",\n  \"room_id\": \"eb0a0da1-5344-483f-8b18-b95bfc4d1e36\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Unmute",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/mute",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "conversations",
                    "{{room_id}}",
                    "mute"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`conversationUnmute`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/conversations/{{room_id}}/mute",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "conversations",
                        "{{room_id}}",
                        "mute"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"muted_until\": null,\n  \"room_id\": \"eb0a0da1-5344-483f-8b18-b95bfc4d1e36\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Your block list",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/blocks",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "blocks"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`blocksList`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/blocks",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "blocks"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"blocks\": [\n    {\n      \"display_name\": \"malavika rajesh\",\n      \"phone\": \"+15550002222\",\n      \"since\": \"2026-01-15T09:30:47Z\",\n      \"user_id\": \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Block a user — the direct chat freezes for both",
              "request": {
                "method": "PUT",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/blocks/{{user_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "blocks",
                    "{{user_id}}"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`blockUser`\n\nThe direct conversation between the two is frozen for both — sends, reactions, typing and the RTC join answer blocked (403) — and a new one is refused; the blocked user cannot add the blocker to a group. Shared groups are unaffected; the blocked person is not told. Idempotent."
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "PUT",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/blocks/{{user_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "blocks",
                        "{{user_id}}"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"blocked\": true,\n  \"since\": \"2026-01-15T09:30:47Z\",\n  \"user_id\": \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Unblock",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/blocks/{{user_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "blocks",
                    "{{user_id}}"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`unblockUser`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/blocks/{{user_id}}",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "blocks",
                        "{{user_id}}"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"blocked\": false,\n  \"user_id\": \"0b925a2d-944a-4f1d-a761-56d24db90341\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        },
        {
          "name": "Devices",
          "item": [
            {
              "name": "Register a push token",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/devices",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "devices"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"platform\": \"fcm\",\n  \"push_token\": \"EXAMPLE_DEVICE_PUSH_TOKEN\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`registerDevice`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/devices",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "devices"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"platform\": \"fcm\",\n  \"push_token\": \"EXAMPLE_DEVICE_PUSH_TOKEN\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"id\": \"fa01a2a6-4fd1-48e7-a18c-9bf7719f01b7\",\n  \"platform\": \"fcm\",\n  \"push_token\": \"EXAMPLE_DEVICE_PUSH_TOKEN\",\n  \"app_id\": \"da_3a0a2cfaabd34b7dbfb4ecd5033b0c5f\",\n  \"updated_at\": \"2026-01-15T09:30:44Z\"\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "List devices",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/v1/directory/devices",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "devices"
                  ]
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`listDevices`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/devices",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "devices"
                      ]
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"devices\": [\n    {\n      \"app_id\": \"da_3a0a2cfaabd34b7dbfb4ecd5033b0c5f\",\n      \"id\": \"fa01a2a6-4fd1-48e7-a18c-9bf7719f01b7\",\n      \"platform\": \"fcm\",\n      \"push_token\": \"EXAMPLE_DEVICE_PUSH_TOKEN\",\n      \"updated_at\": \"2026-01-15T09:30:44Z\"\n    }\n  ]\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            },
            {
              "name": "Unregister a push token",
              "request": {
                "method": "DELETE",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/v1/directory/devices",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "v1",
                    "directory",
                    "devices"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"push_token\": \"EXAMPLE_DEVICE_PUSH_TOKEN\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "auth": {
                  "type": "bearer",
                  "bearer": [
                    {
                      "key": "token",
                      "value": "{{du_session}}",
                      "type": "string"
                    }
                  ]
                },
                "description": "`deleteDevice`"
              },
              "response": [
                {
                  "name": "Recorded example (200)",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/v1/directory/devices",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "v1",
                        "directory",
                        "devices"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"push_token\": \"EXAMPLE_DEVICE_PUSH_TOKEN\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    },
                    "auth": {
                      "type": "bearer",
                      "bearer": [
                        {
                          "key": "token",
                          "value": "{{du_session}}",
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "code": 200,
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"deleted\": true\n}",
                  "_postman_previewlanguage": "json"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}
