- Docs
- Setting up capture process
- Automatically generated API documentation (inaccurate)
- Script to generate API documentation
In the below documentation, all requests return { "d": something }
(except the ones that don't), so everything outside of something
will be omitted.
API url: https://lis.os.eidos.com/
Necessary headers for each request (may vary, untested):
Accept: application/json
, otherwise the API returns XML (obviously if you're fine with that you can omit this)OS-AuthProvider: 6
, unsure of the purpose of thisOS-AuthTicketData: [string]
, begins with CAEQ on my copy of the game, CONFIRMED static between copies of the game (at least PC linux)OS-AuthTicketSize: 44
, the length of the above stringOS-UID: [string]
, steam user ID, or some other form of identification in standalone versions probablyOS-Platform: steam
, the user's platform, needs more testing to get optionsOS-System: linux
, ditto
Optional headers:
DataServiceVersion: 2.0
MaxDataServiceVersion: 2.0
OS-Age: 0
OS-Build: localBuild
OS-GTime: 84
OS-Locale: en,XX,XX,
OS-MAC: xx-xx-xx-xx-xx-xx
OS-OSVersion: 5.0.22.82369
, unsure what this is, it's not kernel versionOS-PID: LiS-v1.0.0.397609
OS-Progress: 0.00000000000000000
, lolOS-SID: [uuid]
OS-STime: 5713
OS-XYZ: 135.95315551757812500,-130.51196289062500000,97.04180908203125000
OS-Zone: E0_Menu
, the game seems to send ingame location with every request
The game sends several requests in the opening videos.
-
/game/os_Ping
- Likely confirming that the service is up
- Returns
{"os_Ping": 6739}
, different number each time
-
/game/os_GetServiceInfo
- Returns information about the IP address used for connection and a list of metadata and endpoints.
- Example output: https://gist.github.com/blha303/8c5b925f95c23c08197ac3a82e1bee15
-
/game/os_Ping
again -
/game/SEM_Login
- Probably for the Square Enix account login
- Query params:
s_type
is 'UID' here;s_value
is my steam user ID, a long string of digits - Returns
{ "SEM_Login": { "__metadata": { "type": "game.SEMSubmit" }, "b_confirmed": true, "s_SEMID": "string of numbers", "s_email": "email address", "s_facebookID": "probably facebook user identifier", "s_longTermToken": "string of numbers and letters" } }
-
It sends the above request twice, unclear why
-
/game/CreateUserProfile
- Square Enix login again? Probably making sure that there's an account for the given steam ID for stats collection even if it isn't linked to a SEM account
- Query params:
s_uid
is my steam user ID - Returns
{ "CreateUserProfile": true }
and a headerOS-AuthResponse
containing the newOS-AuthTicketData
to be used for subsequent requests
-
/game/GetTodaysInfocast
- Returns a list of messages to be scrolled at the bottom of the main menu
- Idling on the menu calls this periodically
- Query params:
b_digital
, a boolean, probably whether it's digital or a physical disc;i16_episode
, the episode number of the current save game;s_locale
, language code e.g 'en' - Example response: https://gist.github.com/blha303/d00b1c34728cc21101b7fc198bbf3371
-
/game/SetUserProfileFriends
- Sends list of UIDs for user's friends list
- POST requests,
["UID", ...]
- Returns
{"SetUserProfileFriends": 0 }
, friends service probably disabled
-
/game/GetSeasonPassOfferIdList
- No clue what this is for, you'd think it would show information on the episodes but it just returns the same thing five times.
- Query params:
s_region
, mine says 'na', not applicable? - Returns https://gist.github.com/blha303/cba709bc7b9db5e8122c46133fdedbcb
/game/AddMetrics
- Is called every few minutes regardless of the client configuration returned by
os_GetServiceInfo
- POST request, https://gist.github.com/blha303/b79ba499a2ea61880d3fc8dc812f7eb4
- Returns nothing at all
- Is called every few minutes regardless of the client configuration returned by
-
/game/CommunityFactsGetEpisode
- Returns a list of choices for a given episode, and the percentage and raw numbers for each choice
- Query params:
i16_episode
, the given episode number - Example response for episode 1: https://gist.github.com/blha303/cec90d1d2e351c33d39ddddd880cd252
-
/game/GetFriendsProfileStats
- Apparently would return the same as
/game/CommunityFactsGetEpisode
with additional info on friend stats, but currently returns nothing - Query params:
i16_episode
, the given episode number;s_uid
, the steam/other user id - Currently returns
{"results": [] }
- Apparently would return the same as
Making me listen to Obstacles again >_<
/game/UpdateUserProfileGameSpecific
- POST request, summarizes choices made. Called when credits start
- JSON data, https://gist.github.com/blha303/144499eeb67dface9a83371c17f9513b
- Returns
0
, maybe means profile isn't updated when the given UID has already completed the given chapter
Other endpoints: https://gist.github.com/blha303/101e0db0bf63ea07b1f55862947c9065#file-zgenerateddocs-md
Damm, this is interesting. Guessing if the AuthTicketData doesn't change, you could theoretically send requests whenever you want without the game open as long as the headers and endpoint is correct. Might have to test that later.
Well done for your hard work.
P.S. Do you know if this would be against the EULA? It could be counted as reverse engineering.