This page documents the in-game news system used by Hyper Scape. News items appear in the main menu as a carousel banner (Billboard), thumbnail cards (MenuThumbnail), and detail views (MenuDetail).
The game fetches news from two endpoints. Both return the same structure but differ in whether profileId is populated.
GET /v1/profiles/me/news?spaceId={spaceId}
Returns news items with profileId set to the authenticated player's profile ID.
GET /v1/spaces/news?spaceId={spaceId}
Returns news items with profileId set to null.
| Header | Value |
|---|---|
| Authorization | Ubi_v1 t={ticket} |
| Content-Type | application/json |
| Ubi-AppId | 69e55abd-5aca-4eee-be94-ce3944c72e73 |
| Ubi-SessionId | {sessionId} |
| Ubi-localeCode | en-US |
| Ubi-Market | US |
Host: public-ubiservices.ubi.com
| Parameter | Description |
|---|---|
| spaceId | 3f28fbeb-1eaa-460f-9265-2ef2a47fd152 |
From the GameConfigClient, both news endpoints are polled every 900 seconds (15 minutes):
"spacesNewsSec": 900,
"profilesNewsSec": 900
Both endpoints return { "news": [...] }. The array contains news item objects.
| Field | Type | Description |
|---|---|---|
| spaceId | string | Space UUID (3f28fbeb-...) |
| newsId | string | Unique ID for the news item (e.g. ignt.25595) |
| type | string | News type, always featured |
| placement | string | Where this entry appears: Billboard, MenuThumbnail, or MenuDetail |
| priority | number | Sort order (lower = higher priority) |
| displayTime | number | Billboard carousel display time in seconds |
| publicationDate | string | ISO 8601 publication date (no timezone) |
| expirationDate | string/null | ISO 8601 expiration date, or null for no expiration |
| locale | string | Locale code (e.g. en-US) |
| title | string | News headline (displayed in uppercase in-game) |
| contentType | string | Content format, always plaintext |
| body | string | Full news text with \n line breaks |
| isBodyFilledIn | boolean | Always true |
| mediaURL | string | Image URL |
| mediaType | string | Media type, always Image |
| profileId | string/null | Player's profile UUID (profile news) or null (space news) |
| obj | object | Metadata object |
| obj.characteristic | string | Badge label: "New", "Updated", or omit for none |
| summary | string | Short description shown in the thumbnail card |
| links | array | Action links (see below) |
| tags | array | String tags for categorization |
Each logical news item needs 3 entries in the array — one per placement:
| Placement | Where it Shows | Image Size |
|---|---|---|
| Billboard | Main menu carousel (large banner) | ~946 x 632 px |
| MenuThumbnail | Small card in the news list | ~494 x 500 px |
| MenuDetail | Expanded detail view when card is clicked | ~946 x 632 px |
All three entries share the same newsId, title, body, summary, and other text fields. Only the placement and mediaURL differ (Billboard and MenuDetail use the large image, MenuThumbnail uses the small one).
Links define what happens when the player clicks the news item's call-to-action button.
| Field | Type | Description |
|---|---|---|
| rootLinkNoId | string | Unique UUID for the link |
| type | string | Link type: menulink or weblink |
| param | string | Target — see table below |
| actionName | string | Button text (e.g. "visit") |
| actionDescription | string | Optional description, usually empty |
| param Value | Navigates To |
|---|---|
| Battlepass | Battle Pass screen |
| Challenges | Challenges screen |
| Shop | In-game shop |
| HallOfChampions | Hall of Champions screen |
For type: "weblink", the param field contains a URL that opens in the player's browser.
{
"news": [
{
"spaceId": "3f28fbeb-1eaa-460f-9265-2ef2a47fd152",
"newsId": "ignt.25595",
"type": "featured",
"placement": "Billboard",
"priority": 1,
"displayTime": 1,
"publicationDate": "2021-03-30T13:27:00",
"expirationDate": null,
"locale": "en-US",
"title": "SEASON 3 BATTLE PASS AVAILABLE",
"contentType": "plaintext",
"body": "The Season 3 Battle Pass is now available! Head to the Battle Pass portal for more details. Complete Challenges to level up your 100-tier Battle Pass!\n\nDon't forget that you can also earn Battle Points by watching HYPER SCAPE\u2122 on Twitch.TV with the Crowncast extension!",
"isBodyFilledIn": true,
"mediaURL": "https://ubiservices.cdn.ubi.com/3f28fbeb-1eaa-460f-9265-2ef2a47fd152/news/S3_BP_494x500.png",
"mediaType": "Image",
"profileId": "805f5ad9-1b7b-4a1d-8eb8-b040008e403f",
"obj": {
"characteristic": "New"
},
"summary": "The Season 3 Battle Pass is now available! Complete the new 100-tier Battle Pass and get awesome exclusive cosmetic in-game rewards!",
"links": [
{
"rootLinkNoId": "afb511da-1db5-04ac-f326-a50e73952a95",
"type": "menulink",
"param": "Battlepass",
"actionName": "visit",
"actionDescription": ""
}
],
"tags": ["S2_BattlePass"]
},
{
"spaceId": "3f28fbeb-1eaa-460f-9265-2ef2a47fd152",
"newsId": "ignt.25595",
"type": "featured",
"placement": "MenuThumbnail",
"...": "same fields, same mediaURL for thumbnail"
},
{
"spaceId": "3f28fbeb-1eaa-460f-9265-2ef2a47fd152",
"newsId": "ignt.25595",
"type": "featured",
"placement": "MenuDetail",
"mediaURL": "https://ubiservices.cdn.ubi.com/.../S3_BP_946x632.png",
"...": "same fields, larger image for detail view"
}
]
}
The last captured response from Ubisoft contained 2 news items (6 entries total — 3 placements each):
| newsId | Title | Links To | Tags |
|---|---|---|---|
| ignt.25595 | SEASON 3 BATTLE PASS AVAILABLE | Battlepass (menulink) | S2_BattlePass |
| ignt.25596 | OBTAIN THE MEMORY SHARDS | Challenges (menulink) | S3_Shards |
The existing NewsController.php already handles both endpoints. Here's how news items are structured for the private server:
Each news definition is expanded into 3 placement entries automatically. You only need to define it once:
$newsDefinitions = [
[
'newsId' => 'custom.001',
'type' => 'featured',
'priority' => 1,
'displayTime' => 1,
'publicationDate' => '2026-02-17T00:00:00',
'expirationDate' => null,
'title' => 'WELCOME TO SCAPEGOAT',
'contentType' => 'plaintext',
'body' => "Welcome to Scapegoat!\n\nBody text here...",
'summary' => 'Short description for the thumbnail card.',
'obj' => ['characteristic' => 'New'],
'links' => [],
'tags' => ['welcome'],
'mediaURL_large' => 'https://example.com/banner_946x632.jpg',
'mediaURL_small' => 'https://example.com/thumb_494x500.jpg',
],
];
Both endpoints return the same data — the only difference is whether profileId is populated (profile news) or null (space news).
Each logical news item = 3 array entries — one for Billboard, MenuThumbnail, and MenuDetail. All share the same newsId.
Image sizes matter:
Characteristics — Set obj.characteristic to "New" or "Updated" to show a badge, or omit for no badge.
Menu links let you navigate the player to in-game screens (Battlepass, Challenges, Shop, HallOfChampions).
Empty news — Returning {"news": []} is valid and will show no news items in the menu.
Polling — The game re-fetches news every 15 minutes (spacesNewsSec: 900, profilesNewsSec: 900 in GameConfigClient).