API & Integrations
Follow your games, upcoming rooms, Lotería tablas and recorded rewards.
Connect your account
- Sign in to your Tangled Land account and open key management. Regular accounts can manage their own key.
- Generate a personal read-only key and copy it when shown. If a key is already active, use your saved copy or coordinate replacement before revoking it.
- Connect the key to your trusted dashboard. Send it in the
Authorization: Bearer YOUR_KEYheader from your server.
Keep keys encrypted on the server. Do not place them in URLs, public pages, browser code, source control or shared documents. Revoke a key on the source site to stop future API reads; data already cached by a dashboard may remain until its private cache expires.
Generate or manage my key →Available calls
Append a route below to this base URL:
https://tangledland.com/api/dashboard/v1Expand a call to see its parameters, request and response. Examples use fictional data and may omit fields; they are not your account data or a live quote.
GET/mePersonal key
My profile
Connected account identity and read-only scope.
Parameters · None
Example request
curl --request GET \
--url 'https://tangledland.com/api/dashboard/v1/me' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_KEY'Example response excerpt · HTTP 200
{
"id": 42,
"username": "example_user",
"display_name": "Example User",
"scope": "dashboard:read",
"updated_at": "2026-11-05T12:00:00Z"
}GET/me/game-statsPersonal key
My game stats
Joined and completed rooms, hosted rooms and Trivia answers. Hosted rooms are not games played.
Parameters · None
Example request
curl --request GET \
--url 'https://tangledland.com/api/dashboard/v1/me/game-stats' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_KEY'Example response excerpt · HTTP 200
{
"summary": {
"joined_games": 10,
"completed_games": 8,
"hosted_games": 3,
"trivia_answers": 19,
"trivia_correct": 12
},
"games": [
{
"game": "trivia",
"joined_games": 10,
"completed_games": 8,
"best_recorded_score": "20000"
}
],
"updated_at": "2026-11-05T12:00:00Z"
}GET/schedulePublic · no key
Upcoming schedule
Upcoming game rooms with join links and UTC times.
Parameters · page: integer 1–10000; per_page: integer 1–50.
Example request
curl --request GET \
--url 'https://tangledland.com/api/dashboard/v1/schedule?page=1&per_page=6' \
--header 'Accept: application/json'Example response excerpt · HTTP 200
{
"items": [
{
"id": "ABC123",
"title": "Trivia · ABC123",
"game": {
"name": "Trivia",
"slug": "trivia"
},
"url": "https://tangledland.com/join?code=ABC123",
"starts_at": "2026-11-05T12:00:00Z",
"ends_at": null,
"status": "scheduled",
"timezone": "UTC"
}
],
"pagination": {
"page": 1,
"per_page": 6,
"total": 1,
"total_pages": 1
},
"updated_at": "2026-11-05T12:00:00Z"
}GET/me/registrationsPersonal key
My joined scheduled rooms
Previously joined scheduled rooms for the account. There is no separate advance-registration record.
Parameters · page: integer 1–10000; per_page: integer 1–50. scope: upcoming or all.
Example request
curl --request GET \
--url 'https://tangledland.com/api/dashboard/v1/me/registrations?page=1&per_page=6&scope=upcoming' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_KEY'Example response excerpt · HTTP 200
{
"items": [],
"pagination": {
"page": 1,
"per_page": 6,
"total": 0,
"total_pages": 0
},
"registration_model": "room_join",
"updated_at": "2026-11-05T12:00:00Z"
}GET/me/tablasPersonal key
My Lotería tablas
Stored approvals and pending submissions, card IDs and last verification times.
Parameters · page: integer 1–10000; per_page: integer 1–50. card_ids excerpt shortened for illustration.
Example request
curl --request GET \
--url 'https://tangledland.com/api/dashboard/v1/me/tablas?page=1&per_page=6' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_KEY'Example response excerpt · HTTP 200
{
"items": [
{
"tabla_id": 69,
"status": "approved",
"ownership_source": "splot",
"verified_at": "2026-11-05T12:00:00Z",
"reviewed_at": "2026-11-05T12:00:00Z",
"nft_url": "https://splot.io/example-tabla/",
"card_ids": [
1,
2,
3,
4
]
}
],
"pagination": {
"page": 1,
"per_page": 6,
"total": 1,
"total_pages": 1
},
"summary": {
"total": 1,
"approved": 1,
"pending": 0
},
"updated_at": "2026-11-05T12:00:00Z"
}GET/me/rewardsPersonal key
My rewards
Reward events with amounts and separate status totals.
Parameters · page: integer 1–10000; per_page: integer 1–50.
Example request
curl --request GET \
--url 'https://tangledland.com/api/dashboard/v1/me/rewards?page=1&per_page=6' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_KEY'Example response excerpt · HTTP 200
{
"items": [
{
"id": 123,
"amount_mlx": "1000",
"reason": "trivia_final_score",
"status": "sent",
"transaction_id": null,
"created_at": "2026-11-05T12:00:00Z",
"room_code": "ABC123",
"game": "trivia"
}
],
"pagination": {
"page": 1,
"per_page": 6,
"total": 1,
"total_pages": 1
},
"by_status": {
"sent": {
"amount_mlx": "1000",
"count": 1
}
},
"updated_at": "2026-11-05T12:00:00Z"
}Parameters and limits
page: integer 1–10000; per_page: integer 1–50. Lists default to 12 items. Registrations accept scope=upcoming (default) or all. Personal keys have a soft limit of 120 requests per minute.
Amounts such as MLX and USD cents may be decimal strings. Preserve their precision instead of converting large values to floating-point numbers. Use the returned pagination totals. Times shown in examples are ISO 8601 UTC; display dates in the user’s timezone.
What the data means
Registrations are scheduled rooms you have joined, not advance signups. Hosting alone does not count. Tabla ownership is the last stored Splot verification. Only sent rewards are confirmed paid. Schedule covers game rooms; Jukebox has a separate calendar.
Response handling
| HTTP | Meaning |
|---|---|
200 | Successful read. An empty items array can be a valid result. |
400 | Invalid or out-of-range parameters. |
401 | Missing, invalid or revoked personal key. |
429 | Too many requests. Wait before retrying. |
503 | Data or a required source service is temporarily unavailable. Do not replace this with zero. |
Use the HTTP status for error handling. Error bodies vary by route. Keep cached personal data private and short-lived; handle missing values and empty lists.
Optional PHP client
The API works with any language that can make HTTPS requests. A WordPress PHP reference client and README are also available as a convenience.
Download PHP client and README ↓