{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"30efdc49-cd07-457a-914a-a776eb8be4ee","name":"Magnifi x Partner Integration Documentation","description":"Magnifi offers a comprehensive suite of API endpoints designed for seamless integration, enabling partners to access platform resources, content, and metadata efficiently. These endpoints support key functions such as stream ingestion, video downloads, metadata retrieval, and management of match schedules and team rosters. This document provides a complete guide to the available endpoints, essential resources, error codes, and the integration workflow.\n\n### Audience\n\nThis documentation is intended for developers and technical teams responsible for integrating Magnifi’s API into their products. The endpoints are straightforward and designed for ease of use. Multiple request examples are provided to illustrate different use cases.\n\n### Prerequisites\n\n- **Access Credentials:** Ensure you have obtained your `Access Key` and `Access Secret` from Magnifi.\n    \n- **HTTP Client:** Any standard HTTP client can be used, as all endpoints are accessible via HTTPS.\n    \n\n### Key Terminology\n\n- **Resource:** A general term for entities such as streams, clips, or match schedules.\n    \n- **Content:** Typically refers to video assets, such as clips, highlights, or highlight clips.\n    \n- **Metadata:** JSON-formatted data associated with content like clips and highlights.\n    \n- **entityId:** A unique identifier for your organization or workspace. All resources and content are associated with this ID.\n    \n\n### Core Resources\n\n1. **Organization/Workspace:** Each partner is assigned a unique API key linked to their organization or workspace, collectively called entities. Different entities will have distinct access credentials.\n    \n2. **Category:** Organizations may have access to specific content categories (e.g., Cricket, Football), which serve as the primary classification for most content.\n    \n3. **Templates:** Pre-configured video templates required for stream ingestion.\n    \n4. **Stream:** A live or recorded video feed ingested into the Magnifi platform. Content such as clips, highlights, and highlight clips are generated from streams, along with associated metadata. (See the Stream section for details.)\n    \n5. **Clip:** A short video capturing a key moment in a game. Metadata can be delivered via webhooks during stream processing or accessed through API endpoints. (See the Clip section for more details.)\n    \n6. **Highlight:** A dynamic compilation of clips based on business rules set by the partner. (See the Highlight section for more information.)\n    \n7. **Highlight Clip:** The finalized version of a highlight, ready for partner use. Metadata is available via webhooks and endpoints. (Refer to the Highlight Clips section for details.)\n    \n8. **Tournament/Team/Player:** These are roster details that should be associated with a stream to enable accurate player tagging. This information is reflected in the metadata of Clips and Highlight Clips. (See the Partner section for more details.)\n    \n9. **Match Schedule:** This feature allows you to create and manage match schedules, which can be linked to specific streams. (Refer to the Match Schedule section for further information.)\n    \n\n## Getting Started\n\n### Authentication\n\nTo interact with Magnifi's API, you must authenticate each request using your Access Key and Access Secret. These credentials ensure that only authorized users can access the resources within your organization or workspace.\n\n#### Required Headers\n\nInclude the following headers in every API request:\n\n- `x-access-key`: Your unique Access Key. Example:\n    \n\n``` bash\nx-access-key: pak_1a1a1a1a-1a1a-1a1a-1aaa-1a1a1a1a1a1a\n\n ```\n\n- `x-access-secret`: Your Access Secret, used to verify your identity. Example\n    \n\n``` bash\n  x-access-secret: 2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b\n\n ```\n\n### Access and Setup\n\n1. **Obtaining Your Credentials:**\n    \n    - Your Access Key and Access Secret are provided by Magnifi. Ensure you have received these credentials before attempting to make any API requests. If you haven't received them, please contact your Magnifi representative.\n        \n2. **Environment Configuration:**\n    \n    - You can use these credentials in any HTTP client, such as Postman, cURL, or your preferred programming language’s HTTP library.\n        \n3. **Testing with Postman:**\n    \n    - Run our Postman collection to get started quickly. Once imported, configure your environment by setting the `x-access-key` and `x-access-secret` as environment variables. This will streamline testing and integration.\n        \n\n### Error Message Example\n\n- An incorrect key or secret will result in a `401 Unauthorized` response with the message:\n    \n\n``` json\n{\n    \"message\": \"Invalid access key or access secret\",\n    \"error\": \"Unauthorized\",\n    \"statusCode\": 401\n}\n\n ```\n\n- Errors can also occur due to incorrect payloads, permission issues, or other unforeseen circumstances. When these errors occur, we try to provide a detailed response with an appropriate error code. For example:\n    \n\n``` json\n{\n    \"statusCode\": 404,\n    \"error\": {\n        \"message\": \"Clip data not found\",\n        \"code\": \"C001\",\n        \"metadata\": {}\n    }\n}\n\n ```\n\n#### Internal Errors\n\n| Error Code | Name | Description |\n| --- | --- | --- |\n| `I001` | `InternalServerError` | Internal server error |\n| `I002` | `ServiceInteractionError` | Service interaction failed |\n\n#### Permission Errors\n\n| Error Code | Name | Description |\n| --- | --- | --- |\n| `P001` | `PermissionDeniedEntityMismatch` | Permission denied: Entity mismatch |\n\n#### Partner Errors\n\n| **Error Code** | **Name** | **Description** |\n| --- | --- | --- |\n| `PA001` | `PartnerNotFound` | Partner details not found |\n| `PA002` | `PartnerSchedulePublishFailed` | Something unexpected happened while publishing partner schedule |\n| `PA003` | `PartnerStorageConfigNotFound` | Partner storage config not found |\n| `PA004` | `PartnerConfigNotFound` | Partner config not found |\n| `PA005` | `PartnerCategoriesNotFound` | Partner categories not found |\n| `PA006` | `PartnerTemplateNotFound` | Partner template not found |\n| `PA007` | `PartnerReserveChannelUnavailable` | Reserve channel unavailable |\n| `PA008` | `PartnerClipMappingNotFound` | Partner clip mapping not found |\n| `PA009` | `PartnerClipMappingAlreadyExists` | Partner clip mapping already exists |\n| `PA010` | `PartnerCompiledClipMappingNotFound` | Partner compiled clip mapping not found |\n| `PA011` | `PartnerCompiledClipMappingError` | Error compiling partner clip mapping |\n| `PA012` | `PartnerNotifierSubscriptionNotFound` | Partner notifier subscription not found |\n| `PA013` | `PartnerNotifierSubscriptionInactive` | Partner notifier subscription is inactive |\n| `PA018` | `PartnerUserNotMemberOfEntity` | Partner user is deactivated/removed from organization |\n| `PA019` | `PartnerUserNotFound` | Partner user is deactivated/removed |\n\n#### Stream Errors\n\n| Error Code | Name | Description |\n| --- | --- | --- |\n| `S001` | `StreamDataNotFound` | Stream data not found |\n| `S002` | `StreamURLValidationFailed` | Stream URL validation failed |\n| `S003` | `StreamFireAtValidationFailed` | Stream payload fireAt value can only be 'now' or a future timestamp |\n| `S004` | `StreamResourceClearanceFailed` | Failed to mark status complete within 5 minutes of creation (MediaLive resource takes up to 5 minutes for channel creation) |\n| `S005` | `StreamTournamentIdIncorrect` | Provided tournament ID is incorrect |\n| `S006` | `StreamTeamIdIncorrect` | Provided team ID is incorrect |\n| `S007` | `StreamTeamNotInTournament` | The specified team is not part of the tournament |\n| `S008` | `StreamTournamentCategoryMismatch` | Tournament category does not match the specified category |\n| `S009` | `StreamAlreadyExists` | Stream already exists for given matchScheduleId |\n| `S010` | `StreamUrlChangeNotAllowed` | Updating the stream URL after creation is not allowed |\n| `S011` | `StreamFireTimeChangeNotAllowed` | Updating the fireAt timestamp for a stream is not permitted |\n| `S012` | `StreamTemplateValidationFailed` | The provided template data is invalid or does not meet required validation rules |\n| `S013` | `StreamTemplateChangeNotAllowed` | Changing the template of an existing stream is not allowed |\n| `S014` | `StreamCategoryChangeNotAllowed` | Updating the category of an existing stream is not permitted |\n| `S015` | `StreamRequiredFieldsMissing` | One or more required fields for stream creation or update are missing |\n| `S016` | `InvalidStreamCustomFields` | Provided custom fields are invalid or do not match the expected requirements |\n| `S017` | `StreamTitleValidationFailed` | The provided stream title is invalid or fails validation rules |\n| `S018` | `StreamDatafeedConfigNotFound` | Datafeed configuration for the stream could not be found |\n\n#### Clip Errors\n\n| **Error Code** | **Name** | **Description** |\n| --- | --- | --- |\n| `C001` | `ClipDataNotFound` | Clip data not found |\n| `C002` | `ClipsDataForStreamNotFound` | Clips data for stream not found |\n| `C003` | `ClipsDataForHighlightNotFound` | Clips data for highlight not found |\n\n#### Highlight Errors\n\n| **Error Code** | **Name** | **Description** |\n| --- | --- | --- |\n| `H001` | `HighlightDataNotFound` | Highlight data not found |\n\n#### Metadata Errors\n\n| **Error Code** | **Name** | **Description** |\n| --- | --- | --- |\n| `M001` | `MetadataSchemaLoadError` | Metadata Schema not found or faulty |\n| `M002` | `MetadataValidationFailed` | Metadata Validation failed: Missing or Incorrect fields |\n| `M003` | `MetadataDefaultMappingAlreadyExists` | Metadata default mapping already exists |\n| `M004` | `MetadataDefaultMappingNotFound` | Metadata default mapping not found |\n\n#### Match Schedule Errors\n\n| **Error Code** | **Name** | **Description** |\n| --- | --- | --- |\n| `MS001` | `MatchDataNotFound` | Match data not found |\n| `MS002` | `MatchTeamIdIncorrect` | Provided team ID is incorrect |\n| `MS003` | `MatchTournamentIdIncorrect` | Provided tournament ID is incorrect |\n| `MS004` | `MatchCategoryIncorrect` | Provided match category is incorrect |\n| `MS005` | `MatchTournamentCategoryMismatch` | Tournament category does not match the specified category |\n| `MS006` | `MatchTeamNotInTournament` | The specified team is not part of the tournament |\n| `MS007` | `MatchScheduleExternalIdAlreadyExists` | Match schedule external ID already exists |\n\n#### Other Errors\n\n| Error Code | Name | Description |\n| --- | --- | --- |\n| `D001` | `DuplicateEntryFound` | Duplicate Entry Found |\n| `D002` | `DataNotFound` | Data not found |\n| `D003` | `PaginationOutOfRange` | Pagination out of range |\n| `V001` | `VideoUrlNotFound` | Video url not found |\n| `V002` | `ThumbnailUrlNotFound` | Thumbnail url not found |\n| `V003` | `PresignedUrlFetchError` | Error fetching presigned url |","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"34141959","team":6147857,"collectionId":"30efdc49-cd07-457a-914a-a776eb8be4ee","publishedId":"2sA3s6EpXt","public":true,"publicUrl":"https://docs.prod.videoverse.dev","privateUrl":"https://go.postman.co/documentation/34141959-30efdc49-cd07-457a-914a-a776eb8be4ee","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"12b5ec"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"system_default","themes":[{"name":"dark","logo":"https://content.pstmn.io/87d623e2-ac02-4523-8d5a-031eb2e4422f/TWFnbmlmaSBsb2dvIGJ3ICgxKS5wbmc=","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"12b5ec"}},{"name":"light","logo":"https://content.pstmn.io/10811c19-cd94-4497-900e-ba6cd4b557c8/TWFnbmlmaSBMb2dvIGJiLnBuZw==","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"12b5ec"}}]}},"version":"8.11.4","publishDate":"2024-10-02T08:45:26.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":"https://content.pstmn.io/10811c19-cd94-4497-900e-ba6cd4b557c8/TWFnbmlmaSBMb2dvIGJiLnBuZw==","logoDark":"https://content.pstmn.io/87d623e2-ac02-4523-8d5a-031eb2e4422f/TWFnbmlmaSBsb2dvIGJ3ICgxKS5wbmc="}},"statusCode":200},"environments":[{"name":"Partner API Service PROD","id":"10c274f9-6b55-4bbb-a66d-238adb58bcda","owner":"34141959","values":[{"key":"PARTNER_BASE_URL","value":"https://partner.prod.videoverse.dev","enabled":true,"type":"default"},{"key":"PARTNER-X-ACCESS-KEY","value":"{PARTNER-X-ACCESS-KEY}","enabled":true,"type":"default"},{"key":"PARTNER-X-ACCESS-SECRET","value":"{PARTNER-X-ACCESS-SECRET}","enabled":true,"type":"default"},{"key":"ENTITY_ID","value":"{ENTITY_ID}","enabled":true,"type":"default"},{"key":"CLIP_ID","value":"{CLIP_ID}","enabled":true,"type":"default"},{"key":"HIGHLIGHT_ID","value":"{HIGHLIGHT_ID}","enabled":true,"type":"default"},{"key":"STREAM_ID","value":"{STREAM_ID}","enabled":true,"type":"default"},{"key":"PLAYER_ID","value":"{PLAYER_ID}","enabled":true,"type":"default"},{"key":"TEAM_ID","value":"{TEAM_ID}","enabled":true,"type":"default"},{"key":"TOURNAMENT_ID","value":"{TOURNAMENT_ID}","enabled":true,"type":"default"},{"key":"HLCLIP_ID","value":"{HLCLIP_ID}","enabled":true,"type":"default"},{"key":"MATCH_SCHEDULE_ID","value":"{MATCH_SCHEDULE_ID}","enabled":true,"type":"default"},{"key":"CATCH_ME_UP_CONFIG","value":"{CATCH_ME_UP_CONFIG}","enabled":true,"type":"default"},{"key":"CONTENT_ID","value":"{CONTENT_ID}","enabled":true,"type":"default"},{"key":"CONTENT_TYPE","value":"{CONTENT_TYPE}","enabled":true,"type":"default"},{"key":"CATEGORY","value":"{CATEGORY}","enabled":true,"type":"default"},{"key":"SUBSCRIPTION_ID","value":"{SUBSCRIPTION_ID}","enabled":true,"type":"default"},{"key":"MATCH_VIDEO_ID","value":"{MATCH_VIDEO_ID}","enabled":true,"type":"default"},{"key":"ENTITY_MEMBER_ID","value":"{ENTITY_MEMBER_ID}","enabled":true,"type":"default"}],"published":true}],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/768118b36f06c94b0306958b980558e6915839447e859fe16906e29d683976f0","favicon":"https://videoverse.dev/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"},{"label":"Partner API Service PROD","value":"34141959-10c274f9-6b55-4bbb-a66d-238adb58bcda"}],"canonicalUrl":"https://docs.prod.videoverse.dev/view/metadata/2sA3s6EpXt"}