# Create ad Source: https://docs.beyondwords.io/api-reference/ads/create post /projects/{project_id}/ads Creates an ad in a project # Delete ad Source: https://docs.beyondwords.io/api-reference/ads/delete delete /projects/{project_id}/ads/{id} Deletes an ad from a project # List ads Source: https://docs.beyondwords.io/api-reference/ads/list get /projects/{project_id}/ads Lists ads within a project # Get ad Source: https://docs.beyondwords.io/api-reference/ads/show get /projects/{project_id}/ads/{id} Gets an ad from a project # Update ad Source: https://docs.beyondwords.io/api-reference/ads/update put /projects/{project_id}/ads/{id} Updates an ad in a project # Get ad analytics Source: https://docs.beyondwords.io/api-reference/analytics/ad-analytics get /projects/{project_id}/ads/{id}/analytics Retrieve analytics for a single ad in a project. # List ads analytics Source: https://docs.beyondwords.io/api-reference/analytics/ads-analytics get /projects/{project_id}/ads/analytics Retrieve analytics overview for all ads in a project. # Get content analytics Source: https://docs.beyondwords.io/api-reference/analytics/content-analytics get /projects/{project_id}/content/{id}/analytics Retrieve analytics for some specific content. # List content analytics Source: https://docs.beyondwords.io/api-reference/analytics/contents-analytics get /projects/{project_id}/content/analytics Retrieves an analytics overview for all content items in a project # Get organization analytics Source: https://docs.beyondwords.io/api-reference/analytics/organization-analytics get /organization/analytics Retrieves analytics for all projects within an organization # Get project analytics Source: https://docs.beyondwords.io/api-reference/analytics/project-analytics get /projects/{id}/analytics Retrieves analytics for a project # List projects analytics Source: https://docs.beyondwords.io/api-reference/analytics/projects-analytics get /projects/analytics Retrieves an analytics overview for all projects within an organization # Create content Source: https://docs.beyondwords.io/api-reference/content/create post /projects/{project_id}/content Creates a content item in your project # Delete content Source: https://docs.beyondwords.io/api-reference/content/delete delete /projects/{project_id}/content/{id} Delete a content item from your project # List content Source: https://docs.beyondwords.io/api-reference/content/list get /projects/{project_id}/content Lists content within a project # Content overview Source: https://docs.beyondwords.io/api-reference/content/overview Overview of the content object and its properties This object represents an item of content that belongs to a project. | Property | Type | Description | | ------------------------------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `id` | string | Unique UUID for the object. | | `status` | string | The current status of the content processing operation. This value will change as the content is processed. Possible values are `draft`, `queued`, `processing`, `processed`, `skipped`, `error` | | `type` | string | The type. Possible values are `auto_segmet`, `manual_segment` or `audio_upload` | | `title` | string | The content title. | | `summary` | string | The content summary. | | `body` | string | The content body. | | `source_id` | string | The externally-provided source identifier of the content. For example, this could be the id of the content in your CMS. | | `source_url` | string | The URL that contains the source content. For example, this could be the public URL of the content. | | `author` | string | The author of the content. | | `image_url` | string | The feature image URL of the content. | | `metadata` | object | The arbitrary metadata associated with content. For example, this could be `{"category": "sport"}` | | `audio` | array | The array of generated audio files for the entire content. | | `audio.id` | integer | Unique identifier for the audio object. | | `audio.content_type` | string | The MIME type of the audio file according to the IANA specification. | | `audio.url` | string | The URL of the generated audio file. | | `audio.duration` | integer | The duration of the generated audio file in milliseconds. | | `video` | array | The array of generated video files for the entire content. | | `segments` | array | The array of segments in the content | | `segments.id` | integer | Unique identifier for the segment object | | `segments.marker` | string | The marker associated with the segment. To support playback from segments (i.e. paragraphs), you need to use the [BeyondWords Player](https://github.com/beyondwords-io/player) and [add markers to the elements](https://github.com/beyondwords-io/player/blob/main/doc/segments-playback.md). | | `segments.section` | string | The section type of the segment. Possible values are `title`, `summary`, or `body` | | `segments.content_type` | string | The content type of the segment. Possible values are `text`, `audio`, or `image`. Text and audio will be included in generated audios. Text, audio, and images will be included in generated videos (coming soon). | | `segments.text` | string | The plain text for this segment if `segment.content_type` is `text` | | `segments.audio_url` | string | The URL of the uploaded audio file for this segment if the `segment.content_type` is `audio` | | `segments.image_url` | string | The URL of the uploaded image file for this segment if the `segment.content_type` is `image` | | `segments.language` | object | The language object associated with this segment if the `segment.content_type` is `text` | | `segments.language.code` | string | The language code of the segment if the `segment.content_type` is `text` | | `segments.language.name` | string | The language name of the segment if the `segment.content_type` is `text` | | `segments.voice` | object | The voice object associated with this segment if the `segment.content_type` is `text` | | `segments.voice.id` | integer | The id of the voice used to generate the audio of the segment if the `segment.content_type` is text | | `segments.voice.name` | string | The name of voice used to generate the audio of the segment if the `segment.content_type` is `text` | | `segments.start_time` | integer | The start time of this segment in milliseconds. This may not exactly match the summed durations because of audio alignment gaps. | | `segments.duration` | integer | The duration of this segment in milliseconds. | | `segments.created` | string | Time at which the segment object was created (ISO 8601). | | `segments.updated` | string | Time at which the segment object was updated (ISO 8601). | | `published` | boolean | Whether the content will appear in the BeyondWords Players | | `publish_date` | string | Time at which the content was published or is scheduled to be published (ISO 8601). | | `ads_enabled` | boolean | Whether adverts will play for this content in the BeyondWords Players. If you don't have any ads then no ads will play. | | `auto_segment_updates_enabled` | boolean | Whether the media files will be regenerated when the `title`, `summary` or `body` content is updated with `auto_segment` | | `created` | string | Time at which the object was created (ISO 8601). | | `updated` | string | Time at which the object was updated (ISO 8601). | # Regenerate content Source: https://docs.beyondwords.io/api-reference/content/regenerate post /projects/{project_id}/content/{id}/regenerate Reprocess content in a project. # Introduction to segments Source: https://docs.beyondwords.io/api-reference/content/segments ## Segments Each content item can have multiple segments. For instance, an article typically includes a title, a summary and a body. The body itself typically contains multiple paragraphs, which may include multimedia elements such as images, audio clips, and videos. These individual components are referred to as segments. Segmenting content enables flexibility, allowing for a range of features when combined with the [BeyondWords Player](https://github.com/beyondwords-io/player). These include skipping between segments, initiating playback from specific segments (e.g., clicking play on a paragraph), and highlighting segments during playback (e.g., paragraph highlighting as it plays). You have three options when it comes to generating audio: `auto_segment`, `manual_segment`, or `audio_upload`. ### auto\_segment We recommend the `auto_segment` option for publishers seeking a simple way to generate audio versions of their articles. To use this option set `type` property to `auto_segment` whenever you create or update a content item. Using this option, you are required to submit data for the `body` property, with the `title` and `summary` properties being optional additions. Once submitted, BeyondWords will automatically segment the `body` data into `segments`. In the initial response, the `segments` will be an empty array, as automatic segmenting is an asynchronous operation. However, once the audio has been generated and you retrieve a content item using the `?segments=full` query parameter, you will be able to view the individual segments. **Example request and responses:** ```json Example POST request { "type": "auto_segment", "title": "

Your content title text

", "summary": "

Your content summary text

", "body": "

Your content body text

", "source_id": "article-id-in-your-cms", "source_url": "https://example.com/some-article", "author": "Steve Jobs", "image_url": "https://example.com/image.jpeg", "metadata": { "key": "value" }, "published": true, "publish_date": null, "ads_enabled": true, "auto_segment_updates_enabled": true } ``` ```json Example POST response { "type": "auto_segment", "status": "queued", "id": "d7dfd636-098c-4b1b-83e5-15a3cba5a0bd", "title": "

Your content title text

", "summary": "

Your content summary text

", "body": "

Your content body text

", "source_id": "article-id-in-your-cms", "source_url": "https://example.com/some-article", "author": "Steve Jobs", "image_url": "https://example.com/image.jpeg", "audio": [], "video": [], "segments": [], "is_copy": false, "ads_enabled": true, "title_voice_id": null, "summary_voice_id": null, "body_voice_id": null, "metadata": { "key": "value" }, "created": "2023-01-01T00:00:00Z", "updated": "2023-01-01T00:00:05Z", "published": true, "publish_date": "2023-01-01T00:00:00Z", "auto_segment_updates_enabled": true } ``` ```json Example GET response (processed) { "type": "auto_segment", "status": "processed", "id": "d7dfd636-098c-4b1b-83e5-15a3cba5a0bd", "title": "

Your content title text

", "summary": "

Your content summary text

", "body": "

Your content body text

", "source_id": "article-id-in-your-cms", "source_url": "https://example.com/some-article", "author": "Steve Jobs", "image_url": "https://example.com/image.jpeg", "audio": [ { "id": 36553942, "content_type": "application/x-mpegURL", "url": "https://example.com/media.m3u8", "duration": 7051 }, { "id": 36553929, "content_type": "audio/mpeg", "url": "https://example.com/media_compiled.mp3", "duration": 7056 } ], "video": [], "segments": [ { "marker": "0a2bae2e-542f-498e-95c4-91dfc403eb8b", "section": "title", "start_time": 45, "duration": 1730, "id": 95737414, "content_type": "text", "text": "Your content title text", "audio_url": null, "image_url": null, "language": { "code": "en_US", "name": "English (USA)" }, "voice": { "id": 298, "name": "Matthew" }, "created": "2023-07-26T05:02:24Z", "updated": "2023-07-26T05:02:25Z" }, { "marker": "b012ad1b-7366-4ed1-a6f2-b855665065ad", "section": "summary", "start_time": null, "duration": null, "id": 95737415, "content_type": "text", "text": "Your content summary text", "audio_url": null, "image_url": null, "language": { "code": "en_US", "name": "English (USA)" }, "voice": { "id": 776, "name": "Sara" }, "created": "2023-07-26T05:02:24Z", "updated": "2023-07-26T05:02:25Z" }, { "marker": "ad212f8f-8356-4059-9ee9-c5b1406f70b7", "section": "body", "start_time": 1841, "duration": 2595, "id": 95737416, "content_type": "text", "text": "Your content summary text", "audio_url": null, "image_url": null, "language": { "code": "en_US", "name": "English (USA)" }, "voice": { "id": 776, "name": "Sara" }, "created": "2023-07-26T05:02:24Z", "updated": "2023-07-26T05:02:25Z" }, { "marker": "76bfc232-2755-4da7-86b1-222a66434444", "section": "body", "start_time": 4503, "duration": 2559, "id": 95737417, "content_type": "text", "text": "Your content body text", "audio_url": null, "image_url": null, "language": { "code": "en_US", "name": "English (USA)" }, "voice": { "id": 776, "name": "Sara" }, "created": "2023-07-26T05:02:24Z", "updated": "2023-07-26T05:02:25Z" } ], "ads_enabled": true, "is_copy": false, "title_voice_id": null, "summary_voice_id": null, "body_voice_id": null, "metadata": { "key": "value" }, "created": "2023-01-01T00:00:00Z", "updated": "2023-01-01T00:00:05Z", "published": true, "publish_date": "2023-01-01T00:00:00Z", "auto_segment_updates_enabled": true } ```
### manual\_segment We recommend the `manual_segment` option for publishers seeking enhanced control over the audio conversion of their content. This is particularly beneficial for those who wish to integrate the content API into their editorial interface or create videos with multiple images (coming soon). To use this option set `type` property to `manual_segment` whenever you create or update a content item. Using this option, you **should not** submit any data to the `title`, `body` or `summary` properties. Instead, you will need to submit an array of one or multiple `segments`. For each segment you submit you will need to submit data to the following properties: | Property | Options | | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `section` | Use this property define the section type of a segment as either `title`, `summary` or `body`. | | `content_type` | If `content_type` is `text` then submit plain text to be converted into audio. If no `voice_id` is submitted then the audio will be generated with the default project voices assigned title, summary or body in the project. | | | If `content_type` is `audio` then submit an `audio_url` to be uploaded. | | | If `content_type` is `image` then submit an `image_url` to be uploaded. | Once submitted, BeyondWords will generate the audio for segments with text and then concatenate all segments into a single audio. Text and audio will be included in generated audios and text, audio and images will be included in generated videos (coming soon). **Example request and responses:** ```json Example POST request { "type": "manual_segment", "source_id": "example-source-id", "source_url": "https://example.com/some-article", "author": "Steve Jobs", "image_url": "https://example.com/image.jpeg", "metadata": { "key": "value" }, "segments": [ { "section": "title", "marker": "75aa616c-1849-4d70-bb3b-7691cc6310a5", "content_type": "text", "text": "This is a title", "voice": { "id": 1 } }, { "section": "body", "marker": "75aa616c-1849-4d70-bb3b-7691cc6310a2", "content_type": "text", "text": "This is a paragraph", "voice": { "id": 1 } }, { "section": "body", "content_type": "image", "image_url": "https://example.com/image.jpeg" }, { "section": "body", "marker": "75aa616c-1849-4d70-bb3b-7691cc6311a5", "content_type": "text", "text": "This is another paragraph", "voice": { "id": 1 } }, { "section": "body", "marker": "75aa616c-1849-4d71-bb3b-7691cc6310a5", "content_type": "audio", "audio_url": "https://example.com/audio.mp3" }, { "section": "body", "marker": "75aa416c-1849-4d70-bb3b-7691cc6310a5", "content_type": "text", "text": "This is another paragraph", "voice": { "id": 1 } } ], "published": true, "ads_enabled": false, "auto_segment_updates_enabled": false } ``` ```json Example GET response { "id": "d7dfd636-098c-4b1b-83e5-15a3cba5a0bd", "status": "processed", "type": "manual_segment", "title": null, "summary": null, "body": null, "source_id": "example-source-id", "source_url": "https://example.com/some-article", "author": "Steve Jobs", "image_url": "https://example.com/image.jpeg", "metadata": { "key": "value" }, "audio": [ { "id": 1, "content_type": "application/vnd.apple.mpegurl", "url": "https://example.com/audio.m3u8", "duration": 10000 }, { "id": 2, "content_type": "audio/mpeg,", "url": "https://example.com/audio.mp3", "duration": 10000 } ], "video": [], "segments": [ { "id": 1, "section": "title", "marker": "75aa616c-1849-4d70-bb3b-7691cc6310a5", "content_type": "text", "text": "This is a title", "audio_url": null, "image_url": null, "language": { "code": "en_US", "name": "English" }, "voice": { "id": 123, "name": "Steve" }, "start_time": 3, "duration": 2000, "created": "2023-01-01T00:00:00Z", "updated": "2023-01-01T00:00:05Z" }, { "id": 2, "section": "body", "marker": "75aa616c-1849-4d70-bb3b-7691cc6310a2", "content_type": "text", "text": "This is a paragraph", "audio_url": null, "image_url": null, "language": { "code": "en_US", "name": "English" }, "voice": { "id": 123, "name": "Steve" }, "start_time": 3, "duration": 2000, "created": "2023-01-01T00:00:00Z", "updated": "2023-01-01T00:00:05Z" }, { "id": 3, "section": "body", "content_type": "image", "text": null, "audio_url": null, "image_url": "https://example.com/image.jpeg", "start_time": 3, "duration": 2000, "created": "2023-01-01T00:00:00Z", "updated": "2023-01-01T00:00:05Z" }, { "id": 4, "section": "body", "marker": "75aa616c-1849-4d70-bb3b-7691cc6311a5", "content_type": "text", "text": "This is another paragraph", "audio_url": null, "image_url": null, "language": { "code": "en_US", "name": "English" }, "voice": { "id": 123, "name": "Steve" }, "start_time": 3, "duration": 2000, "created": "2023-01-01T00:00:00Z", "updated": "2023-01-01T00:00:05Z" }, { "id": 5, "section": "body", "marker": "75aa616c-1849-4d71-bb3b-7691cc6310a5", "content_type": "audio", "text": null, "audio_url": "https://example.com/image.mp3", "image_url": null, "start_time": 3, "duration": 2000, "created": "2023-01-01T00:00:00Z", "updated": "2023-01-01T00:00:05Z" }, { "id": 6, "section": "body", "marker": "75aa416c-1849-4d70-bb3b-7691cc6310a5", "content_type": "text", "text": "This is another paragraph", "audio_url": null, "image_url": null, "language": { "code": "en_US", "name": "English" }, "voice": { "id": 123, "name": "Steve" }, "start_time": 3, "duration": 2000, "created": "2023-01-01T00:00:00Z", "updated": "2023-01-01T00:00:05Z" } ], "ads_enabled": true, "auto_segment_updates_enabled": true, "created": "2023-01-01T00:00:00Z", "updated": "2023-01-01T00:00:05Z" } ``` ### audio\_upload We recommend `audio_upload` option for publishers that want to host podcasts or human-recorded articles on BeyondWords and leverage the BeyondWords Player, podcast feeds and analytics. To use this option set the `type` property to `audio_upload` whenever you create or update a content item. Using this option, you should submit a `title`, `body` and `segments` array with a single segment object with `section` set to `title`, `content_type` set to `audio` and an `audio_url` with a URL to the audio file to be upload. The title and body text will not be converted into audio. However the text may be present in the player or podcast feeds depending on your player or playlist settings. **Example request:** ```json Example POST request { "type": "audio_upload", "title": "Podcast episode title", "body": "Podcast episode description", "source_id": "example-source-id", "source_url": "https://example.com/some-article", "author": "Harry Stebbings", "image_url": "https://example.com/image.jpeg", "metadata": { "key": "value" }, "segments": [ { "section": "title", "content_type": "audio", "audio_url": "https://example.com/audio.mp3" } ], "published": true, "ads_enabled": true, "auto_segment_updates_enabled": false } ``` # Get content Source: https://docs.beyondwords.io/api-reference/content/show get /projects/{project_id}/content/{id} Get a content item from your project # Syndicated articles Source: https://docs.beyondwords.io/api-reference/content/syndicated Reuse audio articles across multiple projects or websites without generating audio for each one. Syndicated articles let publishers reuse audio articles across different projects - such as multiple websites - without needing to generate new audio for each one. If you publish the same article on several sites (each represented as a separate project), you can simply reuse the original audio, ensuring consistency and reducing costs. This feature must be enabled by the BeyondWords team. Please contact us if you’d like to discuss enabling it for your account. ## Example use case A publisher has multiple websites (each as a separate project) and wants to publish the same article on all of them. Instead of generating new audio for each website, they can reuse the audio article from the first project. By using the same `source_id` in both requests: Project A (Website 1) will generate the audio. Project B (Website 2) will create a new audio article that reuses Project A’s audio file. ## How it works A user submits a POST request with a [source\_id](/api-reference/content/create#body-source-id): 1. If no audio article exists with that `source_id`, a new audio file is generated. 2. If an audio article with that `source_id` exists in any of your other projects, the existing audio file is reused.

A new article is still created in the new project, but it references the existing audio file. ## Identifying duplicates via the API You can distinguish between original and reused audio articles via the `is_copy` property that is returned in the response or the [`audio.updated`](/docs-and-guides/integrations/webhooks#audio-updated-payload) payload: `is_copy`: false → The original (parent) article that generated the audio. `is_copy`: true → A duplicated (child) article that reuses the audio. ## Inherited fields When creating a new audio article using an existing `source_id`, certain fields are automatically inherited from the original (parent) article. These fields cannot be overwritten in the new (child) article: * `status` * `title` * `type` * `summary` * `body` * `audio` * `video` * `summarization` * `segments` Other fields, such as `source_url` can be modified as needed in the `POST` request. This ensures that core audio content remains consistent across projects. # Update content Source: https://docs.beyondwords.io/api-reference/content/update put /projects/{project_id}/content/{id} Update a content item from your project # Overview Source: https://docs.beyondwords.io/api-reference/overview Learn about the BeyondWords API # BeyondWords API overview The BeyondWords API is a RESTful API that provides headless access to the entire platform, allowing you to programmatically create, manage, and deliver audio content. ## API basics * **Base URL**: `https://api.beyondwords.io/` * **Format**: The API accepts form-encoded request bodies and returns JSON-encoded responses * **Design**: Uses predictable resource-oriented URLs and standard HTTP methods * **Status Codes**: Uses standard HTTP response codes to indicate success or failure ## Authentication All API requests require authentication using your Project ID and API Key. ### Obtaining credentials 1. [Create a BeyondWords account](https://dash.beyondwords.io/auth/signup) 2. Create a project in the dashboard 3. Navigate to **Settings > Integrations > API** to find your Project ID and API Key ### Security best practices * Your API key carries many privileges, so be sure to safeguard it * Never share your API key in publicly accessible places such as client-side code or GitHub * Consider using environment variables to store your API credentials ### Authentication methods Most endpoints require the `X-Api-Key` header for authentication: ```bash # API request example curl -X GET "https://api.beyondwords.io/v1/endpoint" \ -H "X-Api-Key: YOUR_API_KEY" ``` Most endpoints also require your Project ID, which is typically included as a path parameter. Each endpoint in this documentation will clearly indicate whether a Project ID is required. ## Request guidelines * All API requests must use HTTPS; requests over plain HTTP will fail * Requests without proper authentication will be rejected with a 401 Unauthorized response * Include a content-type header of `application/json` for requests with JSON bodies ## Versioning The API uses versioned endpoints to ensure compatibility: * Current stable version: `v1` * Include the version in the URL path: `https://api.beyondwords.io/v1/endpoint` ## Error handling The API uses conventional HTTP response codes: * `2xx` - Success * `4xx` - Client errors (invalid request) * `5xx` - Server errors Error responses include a JSON body with details: ```json { "error": { "code": "invalid_request", "message": "A detailed error message", "details": { /* Additional context */ } } } ``` ## Getting help If you encounter issues or have questions: * Contact [support@beyondwords.io](mailto:support@beyondwords.io) # Get player by content ID Source: https://docs.beyondwords.io/api-reference/player/show get /projects/{project_id}/player/by_content_id/{id} Gets player data related to a content item # Get player by playlist ID Source: https://docs.beyondwords.io/api-reference/player/show-1 get /projects/{project_id}/player/by_playlist_id/{id} Gets player data related to a playlist # Get player by source ID Source: https://docs.beyondwords.io/api-reference/player/show-2 get /projects/{project_id}/player/by_source_id/{id} Gets player data related to a content item # Get player by source URL Source: https://docs.beyondwords.io/api-reference/player/show-3 get /projects/{project_id}/player/by_source_url/{url} Gets player data related to a content item # Get player by multiple identifiers Source: https://docs.beyondwords.io/api-reference/player/show-4 get /projects/{project_id}/player/by_identifiers/{array} Gets player data related to a content item # Create playlist Source: https://docs.beyondwords.io/api-reference/playlists/create post /projects/{project_id}/playlists Creates a playlist in a project # Delete playlist Source: https://docs.beyondwords.io/api-reference/playlists/delete delete /projects/{project_id}/playlists/{id} Deletes a custom playlist from a project # List playlists Source: https://docs.beyondwords.io/api-reference/playlists/list get /projects/{project_id}/playlists Lists playlists within a project # Get playlist Source: https://docs.beyondwords.io/api-reference/playlists/show get /projects/{project_id}/playlists/{id} Gets a playlist from a project # Get playlist settings Source: https://docs.beyondwords.io/api-reference/playlists/show-1 get /projects/{project_id}/playlists/{playlist_id}/settings Gets the feed settings for a playlist # Update playlist Source: https://docs.beyondwords.io/api-reference/playlists/update put /projects/{project_id}/playlists/{id} Updates a playlist in a project # Update playlist settings Source: https://docs.beyondwords.io/api-reference/playlists/update-1 put /projects/{project_id}/playlists/{playlist_id}/settings Updates the feed settings for a playlist # Create project Source: https://docs.beyondwords.io/api-reference/projects/create post /projects Creates a project in your organization # Delete project Source: https://docs.beyondwords.io/api-reference/projects/delete delete /projects/{id} Deletes a project # List projects Source: https://docs.beyondwords.io/api-reference/projects/list get /projects Lists all projects in your organization # Get project Source: https://docs.beyondwords.io/api-reference/projects/show get /projects/{id} Gets a project from your organization # Update project Source: https://docs.beyondwords.io/api-reference/projects/update put /projects/{id} Updates a project in your organization # Get project voices Source: https://docs.beyondwords.io/api-reference/projects/voices get /projects/{id}/voices Gets a project voices # Create pronunciation rule Source: https://docs.beyondwords.io/api-reference/rules/create post /rules Creates a rule in a organization # Delete pronunciation rule Source: https://docs.beyondwords.io/api-reference/rules/delete delete /rules/{id} Deletes a rule from your organization # List pronunciation rules Source: https://docs.beyondwords.io/api-reference/rules/list get /rules Lists rules in a organization # Get pronunciation rule Source: https://docs.beyondwords.io/api-reference/rules/show get /rules/{id} Gets a rule from your organization # Update pronunciation rule Source: https://docs.beyondwords.io/api-reference/rules/update put /rules/{id} Updates rule in a organizaiton # Get project summarization settings Source: https://docs.beyondwords.io/api-reference/summarization-settings/show get /projects/{project_id}/summarization_settings Get the summarization settings for your project # Update project summarization settings Source: https://docs.beyondwords.io/api-reference/summarization-settings/update put /projects/{project_id}/summarization_settings Update the summarization settings for your project # Get video settings Source: https://docs.beyondwords.io/api-reference/video-settings/show get /projects/{project_id}/video_settings Get the video settings for your project # Update video settings Source: https://docs.beyondwords.io/api-reference/video-settings/update put /projects/{project_id}/video_settings Update the video settings for your project # Members and Roles Source: https://docs.beyondwords.io/docs-and-guides/administration/members-and-roles Learn how to manage team members and their roles in BeyondWords ## Overview In BeyondWords, you can manage team members and their roles in the **Members** section. Click on the top left menu and go to **Organization > Members**. The Members page, which can be found by going to Organization > Members, shows a list of current members. Here, you can see each member that belong to your organization, their role, their status, and their join date. ## Invite a member to your organization To invite a member to your organization: 1. Go to **Organization > Members > All members**. 2. Click the **Invite** button. 3. Enter the email address of the person you want to invite. 4. Enter the first name and last name of the person you want to invite. 5. Select the role for the person you want to invite. 6. Add a profile picture (optional). 7. You can select the project(s) you want your invitee to automatically join. 8. Click **Send invite**. New members will receive an invite link via email along with steps to join the project. In case an email server is filtering out invitation emails, we recommend whitelisting [support@mail.beyondwords.io](mailto:support@mail.beyondwords.io) as a trusted sender in email settings. ## Resend an invite To resend an invite: 1. Go to **Organization > Members > All members**. 2. Click the **⋯** next to the member you want to resend the invite to and then click **Resend invite**. ## Remove a member from your organization To remove a member from your organization: 1. Go to **Organization > Members > All members**. 2. Click the **⋯** next to the member you want to remove and then click **Delete**. ## Change a member's role To change a member's role: 1. Go to **Organization > Members > All members**. 2. Click the **⋯** next to the member you want to change the role of and then click **Edit**. 3. Select the new role from the dropdown menu. 4. Click **Save changes**. ## Change a member's project access To change a member's project access: 1. Go to **Organization > Members > All members**. 2. Click the **⋯** next to the member you want to change the project access of and then click **Edit**. 3. Add or remove projects from the member's project access. 4. Click **Save changes**. Alternatively, you can change a member's project access by going to \*\*Project > **Settings > Members**. ## Create a new role To create a new role: 1. Go to **Organization > Members > Roles**. 2. Click the **+ Role**. 3. Enter the name of the new role. 4. Select the permissions for the new role. 5. Click **Save changes**. ## Edit a role To edit a role: 1. Go to **Organization > Members > Roles**. 2. Click the **⋯** next to the role you want to edit and then click **Edit**. 3. Edit the name and permissions of the role. 4. Click **Save changes**. You cannot edit the Owner role. ## Delete a role To delete a role: 1. Go to **Organization > Members > Roles**. 2. Click the **⋯** next to the role you want to delete and then click **Delete**. 3. Click **Confirm** to delete the role. You cannot delete the Owner, Admin or Collaborator roles. # Organization Source: https://docs.beyondwords.io/docs-and-guides/administration/organization Update your organization details in BeyondWords ### How to update your organization details Click on the top left menu and select Organization. Your organization name will be visible to your team. In organization settings, you can update the following: * Organization name * Legal name * Website * Address * Address line 1 * Address line 2 * City * State * Zip code / Post code * Country Click on the "Save changes" button to save the changes. # Profile Source: https://docs.beyondwords.io/docs-and-guides/administration/profile Update your profile in BeyondWords ### How to update your profile details Click on the top left menu and select Profile. Your profile details will be visible to your team. In profile settings, you can update the following: * First name * Last name * Profile picture Click on the "Save changes" button to save the changes. To update your email address, please contact support. # Projects Source: https://docs.beyondwords.io/docs-and-guides/administration/projects Create and update your projects in BeyondWords In BeyondWords, all your content is organized into Projects. A Project is your AI audio CMS. ## Create a project Click on the top left menu and click **+ Project**. Enter a name for your project. Select the language and accent for your project. Upload a logo for your project. This will make it easier to identify your project in the future. Click **Save changes** to create your project. ## Update project settings Click on the top left menu and click on the project you want to update. Go to the **Settings** tab and click **General**. Here you will be able to update the following: * **Project name** - The name of your project. * **Project logo** - The logo of your project. * **Project time zone** - The time zone of your project. Choose the time zone for scheduling and analytics reporting in your project. * **Automatic publishing** - Whether to automatically publish articles. Enabled by default. To update the default project language, accent and voice, go to the **Voice** tab. # Quota Source: https://docs.beyondwords.io/docs-and-guides/administration/quota Manage your usage limits and quotas ## Overview Each BeyondWords plan has a fixed quota. This quota is shared between all your projects. You can see your quota in the quota widget in the bottom left corner of each project. ## Article quota Each subscription plan includes a specific article quota, which is the maximum number of articles you can generate into audio each month. We consider one article to be up to 5,000 characters, including spaces. Therefore, if an article exceeds this limit, such as being 7,000 characters, it will count as two articles. ### Regenerating articles When you edit an article, such as changing a word in a paragraph and regenerating the audio, this will not count towards your quota. However, changing voices or adding new paragraphs will affect your article limit if the total article size exceeds 5,000 characters. ### Rollover policy Please note that unused articles will not roll over to the next billing cycle, and deleting audio will not restore your article count. The monthly quota renews based on the start date of your subscription. ## Plan changes ### Upgrading your plan If you upgrade your plan, the upgrade takes effect immediately. Your quota will be refreshed with the new article quota limit, and any unused articles from your previous plan will not roll over. Your first payment will be adjusted accordingly if necessary. ### Downgrading your plan If you downgrade your plan, the change will not take effect until the end of your current billing cycle. On the first day of your new billing cycle, your quota will be updated to reflect your new plan, and any unused articles from your previous plan's quota will be lost. Your subscription will automatically renew at the end of each billing cycle, and your article quota will reset. ## Usage-based pricing For Personal, Pro, Plus, and Premium plans, you can enable usage-based pricing, which allows you to access additional articles after your monthly quota is exhausted. The cost per additional article varies by plan: * Personal: \$0.90 per article * Pro: \$0.70 per article * Plus: \$0.60 per article * Premium: \$0.50 per article You can enable usage-based billing and set a monthly limit in the **Organization > Subscriptions > Overage** section. Additional charges will be billed at the end of your billing cycle or whenever your account reaches \$25 in usage, whichever occurs first. # SAML SSO Source: https://docs.beyondwords.io/docs-and-guides/administration/saml-sso Learn how to enable SAML for your Organization to manage logins through an Identity Provider ## SAML setup Organizations on BeyondWords can enable SAML to centralize login management through their Identity Provider (IdP), such as Okta, Microsoft Entra ID, OneLogin, LastPass, Auth0, Bitium, and others. Available to organizations on the Enterprise plan ## 1. Setting up SAML To set up SAML for your organization: ### Contact support Reach out to our team at [support@beyondwords.io](mailto:support@beyondwords.io) from the account associated with the organization owner or an admin. Request SAML to be enabled. ### Receive your setup link We'll share a unique configuration URL where you can connect your Identity Provider. We support most major providers including: * Okta * Microsoft Entra ID * OneLogin * LastPass * Auth0 * Bitium * … and other SAML 2.0-compliant providers. ### Configure the connection Follow your Identity Provider's documentation to complete the SAML configuration using the URL we provide. If needed, we're happy to assist with setup or troubleshooting. ## What happens once SAML is enabled? * All members of your organization will be required to log in via your Identity Provider using SAML. * Email/password login and social sign-in methods (e.g. Google) will be disabled for those users. * Sessions will remain active until logout, but users must use SAML to log back in. * Members can sign in via your IdP's dashboard or click ["Continue with SAML SSO"](https://dash.beyondwords.io/auth/sso-login) on the BeyondWords login page. ## 2. Adding users with SAML enabled Once SAML is enabled, inviting users requires two steps: ### Invite the user to your BeyondWords organization 1. In BeyondWords, navigate to Organization > Members. 2. Click Invite, then enter the user’s email address to send the invitation. ### Provision the user in your Identity Provider 1. Ensure the user is also added to your IdP and assigned to the BeyondWords SAML application. 2. If they are only invited in BeyondWords or only added in your IdP, they won't be able to log in. Both steps must be completed. Inviting someone in BeyondWords without provisioning them in your IdP—or vice versa—won't grant them access. If you have questions during setup or encounter any issues, our support team is here to help at [support@beyondwords.io](mailto:support@beyondwords.io). # Subscriptions Source: https://docs.beyondwords.io/docs-and-guides/administration/subscriptions Manage your subscription and billing When you sign up, you’ll automatically start on the **Pilot** plan. To check your subscription, go to **Organization > Subscriptions > Plans**. You’ll find a breakdown of all available plans, plus a comparison table to help you see what’s included in each. ## Change your plan To change your plan, go to **Organization > Subscriptions > Plans**. Select the plan you want to change to and click **Upgrade** or **Downgrade**. We offer five public plans: Pilot, Personal, Pro, Plus, Premium. For larger organizations, there’s also an Enterprise option, tailored to specific needs and usage. ## Cancel your subscription To cancel your subscription, go to **Organization > Subscriptions > Billing**. Click **Cancel** and follow the instructions. ## Change your billing information To change your billing information, go to **Organization > Subscriptions > Billing**. Click **Manage billing**. You will be redirected to Stripe where you can update your billing information. ## Change your payment method To change your payment method, go to **Organization > Subscriptions > Billing**. Click **Manage billing**. You will be redirected to Stripe where you can update your payment method. ## Change your billing email To change your billing email, go to **Organization > Subscriptions > Billing**. Click **Manage billing**. You will be redirected to Stripe where you can update your billing email. ## Change your billing address To change your billing address, go to **Organization > Subscriptions > Billing**. Click **Manage billing**. You will be redirected to Stripe where you can update your billing address. ## Add your Tax ID/VAT number To add your Tax ID/VAT number, go to **Organization > Subscriptions > Billing**. Click **Manage billing**. You will be redirected to Stripe where you can add your Tax ID/VAT number. ## Change your billing country To change your billing country, go to **Organization > Subscriptions > Billing**. Click **Manage billing**. You will be redirected to Stripe where you can change your billing country. # Player Source: https://docs.beyondwords.io/docs-and-guides/analytics/player Track and analyze audio engagement ## Overview The BeyondWords player tracks how your audience engage, distilling data into a set of key metrics for clear and actionable insights. ![player](https://mintlify.s3.us-west-1.amazonaws.com/beyondwords/assets/images/new-images/analytics/playeranalytics.png) ## Metrics BeyondWords tracks the following metrics on a per-project and per-article basis. The metrics are updated every few minutes. ### Plays The number of times users hit play. We count one play per user session. ### Loads The number of times a page was loaded with the player. We count one load per user session. ### Engagement rate The percentage of Loads that converted into Plays. We calculate this as Plays divided by Loads. ### Unique users The number of unique users who hit play. We identify users with an anonymous ID stored in their browser. ### Avg. playback duration The average percentage completed per play. We measure this across all plays. ### Drop-off analysis The percentage of users remaining at each 10% interval. Shows how many continue from start to finish. ### Playback time The cumulative playback time of all plays. We measure this across all plays. ### Avg. playback time The average time spent per play. We measure this across all plays. ### Device analysis The percentage of users who played on each device. ## Filter metrics You can filter the metrics by the following: * **Content type**: Articles or Summaries * **Device**: Desktop, Mobile (web), Tablet (web), iOS (SDK), Android (SDK) * **Date range**: All time, Month to date, Today, Yesterday, Last 7 days, Last 14 days, Last 30 days, Last 90 days, Last 180 days, Custom # Preferences Source: https://docs.beyondwords.io/docs-and-guides/analytics/preferences Configure analytics settings and preferences ## Overview You can configure analytics preferences for your project. Go to **Project > Analytics > Preferences** ![player](https://mintlify.s3.us-west-1.amazonaws.com/beyondwords/assets/images/new-images/analytics/analyticspreferences.png) ### General #### Track analytics You can enable or disable analytics tracking for your project. You will need to **Save changes** to apply changes. #### Track unique users You can enable or disable unique user tracking for your project. You will need to **Save changes** to apply changes. ## Integrations ### Send data to Google Analytics To send data to Google Analytics: 1. Enter your Google Analytics tracking ID. 2. Turn on **Send data to Google Analytics**. 3. Click **Save changes**. #### BeyondWords metrics in Google Analytics A page view involving an embedded BeyondWords Player will trigger one of five events, which together form the BeyondWords Player Event Category. | Event | Recorded When... | | ------------ | ------------------------------------------------------------- | | Load | The BeyondWords Player loads on the webpage. | | Play | A user clicks 'play' on a BeyondWords Player. | | x% Listened | A user plays a percentage of the audio (e.g. 10%, 20%, etc.) | | Advert Click | A user clicks the advertised link while an advert is playing. | | Complete | A user plays 100% of the audio. | #### Create BeyondWords Player Event reports You can create reports for specific events - for example, the **Play** action: 1. Go to **Explore** in the left sidebar and click on **Blank** to create a new exploration. 2. Give the exploration a name and then click **+** besides **Segments** followed by **Create a new segment**. 3. Choose **Event segment** as the segment type. 4. Enter a segment name and description — for example, **BeyondWords Player plays**. 5. In the **Add new condition** dropdown, select the dimension **Event** and choose **Event name**. 6. Press **Add filter** and edit the condition to contain the event **Play** and select **Apply**. 7. Add the dimension **Page title** in dimensions and metric **Event count** in metrics. 8. Add the imported segments, dimensions and metrics in the **Settings** tab to build a report. 9. You can now view the event count for specific pages which can better help you analyze your audience engagement. You can also import different dimensions and metrics to build meaningful reports that suit your needs. ### Send data to Custom analytics URL To send data to a custom analytics URL: 1. Enter the URL to send data to. 2. Turn on **Send data to Custom analytics URL**. 3. Click **Save changes**. ```javascript Example event expandable { "event_type": "play", "device_type": "desktop", "media_type": "content", "media_variant": "article" "project_id": 123, "content_id": "3f57001d-cb30-42c1-ad6f-047e813c360f", "source_id": "example-source-id", "analytics_id": 333, "ad_id": null, "media_id": 555, "media_format": "audio", "local_storage_id": "bef9218d-3871-450e-a7fa-5da65102f532", "listen_session_id": "839ff785-0cb8-4e74-a061-506f571c79ce", "session_created_at": 1672531200000, "duration": 123.45, "listen_length_seconds": 0.2, "listen_length_percent": 0.1620089105, "speed": 1, "segment_playback_enabled": true, "location": "https://example.com", "referrer": "https://example.com" "player_version": "1", "player_npm_version": "1.2.3", } ``` # Audio articles Source: https://docs.beyondwords.io/docs-and-guides/content/articles Learn how to manage your audio articles in BeyondWords ## Overview Audio articles are the core content type in BeyondWords. Each article can also have an **audio summary**, **video article**, and **video summary** associated with it. In the **Articles** section you will see a list of all your audio articles ordered by the date that they were published. For each article you will be able to see the **Title**, **Duration**, **Publication date**, **Feature image**, **Visibility status**, whether it has a **summary** and or **video**, and a direct link to **analytics**. ![editor](https://mintlify.s3.us-west-1.amazonaws.com/beyondwords/assets/images/new-images/content/articles.png) ## Article actions For each article you can do the following by clicking on the **⋯** button: ### Edit the article This will open the **Editor** where you can edit the article content. ### Regenerate the audio This will regenerate the audio for the article. Useful for applying new custom pronunciations. ### Replace the audio This lets you replace the AI-generated audio with a human-recorded version. ### Duplicate the article This will create a new draft copy of the article that you can edit. ### Download the audio This will download the audio file for the article. ### Get the embed code This will open a modal where you can demo the audio in the player and also copy the player embed code. ### Copy the shareable URL This will copy a URL that you can share with others to listen to the article. ### Copy the identifiers Here you can copy the **Content ID**, **Source ID**, or **Source URL** for the article. ### Set the visibility This will toggle the visibility of the article between **Public** and **Private**. ### Delete the article This will delete the article from your project. ## Summaries Click the summary icon to generate an audio summary for the article. If a summary already exists, a dialog will open where you can copy the player embed code with the summary or download the summary audio. ## Article videos Click the video icon to generate a video for the article. If a video already exists, a dialog will open where you can copy the player embed code with the video or download the video. ## **Sorting and Filtering** You can search your articles using: * **Sort by**: Status, Creation Date, Duration, or Published Date * **Filter by**: Status, Created Date, or Visibility ## **Bulk actions** Apply changes to multiple articles at once: * **Regenerate** audio for multiple articles (useful when updating pronunciations) * **Set visibility** (Public or Private) * **Delete** multiple articles # Data attributes Source: https://docs.beyondwords.io/docs-and-guides/content/data-attributes Learn how content extraction can use data attributes. ## Overview The [Magic Embed](/docs-and-guides/integrations/magic-embed/overview) and [RSS](/docs-and-guides/integrations/rss-feed-importer) integrations automatically extract content from your web page such as the title, author, and publish date. If you wish to explicitly set these fields you can add some data attributes to your HTML. Additionally, when submitting HTML content through the [API](/api-reference/content/create), you can use data attributes to explicitly set these fields and control various aspects of your content. ## Global attributes The following data attributes can be added anywhere in your web page. In the example below, they are added to the `` tag: ```html This title won't be used ``` **Publish date** The date at which the article was published. If it is in the future then the audio will not load in the player until the specified time. A timezone suffix may be specified, e.g. `Z` or `+01:00`. Defaults to UTC. **Published** If published is false then the audio will not load in the player, regardless of the publish date attribute. The audio is still generated and the content will still appear in the dashboard. **Voice IDs** The voices that should be used for the title, summary and body section of your article. You can copy voice IDs from the voices in the dashboard under **Project > Preferences > Voices** tab, or fetch them from the [API](/api-reference/projects/voices#get-project-voices). If not specified, the default voice for your project will be used. **Article language** The default language of your article which affects audio synthesis. If not specified, the default language for your project will be used. ## Scoped attributes The following data attributes can be added to your web page to override the behavior for specific parts of your content. **Voice IDs** The following voice IDs will take precedence over the default voice IDs. ```html

This paragraph will be voiced by Joe.

This paragraph will be voiced by Eddie.

This one, too.

``` **Language** The following languages will take precedence over the default language: ```html

This paragraph will be read out in British English.

Ce paragraphe sera lu en français.

``` **Feature image** The feature image attribute can be added to an image on your web page to make it the primary image for your article: ```html ``` The feature image will appear in videos along with any other images extracted from the HTML. # Editor Source: https://docs.beyondwords.io/docs-and-guides/content/editor Learn how to generate audio using the Editor ## Overview You can use the Editor to generate and edit audio from text. You can: * Paste text directly to create audio and make edits. * Modify audio generated through our API, Magic Embed, or CMS plugins. Each audio article is structured into segments, typically aligned with article paragraphs. By default, all segments use the project's language and voice, but you can adjust them individually as needed. ![editor](https://mintlify.s3.us-west-1.amazonaws.com/beyondwords/assets/images/new-images/content/editor.png) ### Use the Editor to generate audio In your project, go to the Content section and click `"+ Article"` to open the Editor. Paste your article text into the editor. The text paragraphs will be automaticlally split into segments and assigned the the default project language and voice. You can edit the default project language and voice in the [voices tab](/docs-and-guides/content/preferences/voices). Click the "Generate" button to generate audio for your article. It can take a few seconds to generate audio depending on the length of the article. Once generated, the audio will be accessible in the Articles section. ### Use the Editor to modify audio In your project, go to the Content section, find the Article you want to modify and click on the (•••) menu next to it, and click "Edit". Edit the text of the segment you want to modify. Click the "Update" button to apply the changes and regenerate the audio for your article. It can take a few seconds to regenerate the audio depending on your changes. Once regenerated, the updated audio will be accessible in the Articles section. ## Editor sidepanel For each audio article in the Editor, you can configure content preferences like voices, summarization, video, background music, visibility, pronunciations, and article information in the left sidebar - giving you full control over how your audio is generated and distributed. ### Voices In the Voices tab, you can either select one of our premade voices or upload your own to create a custom voice clone for your articles. 1. **Premade voice**: choose your preferred language and accent, click the dropdown (`⌄`) to view the available voices. To preview a voice, hover over the icon next to the name and click the Play button. 2. **Instant Voice Clone**: To clone a voice for your article click the `+` button and follow the instructions to create an instant voice clone. You’ll need to record or upload a voice sample along with a consent statement. For more details, see the [Instant Voice Cloning](/docs-and-guides/voices/voice-cloning/instant-voice-cloning) section of our documentation. ### Summary In the Summarization tab, you can manage your article's summary settings. Choose whether to generate a summary, and if enabled, customize it by editing the system prompt. Click `"Generate Summary"` to generate a summary, which you can edit. The final summary will be generated when you update the article. You are also able to adjust the temperature of the summarized response. A lower value (closer to 0) will produce a more consistent and predictable summary, while a higher value allows for more variation and creative language. You will need to generate the audio for your article before you can generate a summary. ### Video In the Video tab, you can manage your article’s video settings. Choose whether to generate a video, and if enabled, customize it using the available options. The video will be created when you generate or update the article. For more detailed information on video settings and customization, visit the [video](/docs-and-guides/content/preferences/video) section of our documentation. ### Background track In the Background Track tab, you can manage background audio settings for your article. You can choose to include a background track, upload your own, and apply it. The track will be added when you generate or update the article. ### Pronunciations In the Pronunciations tab you can configure which custom pronunciations will be applied when generating the audio for your article. Enable AI preprocessing to improve text normalization (e.g. numbers, scores) and automatic language detection. You can enable this per article or across your project in [Content Preferences](/docs-and-guides/content/preferences/pronunciations). This feature is in Beta, we recommend testing it to ensure compatibility with your content ### Info The Info tab lets you update your article’s settings and metadata. #### Visibility In the Visibility dropdown, you can manage your article’s visibility settings. Choose whether the player should be public (visible) or private (hidden). Set when visibility should take effect by selecting `Once generated` or `Specific date`. #### Author The article author. This data can be used to create Smart Playlists. #### ID'S * **ID**: Copy the article content ID. This is the ID that we assign to the article after it's generated. * **Source ID**: Copy or edit the article source ID. This ID is user-defined at the time of audio generation. We recommend using the article ID from your CMS as the source ID. * **Source URL**: Copy or edit the article Source URL. We recommend using the article URL as the source URL. All three can be used as [identifiers](/docs-and-guides/distribution/player/overview#identifiers) to initalise the player. #### Title Automatically taken from the first segment of your article, but can be edited here if needed. #### Properties Add or edit custom properties for the article using JSON format. We recommend including metadata like the article’s category (e.g. `{ "category": "sport" }`). These properties can be used to power [Smart Playlists](/docs-and-guides/distribution/playlists/smart) and [podcast feeds](/docs-and-guides/distribution/podcast-feeds/smart). #### API updates This toggle allows updates made via the API to override the existing article content and regenerate the audio. If disabled, API updates will be ignored, and the current content and audio will remain unchanged. If you're using the WordPress plugin, this setting applies to you too as the plugin is built on top of our API. #### Play ads Use this toggle to choose whether ads should be included in the audio article. No ads will be included in the audio article if you don't have any ads in your project. # Background music Source: https://docs.beyondwords.io/docs-and-guides/content/preferences/background-music Learn how to add background music to your audio articles with BeyondWords ## Overview You can include background music automatically whenever an audio article is created or manually add it to each article. ![background music](https://mintlify.s3.us-west-1.amazonaws.com/beyondwords/assets/images/new-images/content/backgroundmusic.png) ## Include background music on all articles Go to the **Background music** tab in the **Content** section and enable background music. Click the **+ Track** button, upload a background track, give it a name, set the volume, and scope. Set the default background track to be used for all articles. Click **Save** to apply your changes. Moving forward, the background track will be added automatically to all new audio articles. To include the background track on existing articles, manually update them in the **Editor** or by clicking **Regenerate**. Otherwise, background music will only be added to new articles. ## Add background music to a specific article Go to the **Articles** section and locate the article you want to add background music to. * Click the **⋯** button next to the article and then click **Edit**. * This will open the **Editor**. * Click the **Background music** tab. Turn on background music and select the background track you want to use. If you don't see the background track you want to use, you will need to upload it first in the **Background music** tab in the **Content** section. Click **Update** to save changes and add the background music. # Filters Source: https://docs.beyondwords.io/docs-and-guides/content/preferences/filters Learn how to filter what should be included or excluded from audio generation in BeyondWords ## Overview In BeyondWords, you can filter what should be included or excluded from audio generation. This is useful if you want to ensure that certain content is not included in the audio generation process. ![filters](https://mintlify.s3.us-west-1.amazonaws.com/beyondwords/assets/images/new-images/content/filters.png) This is most useful when using the Magic Embed or API to generate audio. ## Create a filter To add a filter go to **Project > Content > Preferences > Filters**. 1. Click **+ Filter**. 2. Select the type of filter you want to create. 3. Enter the text you want to filter. 4. Select whether you want to include or exclude the content. 5. Set the scope of the filter. 6. Click **Save changes**. Click **+ Filter** to add a new filter. Select the type of filter you want to create. > For example, you can select **Type** to filter by HTML element type. Specify the value you want to filter. > For example, yo can enter **H2** to filter H2 elements. When specifying elements, classes, or other HTML attributes, provide only the name or identifier. Avoid prefix characters like `<`, `.`, `#`, or any other syntax. The only exception is with `element_xpath`. Select whether you want to include or exclude the content. > For example, you can select **Include** to include H2 elements in the audio. Set where this filter should apply: * **All projects**: Use this filter in all your projects. * **This project only**: Use this filter in this project only. Click **Save changes** to save the filter. To apply the filter to past articles, go to **Project > Content > Articles** click **⋯** and then click **Regenerate**. Otherwise, the filter will only apply to new articles. ### Filter types #### Element type Create an **Element type** filter to include or exclude HTML elements based on their tag name. > Filter content by HTML tag name such as `

`, `
`, `