This section provides detailed documentation for all Virtual Stadium API endpoints. Each endpoint includes request/response specifications, authentication requirements, and practical examples.
| Environment | Base URL | Purpose |
|---|---|---|
| Management API | https://management.vs.sportradar.com/api | Channel and user management |
| Moderation API | https://moderation.vs.sportradar.com/api | Content moderation operations |
All endpoints require JWT authentication with appropriate user roles. See Authentication Guide for setup instructions.
Create a new chat channel for events, tournaments, or ongoing discussions.
POST https://management.vs.sportradar.com/api/channel/createAuthorization: Bearer <jwt-token>| Name | Type | Attributes | Description |
|---|---|---|---|
channelId | string | <required> | The unique identifier assigned to each channel. Maximum length is 128 characters. Valid values: alphanumeric characters and punctuation: (!"#$%&'()*+,-./:;<=>?@[\]^_'{|}~) |
channelName | string | <required> | The channel name displayed in the header and tags. |
expirationDatetime | integer | <required> | Expiration date as Unix timestamp. Must be set to future datetime. |
metadata | Object | <required> | Metadata object in any form. |
moderationSource | Enum | <required> | Valid values: VS, EXTERNAL. |
relatedCompetitions | Array.<ChannelRelatedCompetitionRequest> | Array of related competitions. See below. | |
parentId | string | Parent channel ID for hierarchical organization. | |
receiveEventsFromChildren | boolean | Whether this channel should receive events from child channels. | |
channelType | Enum | Valid values: MATCH, TOURNAMENT. | |
testChannel | boolean | Mark channel as test channel for development purposes. | |
highPriority | boolean | Can be set to true only if moderationSource is set to VS. |
| Name | Type | Attributes | Description |
|---|---|---|---|
eventTypes | Array.<Enum> | <required> | List of event types that will trigger event messages in the channel. (Valid values: GOAL, YELLOW_CARD, RED_CARD, CORNER, PENALTY_KICK, PENALTY_SHOOTOUT, THROW_IN, SHOT_ON_TARGET, OFFSIDE, SECOND_HALF_STARTED, OVERTIME_STARTED, PENALTY_SHOOTOUT_STARTED, ONE_POINT_SCORED, TWO_POINT_SCORED, THREE_POINT_SCORED, TIMEOUT, PLAYER_EJECTED, QUARTER_STARTED, GAME_WON, BREAK_WON, SET_WON, SET_STARTED, MATCH_STARTED, MATCH_ENDED, TOURNAMENT_MATCH_START_IN_ONE_DAY, TOURNAMENT_MATCH_START_IN_ONE_HOUR, TOURNAMENT_MATCH_START_IN_FIVE_MINUTES) |
srEntityId | string | Sportradar match, tournament or category id. Format: "sr:match:57969543". See Getting Identifiers for details on obtaining these IDs. | |
clientCompetitionId | string | Your internal competition identifier for mapping purposes. Used alongside srEntityId for ID mapping. |
{
"channelId": "spain-germany-2024",
"channelName": "Spain vs Germany - UEFA Championship",
"expirationDatetime": 1940753098,
"relatedCompetitions": [{
"srEntityId": "sr:match:57969543",
"clientCompetitionId": "2016",
"eventTypes": ["GOAL", "YELLOW_CARD", "RED_CARD", "CORNER", "PENALTY_KICK", "PENALTY_SHOOTOUT"]
}],
"receiveEventsFromChildren": true,
"metadata": {
"sport": "football",
"league": "UEFA"
},
"channelType": "MATCH",
"testChannel": false,
"highPriority": true,
"moderationSource": "VS"
}Success (201 Created):
{
"success": true,
"channelId": "spain-germany-2024",
"message": "Channel created successfully"
}Error (400 Bad Request):
{
"success": false,
"error": "Invalid channel configuration",
"details": "channelId must be unique"
}Create multiple channels simultaneously for improved efficiency.
POST https://management.vs.sportradar.com/api/channel/create/batchAuthorization: Bearer <jwt-token>Array of channel objects using the same structure as single channel creation.
[
{
"channelId": "match-1-semifinals",
"channelName": "Semifinals Match 1",
"expirationDatetime": 1940753098,
"relatedCompetitions": [{
"srEntityId": "sr:match:57969543",
"clientCompetitionId": "2016",
"eventTypes": ["GOAL", "YELLOW_CARD", "RED_CARD"]
}],
"receiveEventsFromChildren": true,
"metadata": {},
"channelType": "MATCH",
"testChannel": false,
"highPriority": false,
"moderationSource": "VS"
},
{
"channelId": "match-2-semifinals",
"channelName": "Semifinals Match 2",
"expirationDatetime": 1940753098,
"relatedCompetitions": [{
"srEntityId": "sr:match:57969544",
"clientCompetitionId": "2017",
"eventTypes": ["GOAL", "YELLOW_CARD", "RED_CARD"]
}],
"receiveEventsFromChildren": true,
"metadata": {},
"channelType": "MATCH",
"testChannel": false,
"highPriority": false,
"moderationSource": "VS"
}
]Success (201 Created):
{
"success": true,
"message": "2 channels created successfully",
"created": [
{
"channelId": "match-1-semifinals",
"status": "created"
},
{
"channelId": "match-2-semifinals",
"status": "created"
}
],
"failed": []
}Bulk channel creation uses the same structure as single channel creation but with an array of channel objects in the request body. This is more efficient for creating multiple channels simultaneously.
Update an existing channel's configuration. Based on the #codebase, all metadata except the channel ID can be modified.
PUT https://management.vs.sportradar.com/api/channel/{channelId}Authorization: Bearer <jwt-token>| Parameter | Type | Description |
|---|---|---|
channelId | string | The unique identifier of the channel to update |
Same structure as channel creation, but channelId cannot be modified.
{
"channelName": "Spain vs Germany - UPDATED NAME",
"expirationDatetime": 1940853098,
"metadata": {
"sport": "football",
"league": "UEFA",
"updated": true
},
"highPriority": false,
"moderationSource": "VS"
}Success (200 OK):
{
"success": true,
"channelId": "spain-germany-2024",
"message": "Channel updated successfully"
}Error (404 Not Found):
{
"success": false,
"error": "Channel not found",
"details": "Channel with ID 'spain-germany-2024' does not exist"
}The channel ID cannot be modified after creation. All other metadata can be updated as needed.
Permanently delete a channel and all associated data.
DELETE https://management.vs.sportradar.com/api/channel/{channelId}Authorization: Bearer <jwt-token>| Parameter | Type | Description |
|---|---|---|
channelId | string | The unique identifier of the channel to delete |
Success (200 OK):
{
"success": true,
"channelId": "spain-germany-2024",
"message": "Channel deleted successfully"
}Error (404 Not Found):
{
"success": false,
"error": "Channel not found",
"details": "Channel with ID 'spain-germany-2024' does not exist"
}Error (403 Forbidden):
{
"success": false,
"error": "Insufficient permissions",
"details": "SUPERVISOR role required for channel deletion"
}Channel deletion is permanent and cannot be undone. All messages, user data, and channel history will be permanently removed.
Delete all messages from a channel while keeping the channel active.
DELETE https://management.vs.sportradar.com/api/channel/{channelId}/clearAuthorization: Bearer <jwt-token>| Parameter | Type | Description |
|---|---|---|
channelId | string | The unique identifier of the channel to clear |
Success (200 OK):
{
"success": true,
"channelId": "spain-germany-2024",
"message": "Channel messages cleared successfully",
"messagesDeleted": 1247
}Error (404 Not Found):
{
"success": false,
"error": "Channel not found",
"details": "Channel with ID 'spain-germany-2024' does not exist"
}This endpoint is useful for cleaning chat history while maintaining the channel for continued use, particularly helpful for persistent channels or when starting fresh content.
Based on the #codebase, there are additional endpoints for external moderation services:
For channels using Moderation as a Service (MaaS), different base URLs are used:
POST https://moderator.vs.sportradar.com/api/operator/{operatorId}/channel/createPUT https://moderator.vs.sportradar.com/api/operator/{operatorId}/channel/{channelId}/updateRequirements:
moderationSource parameter must be set to "EXTERNAL"| Status Code | Description | Common Causes |
|---|---|---|
| 400 Bad Request | Invalid request parameters | Missing required fields, invalid data format, validation errors |
| 401 Unauthorized | Authentication required | Missing or invalid JWT token |
| 403 Forbidden | Insufficient permissions | User role doesn't have required permissions |
| 404 Not Found | Resource not found | Channel doesn't exist, invalid channel ID |
| 409 Conflict | Resource conflict | Duplicate channel ID, concurrent modification |
| 422 Unprocessable Entity | Validation error | Invalid field values, business rule violations |
| 429 Too Many Requests | Rate limit exceeded | Too many requests in time window |
| 500 Internal Server Error | Server error | System error, contact support |
All error responses follow this standard format:
{
"success": false,
"error": "Error category description",
"details": "Specific error details",
"code": "ERROR_CODE"
}channelId values for easier identification and debuggingexpirationDatetime based on event duration (consider overtime, delays)highPriority for truly critical channels to maintain system performancetestChannel: true before production deploymentFor complete API documentation with interactive examples and testing capabilities:
For endpoint-specific questions or technical support: