# Digital Signage Use Cases Integrate your Firstup content with digital signage networks and proviers using our API. ## Generic Example In this use case, we're going to create multiple locations to post our content to. Each location is in a different country, and needs its content in different languages. Firslty, in Firstup, create your content and topics for each location. ### 1. Before You Start: Authenticate Authenticating connects the external signage aplication to the Firstup APIs. A front-end UI may have a modal where the user enters the authentication credentials, allowing them access to the Firstup content in the external app. Clicking **Connect** sends a request to obtain an access token. This token will authenticate and must be maintained to keep the sign connected. Send a `POST` to get this token. ``` curl -X POST \ https://auth.socialchorus.com/oauth/token \ -F grant_type=client_credentials \ -F client_id= \ -F client_secret= ``` If the credentials are valid, the API will return a JSON response with an `access_token`. This token must be stored securely (e.g., in session storage or a secure state management system) to keep the sign connected. Example response: ``` { "access_token": "abc123exampletoken", "token_type": "bearer", "expires_in": 3600 } ``` ### 2. Get Topics The `v2/Channels` endpoint gets available channels (called [Topics in Creator Studio](https://support.firstup.io/hc/en-us/articles/4413271952663-Topic-vs-Audience)), allowing users to select. Make a `GET` request to the endpoint, including the `Authorization` header with your access token: ``` curl -H "Authorization: Bearer " \ 'https://partner.socialchorus.com/v2/channels' ``` This request returns a paginated list of channels. You can handle pagination using the page.number and page.size parameters as needed. Look [here](https://firstup-api-test.redocly.app/gettingstarted/pagination) for help. **Endpoint** GET /v2/listchannels ### 3. Display Content To display the content, make a `POST` request using the `v2/content` endpoint. The topics selected by the user are passed into the `filter.channels.id`. **Endpoint** GET /v2/content