Resolve a group-invite deep link
curl --request GET \
--url https://web-api.soxai.site/api/deep-link/resolve \
--header 'Authorization: Bearer <token>'import requests
url = "https://web-api.soxai.site/api/deep-link/resolve"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://web-api.soxai.site/api/deep-link/resolve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"type": "group_invite",
"groupId": "b7d1f0c9a2e4d6f8b0c1",
"code": "Yk3nQ1pR8sA",
"groupName": "Shibata family",
"alreadyJoined": false
}{
"error": "http-error",
"error_msg": "Invalid authentication credentials. <reason>"
}{
"error": "forbidden",
"error_msg": "Not enough permission"
}{
"error": "not-found",
"error_msg": "token not found"
}{
"error": "unprocessable-entity",
"error_msg": "body.<field>: <validation message>"
}{
"error": "rate-limited",
"error_msg": "Rate limit exceeded. Retry after <n> seconds."
}{
"error": "internal-server-error",
"error_msg": "Failed to fetch data: <error_message>"
}Deep Links
Resolve a group-invite deep link
Group-invite token resolution for mobile routing. Never consumes the token.
A link carries type=group_invite in its query string, so an app that sees
that type comes straight here and does not fall back to prefill-email. This
endpoint stays group-invite only: a login-prefill token 404s, which is what
lets a link issued before type existed be recognised by elimination.
Login-prefill still exchanges its token at GET /api/deep-link/prefill-email.
Parameters
token(query, required) - the token from the deep link’s query string.
Response
200{"type": "group_invite", ...}with the invite’s payload: the group it names and the code. The token is not consumed, so the same link resolves again.alreadyJoinedanswers for the signed-in caller (SOX-92):truewhen that user is already an active member of the invited group, so the app can open the group instead of walking them through a join that would silently no-op. It isnull- notfalse- for an anonymous call, since a link opened before login has no user to answer about; resolve again after sign-in rather than readingnullas “needs to join”.
Errors
| Status | Condition |
|---|---|
| 404 | The token is unknown, expired, or is a login-prefill token rather than a group invite |
Authorization
- Scheme:
Authorization: Bearer <idToken>orsoxai-api-key: <api key>. - Authentication is optional. The app resolves the link before the recipient signs in,
and the token itself is the credential; a credential that is missing, stale or
unusable is not an error, it only leaves
alreadyJoinedatnull. - Resolving does not consume the token and does not join the group;
POST /api/groups/joindoes both and does require a signed-in caller.
GET
/
api
/
deep-link
/
resolve
Resolve a group-invite deep link
curl --request GET \
--url https://web-api.soxai.site/api/deep-link/resolve \
--header 'Authorization: Bearer <token>'import requests
url = "https://web-api.soxai.site/api/deep-link/resolve"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://web-api.soxai.site/api/deep-link/resolve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"type": "group_invite",
"groupId": "b7d1f0c9a2e4d6f8b0c1",
"code": "Yk3nQ1pR8sA",
"groupName": "Shibata family",
"alreadyJoined": false
}{
"error": "http-error",
"error_msg": "Invalid authentication credentials. <reason>"
}{
"error": "forbidden",
"error_msg": "Not enough permission"
}{
"error": "not-found",
"error_msg": "token not found"
}{
"error": "unprocessable-entity",
"error_msg": "body.<field>: <validation message>"
}{
"error": "rate-limited",
"error_msg": "Rate limit exceeded. Retry after <n> seconds."
}{
"error": "internal-server-error",
"error_msg": "Failed to fetch data: <error_message>"
}Authorizations
HTTPBearerSoxaiApiKey
Response
The invite payload: the group it names and the code. The token is not consumed, so the same link resolves again. alreadyJoined answers for the signed-in caller and is null for an anonymous one.