# 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.

<table><thead><tr><th width="327">OBO-enabled endpoint</th><th width="195">Permission</th><th>Endpoint documentation</th></tr></thead><tbody><tr><td>GET /pod/v1/connection/list</td><td>GET_USER_CONNECTIONS</td><td><a data-mention href="../connections/list-connections">list-connections</a></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="../uri-protocols/list-protocols-v2">list-protocols-v2</a></p></td></tr><tr><td>GET /pod/v1/connection/user/{userId}/info</td><td>GET_USER_CONNECTIONS</td><td><a data-mention href="../connections/get-connection">get-connection</a></td></tr><tr><td>GET /pod/v1/files/allowedTypes</td><td>SEND_MESSAGES</td><td><a data-mention href="../messages/attachment-types">attachment-types</a></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">read-presence-feed</a></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="../info-health-check/session-info-v2">session-info-v2</a></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="../streams-conversations/all-streams-endpoints/stream-info-v2">stream-info-v2</a></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="../users/users-lookup-v3">users-lookup-v3</a></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="../presence/get-presence">get-presence</a></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="../presence/user-presence-v3">user-presence-v3</a></td></tr><tr><td>GET /pod/v2/sessioninfo</td><td>GET_BASIC_USER_INFO</td><td><a data-mention href="../info-health-check/session-info-v2">session-info-v2</a></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="../users/users-lookup-v3">users-lookup-v3</a></td></tr><tr><td>GET /pod/v2/user/presence</td><td>GET_PRESENCE</td><td><a data-mention href="../presence/get-presence">get-presence</a></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="../presence/user-presence-v3">user-presence-v3</a></td></tr><tr><td>GET /pod/v3/room/{roomId}/info</td><td>MANAGE_ROOMS</td><td><a data-mention href="../streams-conversations/room-endpoints/room-info-v3">room-info-v3</a></td></tr><tr><td>GET /pod/v3/user/{userId}/presence</td><td>GET_PRESENCE</td><td><a data-mention href="../presence/user-presence-v3">user-presence-v3</a></td></tr><tr><td>GET /pod/v3/users</td><td>GET_BASIC_CONTACT_INFO</td><td><a data-mention href="../users/users-lookup-v3">users-lookup-v3</a></td></tr><tr><td>POST /v1/user/{uid}/follow</td><td>MANAGE_USER_FOLLOWING</td><td><a data-mention href="../users/follow-user">follow-user</a></td></tr><tr><td>POST /v1/user/{uid}/unfollow</td><td>MANAGE_USER_FOLLOWING</td><td><a data-mention href="../users/unfollow-user">unfollow-user</a></td></tr><tr><td>GET /agent/v1/signals/{signalId}/get</td><td>MANAGE_SIGNALS</td><td><a data-mention href="../signals/get-signal">get-signal</a></td></tr><tr><td>GET  /agent/v1/signals/{signalId}/subscribers</td><td>MANAGE_SIGNALS</td><td><a data-mention href="../signals/subscribers">subscribers</a></td></tr><tr><td>GET  /agent/v1/signals/list</td><td>MANAGE_SIGNALS</td><td><a data-mention href="../signals/list-signals">list-signals</a></td></tr><tr><td>POST /agent/v1/signals/create</td><td>MANAGE_SIGNALS</td><td><a data-mention href="../signals/create-signal">create-signal</a></td></tr><tr><td>POST /agent/v1/signals/{signalId}/update</td><td>MANAGE_SIGNALS</td><td><a data-mention href="../signals/update-signal">update-signal</a></td></tr><tr><td>POST /agent/v1/signals/{signalId}/delete</td><td>MANAGE_SIGNALS</td><td><a data-mention href="../signals/delete-signal">delete-signal</a></td></tr><tr><td>POST /agent/v1/signals/{signalId}/subscribe</td><td>MANAGE_SIGNALS</td><td><a data-mention href="../signals/subscribe-signal">subscribe-signal</a></td></tr><tr><td>POST /agent/v1/signals/{signalId}/unsubscribe</td><td>MANAGE_SIGNALS</td><td><a data-mention href="../signals/unsubscribe-signal">unsubscribe-signal</a></td></tr><tr><td>POST /agent/v3/stream/{streamId}/share</td><td>SEND_MESSAGES</td><td><a data-mention href="../streams-conversations/all-streams-endpoints/share-v3">share-v3</a></td></tr><tr><td>POST /agent/v4/stream/{streamId}/message/create</td><td>SEND_MESSAGES</td><td><a data-mention href="../messages/create-message-v4">create-message-v4</a></td></tr><tr><td>POST /agent/v4/message/blast</td><td>SEND_MESSAGES</td><td><a data-mention href="../messages/blast-message">blast-message</a></td></tr><tr><td>POST /agent/v4/stream/{:sid}/message/{:mid}/update</td><td>SEND_MESSAGES</td><td><a data-mention href="../messages/update-message-v4">update-message-v4</a></td></tr><tr><td>POST /v1/admin/messagesuppression/{messageId}/suppress</td><td>SUPPRESS_MESSAGES</td><td><a data-mention href="../messages/suppress-message">suppress-message</a></td></tr><tr><td>POST /pod/v1/connection/create</td><td>REQUEST_USER_CONNECTIONS</td><td><a data-mention href="../connections/create-connection">create-connection</a></td></tr><tr><td>POST /pod/v1/im/create</td><td>SEND_MESSAGES</td><td><a data-mention href="../streams-conversations/im-mim-endpoints/create-im-or-mim">create-im-or-mim</a></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">create-presence-feed</a></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">delete-presence-feed</a></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="../streams-conversations/room-endpoints/room-members">room-members</a></td></tr><tr><td>POST /pod/v1/room/{roomId}/membership/add</td><td>MANAGE_ROOMS</td><td><a data-mention href="../streams-conversations/room-endpoints/add-member">add-member</a></td></tr><tr><td>POST /pod/v1/room/{roomId}/membership/demoteOwner</td><td>MANAGE_ROOMS</td><td><a data-mention href="../streams-conversations/room-endpoints/demote-owner">demote-owner</a></td></tr><tr><td>"POST" /pod/v1/room/{roomId}/membership/promoteOwner</td><td>MANAGE_ROOMS</td><td><a data-mention href="../streams-conversations/room-endpoints/promote-owner">promote-owner</a></td></tr><tr><td>POST /pod/v1/room/{roomId}/membership/remove</td><td>MANAGE_ROOMS</td><td><a data-mention href="../streams-conversations/room-endpoints/remove-member">remove-member</a></td></tr><tr><td>POST /pod/v1/room/{roomId}/setActive</td><td>MANAGE_ROOMS</td><td><a data-mention href="../streams-conversations/room-endpoints/de-or-re-activate-room">de-or-re-activate-room</a></td></tr><tr><td>POST /pod/v1/streams/list</td><td>LIST_USER_STREAMS</td><td><a data-mention href="../streams-conversations/all-streams-endpoints/list-user-streams">list-user-streams</a></td></tr><tr><td>POST /pod/v2/user/presence</td><td>SET_PRESENCE</td><td><a data-mention href="../presence/set-presence">set-presence</a></td></tr><tr><td>POST /pod/v1/user/presence/register</td><td>GET_PRESENCE</td><td><a data-mention href="../presence/register-user-presence-interest">register-user-presence-interest</a></td></tr><tr><td>POST /pod/v1/user/search</td><td>GET_BASIC_CONTACT_INFO</td><td><a data-mention href="../users/search-users">search-users</a></td></tr><tr><td>POST /pod/v2/user/presence</td><td>SET_PRESENCE</td><td><a data-mention href="../presence/set-presence">set-presence</a></td></tr><tr><td>POST /pod/v3/room/create</td><td>MANAGE_ROOMS  CREATE_USER_STREAM</td><td><a data-mention href="../streams-conversations/room-endpoints/create-room-v3">create-room-v3</a></td></tr><tr><td>POST /pod/v3/room/search</td><td>MANAGE_ROOMS</td><td><a data-mention href="../streams-conversations/room-endpoints/search-rooms-v3">search-rooms-v3</a></td></tr><tr><td>POST /pod/v3/room/{roomId}/update</td><td>MANAGE_ROOMS</td><td><a data-mention href="../streams-conversations/room-endpoints/update-room-v3">update-room-v3</a></td></tr><tr><td>POST /pod/v3/user/presence</td><td>SET_PRESENCE</td><td><a data-mention href="../presence/set-user-presence">set-user-presence</a></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></tbody></table>

> 🚧 All OBO endpoints respect any existing entitlements or state for the user in session.
>
> For instance, if a user is not already connected to another user, an app cannot send a message to the second user on behalf of the first. Another example is that if a user does not have the "Can Send Files" entitlement in Symphony, an app cannot send a message containing an attachment on behalf of the user.
