# Overview

> Base URL, what is public, conventions shared by every endpoint, and the rules to follow when consuming the API.

Source: https://www.entropiacentral.com/documentation/api-reference/overview
Last updated: 2026-07-30

---

Entropia Central's public data is readable over a plain REST API. Globals, leaderboards, avatar and team profiles, the wiki, events and challenges, and site-wide statistics are all available without credentials.

```http
https://api.entropiacentral.com
```

Everything documented in this section is public and read-only. Authenticated endpoints are not documented here.

## What you can read without credentials

| Area | Reference |
| --- | --- |
| Globals, HOFs, ATHs and leaderboards | [Tracker data](https://www.entropiacentral.com/documentation/api-reference/tracker-data) |
| Items, creatures, blueprints and the rest of the wiki | [Wiki](https://www.entropiacentral.com/documentation/api-reference/wiki) |
| Avatars, teams, search and site statistics | [Avatars and statistics](https://www.entropiacentral.com/documentation/api-reference/avatars-and-stats) |
| Community events and challenges | [Events and challenges](https://www.entropiacentral.com/documentation/api-reference/events-and-challenges) |
| Live push feeds instead of polling | [SignalR hubs](https://www.entropiacentral.com/documentation/api-reference/signalr-hubs) |

## Browsers cannot call this API directly

**Cross-origin requests are only accepted from Entropia Central's own domains.** A page served from your own site cannot fetch this API from the browser; the request will be blocked by CORS before it reaches us.

Call it from a server, a script, a desktop app or anything else that is not a browser page on a third-party origin. This is the single most common thing people hit, and it is a deliberate restriction rather than a misconfiguration.

## Conventions

**Slugs, not ids.** Entries are addressed by slug in URLs, and the slugs match the ones in the site's own addresses. If you can see something at `entropiacentral.com/wiki/creatures/atrox`, then `/creatures/atrox` is the same entry. Internal integer ids appear in responses but should not be built into your URLs.

**Pagination is not uniform.** Page size limits differ by endpoint and several are capped low. The differences are real and not accidental, so check the page you are using rather than assuming:

| Endpoint | Page size |
| --- | --- |
| `/globals` | Defaults to 10, maximum 30 |
| `/avatars/{slug}/globals` | Defaults to 20, maximum 100 |
| `/avatars`, `/teams` | Fixed at 20, cannot be changed |
| `/events`, `/challenges` | Defaults to 20 |

**Invalid parameters return `400`.** Values outside the accepted bounds are rejected rather than clamped, including a `minValue` above `maxValue` or a `sortBy` outside the accepted fields. Validate before you send.

There is one exception worth knowing. On `/avatars/{slug}/globals`, an unrecognised value in the comma-separated `type` filter is silently dropped rather than rejected, and if none of your values are recognised the filter is dropped entirely, returning **unfiltered** results. A typo there produces plausible-looking data rather than an error.

**Dates are UTC.** In-game timestamps are recorded in UTC and returned that way.

## Errors

Errors come back as JSON with a message:

```json
{ "error": "Avatar with slug 'nobody' not found" }
```

`400` means your request was rejected as invalid, `404` means the slug or id does not exist, and `500` means something failed on our side and is worth retrying later.

## Being a good consumer

There is no published rate limit, which is not an invitation. The database behind this is large, some endpoints are expensive, and the site's own users share it with you.

**Prefer the cached endpoints when polling.** `/globals/recent`, `/globals/top-24h` and `/globals/activity-24h` are cache-backed and cheap. A filtered `/globals` query is not, and polling one on a short interval is the fastest way to cause a problem for everybody.

**Use the live feeds instead of polling.** If you want globals as they happen, the [SignalR hubs](https://www.entropiacentral.com/documentation/api-reference/signalr-hubs) push them to you. Polling every few seconds to catch events that arrive every few minutes wastes your resources and ours.

**Cache what does not change.** Wiki entries change rarely. Fetching the same creature on every page view of your own app is unnecessary.

**Walk history by date, not by deep paging.** With page sizes capped, pulling a long history means many requests. Filter by date range and step backwards rather than paging deep into an unfiltered list.

**Identify yourself.** Send a `User-Agent` that says what your tool is. If something you run causes a problem, that string is the difference between us contacting you and us blocking you.

## Reading this documentation programmatically

Every page in this documentation is also published as raw markdown, which is usually easier for a script or an AI agent to consume than the rendered page. Append `.md` to any documentation URL:

```bash
curl https://www.entropiacentral.com/documentation/api-reference/overview.md
```

The whole corpus in a single file is at [/llms-full.txt](https://www.entropiacentral.com/llms-full.txt), and an index of it is at [/llms.txt](https://www.entropiacentral.com/llms.txt).
