Download OpenAPI specification:
This is the official BetaHub API documentation. All the API requests should be either equipped with an Content-Type: application/json or end with .json extension, e.g. https://app.betahub.io/projects.json.
The API supports multiple authentication methods: - Anonymous access: Use FormUser anonymous for public operations - Token-based access: Use FormUser tkn-{token} for authenticated operations - Personal Access Tokens: Use Bearer YOUR_TOKEN_HERE format for enhanced security
Personal Access Tokens provide secure authentication for API integrations, automated scripts, and CI/CD pipelines. You can create and manage them in your account settings at Profile → Personal Access Tokens.
For more information about Personal Access Tokens, see: https://betahub.io/docs/account/#personal-access-tokens
Retrieves a list of issues for the specified project. The response includes issue details such as ID, title, description, status, priority, and associated metadata.
| project_id required | string |
| page | integer Page number for pagination (default: 1) |
| per_page | integer Number of issues per page (default: 20, max: 100) |
| status | string Enum: "new" "in_progress" "resolved" "closed" Filter issues by status |
| priority | string Enum: "low" "medium" "high" "critical" Filter issues by priority |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
{- "issues": [
- {
- "id": "1234abc",
- "title": "App crashes on login screen",
- "description": "When attempting to login, the app crashes after entering credentials.",
- "status": "new",
- "priority": "high",
- "created_at": "2024-10-03T12:34:56Z",
- "updated_at": "2024-10-03T12:34:56Z",
- "score": 95,
- "steps_to_reproduce": [
- {
- "step": "1. Open the app"
}, - {
- "step": "2. Enter login credentials"
}, - {
- "step": "3. Press login"
}
], - "assigned_to": {
- "id": "12",
- "name": "John Doe"
}, - "reported_by": {
- "id": "34",
- "name": "Jane Smith"
}, - "potential_duplicate": null,
}
], - "pagination": {
- "current_page": 1,
- "per_page": 20,
- "total_pages": 5,
- "total_count": 95
}
}Creates a new issue for a project. Issues can be created in a draft mode, which allows for a step-by-step creation process.
draft=true to keep it hidden (returns a JWT token in the 'token' field) 2. Optionally upload media files (screenshots, videos, log files) using the respective endpoints with the JWT token 3. Optionally set reporter email using the set_reporter_email endpoint 4. Publish the issue using the publish endpoint to make it visibleIMPORTANT NOTES: - Issue IDs in URLs must be prefixed with 'g-' (e.g., /issues/g-12345 not /issues/12345) - JWT token is returned as 'token' (not 'api_token') and is only generated when using FormUser authentication - Use Bearer {jwt_token} for subsequent API calls after issue creation - Token is valid for 1 hour from issue creation
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| issue[title] | string Title of the issue. If not provided, a GenAI will be used to generate a title. |
| issue[description] required | string Description of the issue. |
| issue[unformatted_steps_to_reproduce] | string Steps to reproduce the issue. A GenAI will be used to format the steps into array. |
| issue[release_id] | string ID of the release associated with this issue. If neither release_id nor release_label is provided, the latest release will be used. |
| issue[release_label] | string Label for a release to associate with this issue. If the label exists, that release will be used; otherwise, a new release will be created (requires authorization token with create_release permission). |
| issue[source] | string Optional source identifier for tracking where the issue was created from (e.g., "api", "discord", "dashboard"). Defaults to "dashboard" when created via web interface. |
| issue[debug_trace] | object Optional structured debug information with severity-labeled steps. Maximum size 128KB. Expected format: {"steps": [{"severity": "info|warning|danger", "description": "text"}]} |
| draft | boolean When set to true, the issue will be created in a hidden state for step-by-step completion. Default is false. |
{- "issue[title]": "App crashes on login screen",
- "issue[description]": "When attempting to login, the app crashes after entering credentials.",
- "issue[unformatted_steps_to_reproduce]": "1. Open the app\n2. Enter login credentials\n3. Press login",
- "draft": true
}Searches for issues (bug reports) within a project. Uses full-text search powered by Meilisearch to find matching issues based on the query string. Returns matching titles for autocomplete functionality or full issue objects for detailed results. Note: Search is performed across all issues in the project, then filtered by visibility permissions. The search includes issue titles and descriptions.
| project_id required | string |
| query required | string The search query string to match against issue titles and descriptions |
| skip_ids | string Comma-separated list of issue IDs to exclude from results |
| partial | string Enum: "true" "false" When set to 'true', returns limited results optimized for autocomplete (max 4 results) |
| scoped_id | string Instead of searching, find a specific issue by its scoped ID (e.g., "123" or "g-456") |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
[- "App crashes on login screen",
- "Memory leak in multiplayer mode",
- "Controller input not recognized"
]Alternative POST method for searching issues. Accepts the same parameters as the GET method but allows for longer search queries that might exceed URL length limits.
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| query required | string The search query string to match against issue titles and descriptions |
| skip_ids | string Comma-separated list of issue IDs to exclude from results |
| partial | string Enum: "true" "false" When set to 'true', returns limited results optimized for autocomplete (max 4 results) |
| scoped_id | string Instead of searching, find a specific issue by its scoped ID |
[ ]Updates an existing issue with new information. Only certain fields can be updated, and the user must have appropriate permissions to modify the issue.
| project_id required | string |
| issue_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| issue[title] | string Updated title of the issue |
| issue[description] | string Updated description of the issue |
| issue[status] | string Enum: "new" "in_progress" "resolved" "closed" Updated status of the issue |
| issue[priority] | string Enum: "low" "medium" "high" "critical" Updated priority of the issue |
| issue[assigned_to_id] | string ID of the user to assign the issue to |
| issue[unformatted_steps_to_reproduce] | string Updated steps to reproduce the issue |
| issue[release_id] | string ID of the release to associate with the issue |
{- "issue[title]": "string",
- "issue[description]": "string",
- "issue[status]": "new",
- "issue[priority]": "low",
- "issue[assigned_to_id]": "string",
- "issue[unformatted_steps_to_reproduce]": "string",
- "issue[release_id]": "string"
}{- "issue[title]": "Updated: App crashes on login screen",
- "issue[description]": "Updated description with more details about the crash.",
- "issue[status]": "in_progress",
- "issue[priority]": "critical"
}Sets the reporter email for a draft issue. This creates a virtual user who will receive notifications about the issue. This step is optional in the draft flow.
| project_id required | string |
| issue_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| email required | string The email address of the reporter. Must be a valid email format. |
{- "email": "string"
}{- "email": "reporter@example.com"
}Publishes a draft issue, changing its status from hidden to new and making it visible. This is the final step in the draft flow.
| project_id required | string |
| issue_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| email_my_report | boolean When set to true, an email will be sent to the reporter (if a valid email was set). Default is false. |
{- "email_my_report": true
}{- "email_my_report": true
}Sends a request to the issue reporter asking for additional information such as reproduction steps, screenshots, video clips, log files, or device information. This creates a notification for the reporter and adds the requester as a watcher.
| project_id required | string |
| issue_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| what required | string Enum: "steps" "screenshot" "video" "logs" "device" The type of additional information being requested from the reporter |
| comment | string Optional comment or message to include with the request |
{- "what": "steps",
- "comment": "string"
}{- "what": "steps",
- "comment": "Could you please provide detailed steps to reproduce this issue?"
}| project_id required | string |
| issue_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| screenshot[image] | string <binary> The screenshot image file |
{- "screenshot[image]": "(binary data representing an image)"
}| project_id required | string |
| issue_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| log_file[file] required | string <binary> The log file |
| log_file[name] | string The name of the log file. If set, the file will be saved with this name. |
{- "log_file[file]": "(binary data representing a log file)",
- "log_file[name]": "app.log"
}| project_id required | string |
| issue_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| video_clip[video] | string <binary> The video clip file |
{- "video_clip[video]": "(binary data representing a video file)"
}This endpoint is used to create a new playtime session for a project. The playtime session is used to track the user's playtime in the project. You can pass any key=value tag pairs in the request body to associate with the playtime session. For instance, you can pass playtime_session[platform]=ios to associate the playtime session with the iOS platform. The returned is a uuid that can be used to update the playtime session using the PUT endpoint.
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| playtime_session[tags] required | string Key-value pairs to associate with the playtime session. |
{- "playtime_session[tags]": "string"
}{- "playtime_session[tags]": "platform=ios"
}This endpoint is used to update a playtime session for a project. The playtime session is used to track the user's playtime in the project. Use the playtime session ID returned from the POST endpoint to update the playtime session. Call this endpoint no longer than every 5 minutes to update the playtime session.
| project_id required | string |
| playtime_session_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
{- "id": "1234abc"
}| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| feature_request[description] required | string Description of the feature request. |
| feature_request[title] | string Title of the feature request. Only available for project developers or admins. |
| user[discord_id] | string Discord ID of the user creating the feature request. Only used when authenticated as a Discord bot. |
| user[discord_username] | string Discord username of the user creating the feature request. Only used when authenticated as a Discord bot. |
| user[discord_discriminator] | string Discord discriminator of the user creating the feature request. Only used when authenticated as a Discord bot. |
{- "feature_request[description]": "Add a dark mode to the app",
- "user[discord_id]": "123456789",
- "user[discord_username]": "username",
- "user[discord_discriminator]": "1234"
}Searches for feature requests (also known as suggestions) within a project. Uses full-text search powered by Meilisearch to find matching feature requests based on the query string. Returns matching titles for autocomplete functionality or full feature request objects for detailed results. Note: Only searches among publicly visible, active feature requests (excludes pending moderation, rejected, muted, duplicate, and split requests).
| project_id required | string |
| query required | string The search query string to match against feature request titles and descriptions |
| skip_ids | string Comma-separated list of feature request IDs to exclude from results |
| partial | string Enum: "true" "false" When set to 'true', returns limited results optimized for autocomplete (max 4 results) |
| scoped_id | string Instead of searching, find a specific feature request by its scoped ID (e.g., "123" or "fr-456") |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
[- "Add dark mode support",
- "Implement multiplayer functionality",
- "Add controller remapping"
]Searches for support tickets within a project using a simple query string. Returns matching tickets with basic information (id and title) for autocomplete functionality. Uses ILIKE pattern matching on title and description fields. Results are limited to 10 tickets and filtered based on user permissions.
| project_id required | string |
| query required | string The search query string to match against ticket titles and descriptions |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
[- {
- "id": "123",
- "title": "Cannot access user settings"
}, - {
- "id": "456",
- "title": "Password reset not working"
}
]Creates a new support ticket for a project. Support tickets are used for customer support, help requests, and technical assistance.
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| ticket[description] required | string Description of the support ticket. Required. |
| ticket[title] | string Title of the ticket. If not provided, will be auto-generated from description. |
| ticket[priority] | string Enum: "low" "medium" "high" "critical" Priority level. Defaults to 'low'. |
| ticket[attachments][] | Array of strings <binary> [ items <binary > ] File attachments (images, documents, logs, etc.). Can be provided multiple times for multiple files. |
| user[discord_id] | string Discord ID of the user creating the ticket. Only used when authenticated as a Discord bot. |
| user[discord_username] | string Discord username. Only used when authenticated as a Discord bot. |
| user[discord_discriminator] | string Discord discriminator. Only used when authenticated as a Discord bot. |
{- "ticket[description]": "I need help resetting my password",
- "ticket[priority]": "high"
}Retrieves detailed information about a specific support ticket, including all attachments, status, priority, and assignment information.
| project_id required | string |
| id required | string The ticket ID. Can be a numeric ID or scoped ID format. |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
{- "id": "123",
- "title": "Password reset assistance needed",
- "description": "I need help resetting my password",
- "status": "open",
- "priority": "high",
- "created_at": "2024-10-06T10:00:00Z",
- "updated_at": "2024-10-06T10:30:00Z",
- "reporter": {
- "id": "456",
- "name": "John Doe"
}, - "assigned_to": {
- "id": "789",
- "name": "Support Agent"
}, - "attachments": [
- {
- "id": "101",
- "filename": "screenshot.png",
- "content_type": "image/png",
- "file_type": "image",
- "size_bytes": 245678,
- "user": {
- "id": "456",
- "name": "John Doe"
}
}
]
}Updates an existing support ticket with new information. This endpoint supports comprehensive ticket management including:
| project_id required | string |
| id required | string The ticket ID. Can be a numeric ID or scoped ID format. |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| ticket[title] | string Updated title |
| ticket[description] | string Updated description |
| ticket[status] | string Enum: "new" "open" "pending" "solved" "closed" Updated status |
| ticket[priority] | string Enum: "low" "medium" "high" "critical" Updated priority |
| ticket[assigned_to_id] | string ID of user to assign the ticket to |
| ticket[attachments][] | Array of strings <binary> [ items <binary > ] New file attachments to add. Can be provided multiple times for multiple files. |
| ticket[remove_attachment_ids][] | Array of strings IDs of existing attachments to remove. Can be provided multiple times for multiple IDs. |
{- "ticket[status]": "solved",
- "ticket[description]": "Issue resolved - password reset email sent"
}Retrieves comprehensive game facts data for a project in JSON format. Game facts include information about the game's mechanics, technical specifications, target audience, platforms, glossary terms, and other project-specific details that help with AI-powered issue categorization and context understanding.
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
{- "description": "A fantasy RPG set in a magical world",
- "genre": "Action RPG",
- "target_audience": "Teen",
- "platforms": [
- "PC",
- "PlayStation",
- "Xbox"
], - "core_mechanics": {
- "key_features": [
- "Magic system",
- "Character progression",
- "Crafting"
], - "game_modes": [
- "Single Player",
- "Cooperative"
], - "controls": {
- "pc": {
- "move": "WASD",
- "attack": "Left Click"
}, - "console": {
- "move": "Left Stick",
- "attack": "X Button"
}
}
}, - "technical_specifications": {
- "supported_platforms": [
- "Windows",
- "Linux",
- "macOS"
], - "minimum_system_requirements": {
- "ram": "8GB",
- "cpu": "Intel i5",
- "gpu": "GTX 1060"
}
}, - "glossary": {
- "items": [
- {
- "term": "Mana Potion",
- "definition": "Restores magical energy"
}
], - "characters": [
- {
- "term": "Elder Mage",
- "definition": "Wise spellcaster and quest giver"
}
], - "events": [ ],
- "locations": [ ],
- "other_terms": [ ]
}, - "project": {
- "id": "pr-123456",
- "name": "My Fantasy Game"
}, - "meta": {
- "created_at": "2024-10-03T12:34:56Z",
- "updated_at": "2024-10-03T14:22:10Z"
}
}Updates game facts for a project with new JSON data. This endpoint can be used to programmatically import game facts from external sources or update specific sections of the game facts. If no game facts exist for the project, new ones will be created. All validation rules apply, including field length limits and required nested structures.
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
object (GameFactRequest) |
{- "game_fact": {
- "description": "Updated game description",
- "genre": "Action RPG",
- "target_audience": "Teen",
- "platforms": [
- "PC",
- "PlayStation"
], - "core_mechanics": {
- "key_features": [
- "Updated feature"
], - "game_modes": [
- "Single Player"
], - "controls": {
- "pc": {
- "move": "WASD"
}, - "console": { }
}
}, - "technical_specifications": {
- "supported_platforms": [
- "Windows"
], - "minimum_system_requirements": {
- "ram": "16GB"
}
}, - "glossary": {
- "items": [
- {
- "term": "New Item",
- "definition": "Updated item definition"
}
], - "characters": [ ],
- "events": [ ],
- "locations": [ ],
- "other_terms": [ ]
}
}
}{- "description": "Updated game description",
- "genre": "Action RPG",
- "target_audience": "Teen",
- "platforms": [
- "PC",
- "PlayStation"
], - "core_mechanics": {
- "key_features": [
- "Updated feature"
], - "game_modes": [
- "Single Player"
]
}, - "project": {
- "id": "pr-123456",
- "name": "My Fantasy Game"
}, - "meta": {
- "created_at": "2024-10-03T12:34:56Z",
- "updated_at": "2024-10-03T16:45:30Z"
}
}Retrieves a list of releases for the specified project, ordered by creation date (oldest first). Returns release details including label, description, download links, and metadata.
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
[- {
- "id": "rel-123abc",
- "label": "v1.0.0",
- "summary": "Initial release",
- "description": "First stable version of our game",
- "created_at": "2024-10-03T12:34:56Z",
- "updated_at": "2024-10-03T12:34:56Z",
- "download_links": [
], - "attachments_count": 2,
}
]Creates a new release for a project. Releases contain download links, attachments, and metadata about a version of the project. Automatically triggers notifications to project members.
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| release[label] required | string Version label for the release (e.g., "v1.0.0") |
| release[summary] | string Brief summary of the release |
| release[description] | string Detailed description of the release changes |
| release[send_images_separately] | boolean Whether to send attachment images separately in notifications |
| release[attachments] | Array of strings <binary> [ items <binary > ] File attachments for the release |
Array of objects |
{- "release[label]": "v1.1.0",
- "release[summary]": "Bug fixes and improvements",
- "release[description]": "This release includes several bug fixes and performance improvements.",
- "release[download_links_attributes]": [
- {
- "platform": "windows",
- "link_enabled": true
}
]
}Retrieves detailed information about a specific release, including all download links, attachments, and metadata.
| project_id required | string |
| release_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
{- "id": "rel-123abc",
- "label": "v1.0.0",
- "summary": "Initial release",
- "description": "First stable version of our game",
- "created_at": "2024-10-03T12:34:56Z",
- "updated_at": "2024-10-03T12:34:56Z",
- "download_links": [
], - "attachments_count": 2,
}Updates an existing release with new information. Download links and attachments are handled separately from the main release data.
| project_id required | string |
| release_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| release[label] | string Updated version label |
| release[summary] | string Updated summary |
| release[description] | string Updated description |
| release[send_images_separately] | boolean Whether to send attachment images separately |
Array of objects | |
| release[remove_attachments] | Array of strings IDs of attachments to remove |
| release[attachments] | Array of strings <binary> [ items <binary > ] New attachments to add |
{- "release[label]": "string",
- "release[summary]": "string",
- "release[description]": "string",
- "release[send_images_separately]": true,
- "release[download_links_attributes]": [
- {
- "id": "string",
- "platform": "string",
- "url": "string",
- "link_enabled": true
}
], - "release[remove_attachments]": [
- "string"
], - "release[attachments]": [
- "string"
]
}{- "release[label]": "v1.0.1",
- "release[summary]": "Hotfix release",
- "release[description]": "Critical bug fixes for v1.0.0"
}Deletes a release from the project. Cannot delete the last remaining release of a project. All associated download links and attachments are also removed.
| project_id required | string |
| release_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
{- "success": true,
- "message": "Release was successfully deleted."
}Provides download information for a release. If a platform parameter is provided, tracks the download and redirects to the actual download URL. Otherwise, returns download information for all available platforms.
| project_id required | string |
| release_id required | string |
| platform | string Platform to download (e.g., "windows", "macos", "linux"). If provided, redirects to download URL. |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
{- "available_platforms": [
- {
- "platform": "windows",
- "download_count": 42
}, - {
- "platform": "macos",
- "download_count": 18
}
]
}Searches for issues (bug reports) within a project. Uses full-text search powered by Meilisearch to find matching issues based on the query string. Returns matching titles for autocomplete functionality or full issue objects for detailed results. Note: Search is performed across all issues in the project, then filtered by visibility permissions. The search includes issue titles and descriptions.
| project_id required | string |
| query required | string The search query string to match against issue titles and descriptions |
| skip_ids | string Comma-separated list of issue IDs to exclude from results |
| partial | string Enum: "true" "false" When set to 'true', returns limited results optimized for autocomplete (max 4 results) |
| scoped_id | string Instead of searching, find a specific issue by its scoped ID (e.g., "123" or "g-456") |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
[- "App crashes on login screen",
- "Memory leak in multiplayer mode",
- "Controller input not recognized"
]Alternative POST method for searching issues. Accepts the same parameters as the GET method but allows for longer search queries that might exceed URL length limits.
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| query required | string The search query string to match against issue titles and descriptions |
| skip_ids | string Comma-separated list of issue IDs to exclude from results |
| partial | string Enum: "true" "false" When set to 'true', returns limited results optimized for autocomplete (max 4 results) |
| scoped_id | string Instead of searching, find a specific issue by its scoped ID |
[ ]Request a presigned URL for uploading a screenshot directly to S3. This is the first step of the two-step direct upload process.
| project_id required | string |
| issue_id required | string |
| Authorization | string Example: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... API token for accessing draft issues or performing direct uploads. Can be a JWT token returned from issue creation in draft mode, or other valid authorization tokens. Format: "Bearer TOKEN" or "FormUser tkn-TOKEN" |
| filename required | string Name of the file to upload |
| byte_size required | integer Size of the file in bytes |
| checksum required | string Base64-encoded MD5 checksum of the file |
| content_type required | string Enum: "image/png" "image/jpeg" "image/jpg" MIME type of the file |
{- "filename": "screenshot.png",
- "byte_size": 1048576,
- "checksum": "1B2M2Y8AsgTpgAmY7PhCfg==",
- "content_type": "image/png"
}{- "blob_signed_id": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "blob_id": 0
}Confirm that the file has been uploaded to S3 and attach it to the issue. This is the second step of the two-step direct upload process.
| project_id required | string |
| issue_id required | string |
| Authorization | string Example: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... API token for accessing draft issues or performing direct uploads. Can be a JWT token returned from issue creation in draft mode, or other valid authorization tokens. Format: "Bearer TOKEN" or "FormUser tkn-TOKEN" |
| blob_signed_id required | string Signed ID of the blob received from presigned_upload |
{- "blob_signed_id": "string"
}{- "id": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "status": "string",
- "description": "string",
- "issue_id": "string",
}Request a presigned URL for uploading a log file directly to S3. This is the first step of the two-step direct upload process.
| project_id required | string |
| issue_id required | string |
| Authorization | string Example: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... API token for accessing draft issues or performing direct uploads. Can be a JWT token returned from issue creation in draft mode, or other valid authorization tokens. Format: "Bearer TOKEN" or "FormUser tkn-TOKEN" |
| filename required | string Name of the log file to upload |
| byte_size required | integer Size of the file in bytes |
| checksum required | string Base64-encoded MD5 checksum of the file |
| content_type required | string Enum: "text/plain" "text/log" "application/octet-stream" "text/x-log" MIME type of the log file |
| name | string Optional display name for the log file |
{- "filename": "application.log",
- "byte_size": 2048000,
- "checksum": "1B2M2Y8AsgTpgAmY7PhCfg==",
- "content_type": "text/plain",
- "name": "Debug Log"
}{- "blob_signed_id": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "blob_id": 0
}Confirm that the log file has been uploaded to S3 and attach it to the issue. This is the second step of the two-step direct upload process.
| project_id required | string |
| issue_id required | string |
| Authorization | string Example: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... API token for accessing draft issues or performing direct uploads. Can be a JWT token returned from issue creation in draft mode, or other valid authorization tokens. Format: "Bearer TOKEN" or "FormUser tkn-TOKEN" |
| blob_signed_id required | string Signed ID of the blob received from presigned_upload |
| name | string Optional display name for the log file |
{- "blob_signed_id": "string",
- "name": "Debug Log"
}{- "id": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "issue_id": "string",
- "name": "string",
- "filename": "string",
}Request a presigned URL for uploading a video clip directly to S3. This is the first step of the two-step direct upload process.
| project_id required | string |
| issue_id required | string |
| Authorization | string Example: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... API token for accessing draft issues or performing direct uploads. Can be a JWT token returned from issue creation in draft mode, or other valid authorization tokens. Format: "Bearer TOKEN" or "FormUser tkn-TOKEN" |
| filename required | string Name of the video file to upload |
| byte_size required | integer Size of the file in bytes |
| checksum required | string Base64-encoded MD5 checksum of the file |
| content_type required | string Enum: "video/mp4" "video/quicktime" "video/webm" "video/avi" "video/mov" MIME type of the video file |
{- "filename": "gameplay.mp4",
- "byte_size": 52428800,
- "checksum": "1B2M2Y8AsgTpgAmY7PhCfg==",
- "content_type": "video/mp4"
}{- "blob_signed_id": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "blob_id": 0
}Confirm that the video file has been uploaded to S3 and attach it to the issue. This is the second step of the two-step direct upload process.
| project_id required | string |
| issue_id required | string |
| Authorization | string Example: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... API token for accessing draft issues or performing direct uploads. Can be a JWT token returned from issue creation in draft mode, or other valid authorization tokens. Format: "Bearer TOKEN" or "FormUser tkn-TOKEN" |
| blob_signed_id required | string Signed ID of the blob received from presigned_upload |
{- "blob_signed_id": "string"
}{- "id": "string",
- "issue_id": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "processing": true,
- "processed": true,
- "failed": true,
}This endpoint is used to create a new playtime session for a project. The playtime session is used to track the user's playtime in the project. You can pass any key=value tag pairs in the request body to associate with the playtime session. For instance, you can pass playtime_session[platform]=ios to associate the playtime session with the iOS platform. The returned is a uuid that can be used to update the playtime session using the PUT endpoint.
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| playtime_session[tags] required | string Key-value pairs to associate with the playtime session. |
{- "playtime_session[tags]": "string"
}{- "playtime_session[tags]": "platform=ios"
}This endpoint is used to update a playtime session for a project. The playtime session is used to track the user's playtime in the project. Use the playtime session ID returned from the POST endpoint to update the playtime session. Call this endpoint no longer than every 5 minutes to update the playtime session.
| project_id required | string |
| playtime_session_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
{- "id": "1234abc"
}Searches for feature requests (also known as suggestions) within a project. Uses full-text search powered by Meilisearch to find matching feature requests based on the query string. Returns matching titles for autocomplete functionality or full feature request objects for detailed results. Note: Only searches among publicly visible, active feature requests (excludes pending moderation, rejected, muted, duplicate, and split requests).
| project_id required | string |
| query required | string The search query string to match against feature request titles and descriptions |
| skip_ids | string Comma-separated list of feature request IDs to exclude from results |
| partial | string Enum: "true" "false" When set to 'true', returns limited results optimized for autocomplete (max 4 results) |
| scoped_id | string Instead of searching, find a specific feature request by its scoped ID (e.g., "123" or "fr-456") |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
[- "Add dark mode support",
- "Implement multiplayer functionality",
- "Add controller remapping"
]Searches for support tickets within a project using a simple query string. Returns matching tickets with basic information (id and title) for autocomplete functionality. Uses ILIKE pattern matching on title and description fields. Results are limited to 10 tickets and filtered based on user permissions.
| project_id required | string |
| query required | string The search query string to match against ticket titles and descriptions |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
[- {
- "id": "123",
- "title": "Cannot access user settings"
}, - {
- "id": "456",
- "title": "Password reset not working"
}
]Creates a new support ticket for a project. Support tickets are used for customer support, help requests, and technical assistance.
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| ticket[description] required | string Description of the support ticket. Required. |
| ticket[title] | string Title of the ticket. If not provided, will be auto-generated from description. |
| ticket[priority] | string Enum: "low" "medium" "high" "critical" Priority level. Defaults to 'low'. |
| ticket[attachments][] | Array of strings <binary> [ items <binary > ] File attachments (images, documents, logs, etc.). Can be provided multiple times for multiple files. |
| user[discord_id] | string Discord ID of the user creating the ticket. Only used when authenticated as a Discord bot. |
| user[discord_username] | string Discord username. Only used when authenticated as a Discord bot. |
| user[discord_discriminator] | string Discord discriminator. Only used when authenticated as a Discord bot. |
{- "ticket[description]": "I need help resetting my password",
- "ticket[priority]": "high"
}Retrieves detailed information about a specific support ticket, including all attachments, status, priority, and assignment information.
| project_id required | string |
| id required | string The ticket ID. Can be a numeric ID or scoped ID format. |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
{- "id": "123",
- "title": "Password reset assistance needed",
- "description": "I need help resetting my password",
- "status": "open",
- "priority": "high",
- "created_at": "2024-10-06T10:00:00Z",
- "updated_at": "2024-10-06T10:30:00Z",
- "reporter": {
- "id": "456",
- "name": "John Doe"
}, - "assigned_to": {
- "id": "789",
- "name": "Support Agent"
}, - "attachments": [
- {
- "id": "101",
- "filename": "screenshot.png",
- "content_type": "image/png",
- "file_type": "image",
- "size_bytes": 245678,
- "user": {
- "id": "456",
- "name": "John Doe"
}
}
]
}Updates an existing support ticket with new information. This endpoint supports comprehensive ticket management including:
| project_id required | string |
| id required | string The ticket ID. Can be a numeric ID or scoped ID format. |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| ticket[title] | string Updated title |
| ticket[description] | string Updated description |
| ticket[status] | string Enum: "new" "open" "pending" "solved" "closed" Updated status |
| ticket[priority] | string Enum: "low" "medium" "high" "critical" Updated priority |
| ticket[assigned_to_id] | string ID of user to assign the ticket to |
| ticket[attachments][] | Array of strings <binary> [ items <binary > ] New file attachments to add. Can be provided multiple times for multiple files. |
| ticket[remove_attachment_ids][] | Array of strings IDs of existing attachments to remove. Can be provided multiple times for multiple IDs. |
{- "ticket[status]": "solved",
- "ticket[description]": "Issue resolved - password reset email sent"
}Retrieves comprehensive game facts data for a project in JSON format. Game facts include information about the game's mechanics, technical specifications, target audience, platforms, glossary terms, and other project-specific details that help with AI-powered issue categorization and context understanding.
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
{- "description": "A fantasy RPG set in a magical world",
- "genre": "Action RPG",
- "target_audience": "Teen",
- "platforms": [
- "PC",
- "PlayStation",
- "Xbox"
], - "core_mechanics": {
- "key_features": [
- "Magic system",
- "Character progression",
- "Crafting"
], - "game_modes": [
- "Single Player",
- "Cooperative"
], - "controls": {
- "pc": {
- "move": "WASD",
- "attack": "Left Click"
}, - "console": {
- "move": "Left Stick",
- "attack": "X Button"
}
}
}, - "technical_specifications": {
- "supported_platforms": [
- "Windows",
- "Linux",
- "macOS"
], - "minimum_system_requirements": {
- "ram": "8GB",
- "cpu": "Intel i5",
- "gpu": "GTX 1060"
}
}, - "glossary": {
- "items": [
- {
- "term": "Mana Potion",
- "definition": "Restores magical energy"
}
], - "characters": [
- {
- "term": "Elder Mage",
- "definition": "Wise spellcaster and quest giver"
}
], - "events": [ ],
- "locations": [ ],
- "other_terms": [ ]
}, - "project": {
- "id": "pr-123456",
- "name": "My Fantasy Game"
}, - "meta": {
- "created_at": "2024-10-03T12:34:56Z",
- "updated_at": "2024-10-03T14:22:10Z"
}
}Updates game facts for a project with new JSON data. This endpoint can be used to programmatically import game facts from external sources or update specific sections of the game facts. If no game facts exist for the project, new ones will be created. All validation rules apply, including field length limits and required nested structures.
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
object (GameFactRequest) |
{- "game_fact": {
- "description": "Updated game description",
- "genre": "Action RPG",
- "target_audience": "Teen",
- "platforms": [
- "PC",
- "PlayStation"
], - "core_mechanics": {
- "key_features": [
- "Updated feature"
], - "game_modes": [
- "Single Player"
], - "controls": {
- "pc": {
- "move": "WASD"
}, - "console": { }
}
}, - "technical_specifications": {
- "supported_platforms": [
- "Windows"
], - "minimum_system_requirements": {
- "ram": "16GB"
}
}, - "glossary": {
- "items": [
- {
- "term": "New Item",
- "definition": "Updated item definition"
}
], - "characters": [ ],
- "events": [ ],
- "locations": [ ],
- "other_terms": [ ]
}
}
}{- "description": "Updated game description",
- "genre": "Action RPG",
- "target_audience": "Teen",
- "platforms": [
- "PC",
- "PlayStation"
], - "core_mechanics": {
- "key_features": [
- "Updated feature"
], - "game_modes": [
- "Single Player"
]
}, - "project": {
- "id": "pr-123456",
- "name": "My Fantasy Game"
}, - "meta": {
- "created_at": "2024-10-03T12:34:56Z",
- "updated_at": "2024-10-03T16:45:30Z"
}
}Retrieves a list of releases for the specified project, ordered by creation date (oldest first). Returns release details including label, description, download links, and metadata.
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
[- {
- "id": "rel-123abc",
- "label": "v1.0.0",
- "summary": "Initial release",
- "description": "First stable version of our game",
- "created_at": "2024-10-03T12:34:56Z",
- "updated_at": "2024-10-03T12:34:56Z",
- "download_links": [
], - "attachments_count": 2,
}
]Creates a new release for a project. Releases contain download links, attachments, and metadata about a version of the project. Automatically triggers notifications to project members.
| project_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| release[label] required | string Version label for the release (e.g., "v1.0.0") |
| release[summary] | string Brief summary of the release |
| release[description] | string Detailed description of the release changes |
| release[send_images_separately] | boolean Whether to send attachment images separately in notifications |
| release[attachments] | Array of strings <binary> [ items <binary > ] File attachments for the release |
Array of objects |
{- "release[label]": "v1.1.0",
- "release[summary]": "Bug fixes and improvements",
- "release[description]": "This release includes several bug fixes and performance improvements.",
- "release[download_links_attributes]": [
- {
- "platform": "windows",
- "link_enabled": true
}
]
}Retrieves detailed information about a specific release, including all download links, attachments, and metadata.
| project_id required | string |
| release_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
{- "id": "rel-123abc",
- "label": "v1.0.0",
- "summary": "Initial release",
- "description": "First stable version of our game",
- "created_at": "2024-10-03T12:34:56Z",
- "updated_at": "2024-10-03T12:34:56Z",
- "download_links": [
], - "attachments_count": 2,
}Updates an existing release with new information. Download links and attachments are handled separately from the main release data.
| project_id required | string |
| release_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
| release[label] | string Updated version label |
| release[summary] | string Updated summary |
| release[description] | string Updated description |
| release[send_images_separately] | boolean Whether to send attachment images separately |
Array of objects | |
| release[remove_attachments] | Array of strings IDs of attachments to remove |
| release[attachments] | Array of strings <binary> [ items <binary > ] New attachments to add |
{- "release[label]": "string",
- "release[summary]": "string",
- "release[description]": "string",
- "release[send_images_separately]": true,
- "release[download_links_attributes]": [
- {
- "id": "string",
- "platform": "string",
- "url": "string",
- "link_enabled": true
}
], - "release[remove_attachments]": [
- "string"
], - "release[attachments]": [
- "string"
]
}{- "release[label]": "v1.0.1",
- "release[summary]": "Hotfix release",
- "release[description]": "Critical bug fixes for v1.0.0"
}Deletes a release from the project. Cannot delete the last remaining release of a project. All associated download links and attachments are also removed.
| project_id required | string |
| release_id required | string |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
{- "success": true,
- "message": "Release was successfully deleted."
}Provides download information for a release. If a platform parameter is provided, tracks the download and redirects to the actual download URL. Otherwise, returns download information for all available platforms.
| project_id required | string |
| release_id required | string |
| platform | string Platform to download (e.g., "windows", "macos", "linux"). If provided, redirects to download URL. |
| Accept required | string Value: "application/json" Accept header |
| Authorization required | string Example: Bearer YOUR_PERSONAL_ACCESS_TOKEN_HERE Authorization header for API access. Supports multiple authentication methods:
|
| BetaHub-Project-ID required | string BetaHub project ID, the same as the project_id |
{- "available_platforms": [
- {
- "platform": "windows",
- "download_count": 42
}, - {
- "platform": "macos",
- "download_count": 18
}
]
}