> For the complete documentation index, see [llms.txt](https://rest-api.symphony.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://rest-api.symphony.com/main/apps-on-behalf-of-obo/obo-enabled-endpoints.md).

# API Endpoints for Apps

### Get Started with OBO

OBO or On-Behalf-Of authentication allows an extension application to be able to call REST API endpoints to perform operations on behalf of an application end-user.

Such operations include:

* List the streams of a given user
* Initiate connection requests to and determine connection status with other users
* Get the presence state of other connected users
* Initiate IMs with other users
* Send messages and attachments
* Set the context user's own presence

> #### 📘 More information on OBO
>
> For more information, please refer to [OBO Authentication](https://docs.developers.symphony.com/building-extension-applications-on-symphony/app-authentication/obo-authentication).

## API endpoints enabled for OBO

The following table describes which of our REST API endpoints are OBO-enabled, and for each the application permission that must be granted to the app.

{% hint style="info" %}
Premium APIs are an add-on to the Symphony Services, and are subject to additional charges. Prior to using them, you will need to enter into a specific contract. Please reach out to <sales@symphony.com> to discuss the offering, its pricing, or any further information.
{% endhint %}

<table><thead><tr><th width="261.45703125">OBO-enabled endpoint</th><th width="176.36328125">Permission</th><th width="152.91015625">Endpoint documentation</th><th width="127.20703125" data-type="checkbox">Premium APIs</th></tr></thead><tbody><tr><td>GET /pod/v1/connection/list</td><td>GET_USER_CONNECTIONS</td><td><a data-mention href="/main/connections/list-connections.md">List Connection</a></td><td>false</td></tr><tr><td>GET /pod/v1/admin/system/protocols/list</td><td>SEND_MESSAGES</td><td><p><em>Deprecated documentation. For more information, refer to:</em></p><p><a data-mention href="/main/uri-protocols/list-protocols-v2.md">List Protocols</a></p></td><td>false</td></tr><tr><td>GET /pod/v1/connection/user/{userId}/info</td><td>GET_USER_CONNECTIONS</td><td><a data-mention href="/main/connections/get-connection.md">Get Connection</a></td><td>false</td></tr><tr><td>GET /pod/v1/files/allowedTypes</td><td>SEND_MESSAGES</td><td><a data-mention href="/main/messages/attachment-types.md">Attachment Types</a></td><td>false</td></tr><tr><td>GET /pod/v1/presence/feed/{feedId}/read</td><td>GET_PRESENCE</td><td><a data-mention href="/deprecated-endpoints/read-presence-feed.md">Read Presence Feed</a></td><td>false</td></tr><tr><td>GET /pod/v1/sessioninfo</td><td>GET_BASIC_USER_INFO</td><td><em>Deprecated documentation. For more information, refer to:</em><br><a data-mention href="/main/info-health-check/session-info-v2.md">Session User</a></td><td>false</td></tr><tr><td>GET /pod/v1/streams/{streamId}/info</td><td>SEND_MESSAGES</td><td><em>Deprecated documentation. For more information, refer to:</em><br><a data-mention href="/main/streams-conversations/all-streams-endpoints/stream-info-v2.md">Stream Info</a></td><td>false</td></tr><tr><td>GET /pod/v1/user</td><td>GET_BASIC_CONTACT_INFO</td><td><em>Deprecated documentation. For more information, refer to:</em><br><a data-mention href="/main/users/users-lookup-v3.md">Users Lookup</a></td><td>false</td></tr><tr><td>GET /pod/v1/user/presence</td><td>GET_PRESENCE</td><td><em>Deprecated documentation. For more information, refer to:</em><br><a data-mention href="/main/presence/get-presence.md">Get Presence</a></td><td>false</td></tr><tr><td>GET /pod/v1/user/{userId}/presence</td><td>GET_PRESENCE</td><td><em>Deprecated documentation. For more information, refer to:</em><br><a data-mention href="/main/presence/user-presence-v3.md">Get User Presence</a></td><td>false</td></tr><tr><td>GET /pod/v2/sessioninfo</td><td>GET_BASIC_USER_INFO</td><td><a data-mention href="/main/info-health-check/session-info-v2.md">Session User</a></td><td>false</td></tr><tr><td>GET /pod/v2/user</td><td>GET_BASIC_CONTACT_INFO  SEND_MESSAGES</td><td><em>Deprecated documentation. For more information, refer to:</em><br><a data-mention href="/main/users/users-lookup-v3.md">Users Lookup</a></td><td>false</td></tr><tr><td>GET /pod/v2/user/presence</td><td>GET_PRESENCE</td><td><a data-mention href="/main/presence/get-presence.md">Get Presence</a></td><td>false</td></tr><tr><td>GET /pod/v2/user/{userId}/presence</td><td>GET_PRESENCE</td><td><em>Deprecated documentation. For more information, refer to:</em><br><a data-mention href="/main/presence/user-presence-v3.md">Get User Presence</a></td><td>false</td></tr><tr><td>GET /pod/v3/room/{roomId}/info</td><td>MANAGE_ROOMS</td><td><a data-mention href="/main/streams-conversations/room-endpoints/room-info-v3.md">Room Info</a></td><td>false</td></tr><tr><td>GET /pod/v3/user/{userId}/presence</td><td>GET_PRESENCE</td><td><a data-mention href="/main/presence/user-presence-v3.md">Get User Presence</a></td><td>false</td></tr><tr><td>GET /pod/v3/users</td><td>GET_BASIC_CONTACT_INFO</td><td><a data-mention href="/main/users/users-lookup-v3.md">Users Lookup</a></td><td>false</td></tr><tr><td>POST /v1/user/{uid}/follow</td><td>MANAGE_USER_FOLLOWING</td><td><a data-mention href="/main/users/follow-user.md">Follow User</a></td><td>false</td></tr><tr><td>POST /v1/user/{uid}/unfollow</td><td>MANAGE_USER_FOLLOWING</td><td><a data-mention href="/main/users/unfollow-user.md">Unfollow User</a></td><td>false</td></tr><tr><td>GET /agent/v1/signals/{signalId}/get</td><td>MANAGE_SIGNALS</td><td><a data-mention href="/main/signals/get-signal.md">Get Signal</a></td><td>false</td></tr><tr><td>GET  /agent/v1/signals/{signalId}/subscribers</td><td>MANAGE_SIGNALS</td><td><a data-mention href="/main/signals/subscribers.md">Suscribers</a></td><td>false</td></tr><tr><td>GET  /agent/v1/signals/list</td><td>MANAGE_SIGNALS</td><td><a data-mention href="/main/signals/list-signals.md">List Signals</a></td><td>false</td></tr><tr><td>POST /agent/v1/signals/create</td><td>MANAGE_SIGNALS</td><td><a data-mention href="/main/signals/create-signal.md">Create Signal</a></td><td>false</td></tr><tr><td>POST /agent/v1/signals/{signalId}/update</td><td>MANAGE_SIGNALS</td><td><a data-mention href="/main/signals/update-signal.md">Update Signal</a></td><td>false</td></tr><tr><td>POST /agent/v1/signals/{signalId}/delete</td><td>MANAGE_SIGNALS</td><td><a data-mention href="/main/signals/delete-signal.md">Delete Signal</a></td><td>false</td></tr><tr><td>POST /agent/v1/signals/{signalId}/subscribe</td><td>MANAGE_SIGNALS</td><td><a data-mention href="/main/signals/subscribe-signal.md">Subscribe Signal</a></td><td>false</td></tr><tr><td>POST /agent/v1/signals/{signalId}/unsubscribe</td><td>MANAGE_SIGNALS</td><td><a data-mention href="/main/signals/unsubscribe-signal.md">Unsubscribe Signal</a></td><td>false</td></tr><tr><td>POST /agent/v3/stream/{streamId}/share</td><td>SEND_MESSAGES</td><td><a data-mention href="/main/streams-conversations/all-streams-endpoints/share-v3.md">Share Content</a></td><td>false</td></tr><tr><td>POST /agent/v4/stream/{streamId}/message/create</td><td>SEND_MESSAGES</td><td><a data-mention href="/main/messages/create-message-v4.md">Create Message</a></td><td>false</td></tr><tr><td>POST /agent/v4/message/blast</td><td>SEND_MESSAGES</td><td><a data-mention href="/main/messages/blast-message.md">Blast Message</a></td><td>false</td></tr><tr><td>POST /agent/v4/stream/{:sid}/message/{:mid}/update</td><td>SEND_MESSAGES</td><td><a data-mention href="/main/messages/update-message-v4.md">Update Message</a></td><td>false</td></tr><tr><td>POST /v1/admin/messagesuppression/{messageId}/suppress</td><td>SUPPRESS_MESSAGES</td><td><a data-mention href="/main/messages/suppress-message.md">Suppress Message</a></td><td>false</td></tr><tr><td>POST /pod/v1/connection/create</td><td>REQUEST_USER_CONNECTIONS</td><td><a data-mention href="/main/connections/create-connection.md">Create Connection</a></td><td>false</td></tr><tr><td>POST /pod/v1/im/create</td><td>SEND_MESSAGES</td><td><a data-mention href="/main/streams-conversations/im-mim-endpoints/create-im-or-mim.md">Create IM</a></td><td>false</td></tr><tr><td>POST /pod/v1/presence/feed/create</td><td>GET_PRESENCE</td><td><a data-mention href="/deprecated-endpoints/create-presence-feed.md">Create Presence Feed</a></td><td>false</td></tr><tr><td>POST /pod/v1/presence/feed/{feedId}/delete</td><td>GET_PRESENCE</td><td><a data-mention href="/deprecated-endpoints/delete-presence-feed.md">Delete Presence Feed</a></td><td>false</td></tr><tr><td>POST /pod/v2/room/{roomId}/membership/list</td><td>MANAGE_ROOMS<br>LIST_USER_STREAMS</td><td>Since SBE 20.16<br><a data-mention href="/main/streams-conversations/room-endpoints/room-members.md">Room Members</a></td><td>false</td></tr><tr><td>POST /pod/v1/room/{roomId}/membership/add</td><td>MANAGE_ROOMS</td><td><a data-mention href="/main/streams-conversations/room-endpoints/add-member.md">Add Member</a></td><td>false</td></tr><tr><td>POST /pod/v1/room/{roomId}/membership/demoteOwner</td><td>MANAGE_ROOMS</td><td><a data-mention href="/main/streams-conversations/room-endpoints/demote-owner.md">Demote Owner</a></td><td>false</td></tr><tr><td>"POST" /pod/v1/room/{roomId}/membership/promoteOwner</td><td>MANAGE_ROOMS</td><td><a data-mention href="/main/streams-conversations/room-endpoints/promote-owner.md">Promote Owner</a></td><td>false</td></tr><tr><td>POST /pod/v1/room/{roomId}/membership/remove</td><td>MANAGE_ROOMS</td><td><a data-mention href="/main/streams-conversations/room-endpoints/remove-member.md">Remove Member</a></td><td>false</td></tr><tr><td>POST /pod/v1/room/{roomId}/setActive</td><td>MANAGE_ROOMS</td><td><a data-mention href="/main/streams-conversations/room-endpoints/de-or-re-activate-room.md">De/Re-activate Room</a></td><td>false</td></tr><tr><td>POST /pod/v1/streams/list</td><td>LIST_USER_STREAMS</td><td><a data-mention href="/main/streams-conversations/all-streams-endpoints/list-user-streams.md">List User Streams</a></td><td>false</td></tr><tr><td>POST /pod/v2/user/presence</td><td>SET_PRESENCE</td><td><a data-mention href="/main/presence/set-presence.md">Set Presence</a></td><td>false</td></tr><tr><td>POST /pod/v1/user/presence/register</td><td>GET_PRESENCE</td><td><a data-mention href="/main/presence/register-user-presence-interest.md">External Presence Interest</a></td><td>false</td></tr><tr><td>POST /pod/v1/user/search</td><td>GET_BASIC_CONTACT_INFO</td><td><a data-mention href="/main/users/search-users.md">Search Users</a></td><td>false</td></tr><tr><td>POST /pod/v2/user/presence</td><td>SET_PRESENCE</td><td><a data-mention href="/main/presence/set-presence.md">Set Presence</a></td><td>false</td></tr><tr><td>POST /pod/v3/room/create</td><td>MANAGE_ROOMS  CREATE_USER_STREAM</td><td><a data-mention href="/main/streams-conversations/room-endpoints/create-room-v3.md">Create Room</a></td><td>false</td></tr><tr><td>POST /pod/v3/room/search</td><td>MANAGE_ROOMS</td><td><a data-mention href="/main/streams-conversations/room-endpoints/search-rooms-v3.md">Search Rooms</a></td><td>false</td></tr><tr><td>POST /pod/v3/room/{roomId}/update</td><td>MANAGE_ROOMS</td><td><a data-mention href="/main/streams-conversations/room-endpoints/update-room-v3.md">Update Room</a></td><td>false</td></tr><tr><td>POST /pod/v3/user/presence</td><td>SET_PRESENCE</td><td><a data-mention href="/main/presence/set-user-presence.md">Set Other User's Presence - Admin</a></td><td>false</td></tr><tr><td>GET /agent/v4/stream/{sid}/message</td><td>GET_MESSAGES</td><td><a data-mention href="/main/messages/messages-v4.md">Get Messages</a></td><td>true</td></tr><tr><td>POST /agent<br>/v1/message/search</td><td>GET_MESSAGES</td><td><a data-mention href="/main/messages/message-search-post.md">Message Search</a></td><td>true</td></tr></tbody></table>

### The following table describes the use of permissions:

<table><thead><tr><th width="288">Permission</th><th>Usage</th></tr></thead><tbody><tr><td>GET_BASIC_CONTACT_INFO</td><td>An app can get basic contact info.</td></tr><tr><td>GET_BASIC_USER_INFO</td><td>An app can get basic contact info.</td></tr><tr><td>SEND_MESSAGES</td><td>An app can send messages on behalf of a user. Creates IM for users.</td></tr><tr><td>SUPPRESS_MESSAGES</td><td>An app can suppress a user's messages on behalf of that user.</td></tr><tr><td>CREATE_USER_STREAM</td><td>An app can create streams on behalf of a user.</td></tr><tr><td>MANAGE_ROOMS</td><td>An app can manage streams on behalf of a user.</td></tr><tr><td>MANAGE_SIGNALS</td><td>An app can list, create, edit, and delete signals on behalf of a user.</td></tr><tr><td>LIST_USER_STREAMS</td><td>An app can get a list of user streams on behalf of users.</td></tr><tr><td>GET_USER_CONNECTIONS</td><td>An app can get an <code>appinfo</code> of all user connections on behalf of users.</td></tr><tr><td>REQUEST_USER_CONNECTIONS</td><td>An app can send connection requests on behalf of users.</td></tr><tr><td>GET_PRESENCE</td><td>An app can get a user presence on behalf of users.</td></tr><tr><td>SET_PRESENCE</td><td>An app can set presence on behalf of users.</td></tr><tr><td>MANAGE_USER_FOLLOWING</td><td>An app can make a list of users follow or unfollow a considered user, identified by his uid.</td></tr><tr><td>GET_MESSAGES</td><td>Retrieve messages on the user behalf.</td></tr></tbody></table>

> 🚧 All "On-Behalf-Of" (OBO) endpoints strictly adhere to the existing entitlements or state of the user in session.
>
> For example, an app cannot send a message on behalf of a user if that user is not already connected to the intended recipient. Similarly, if a user lacks the "Can Send Files" entitlement in Symphony Messaging, the app is restricted from sending messages with attachments on their behalf.
>
> This principle also applies to data retrieval use cases, where the app cannot retrieve more data than the user is permitted to see. Consequently, all relevant communication controls, such as history logs, room membership, and information barriers, are automatically applied.
