SDKs and clients
Every client below speaks the same REST API v2. Pick by language, or by where your code runs.
| Client | For | Install | State |
|---|---|---|---|
| TypeScript SDK | web apps, Node tools, browser games | npm install @onlyworlds/sdk |
published on npm |
| Python package | scripts, pipelines, world folders | pip install onlyworlds |
published on PyPI |
| Unity SDK | Unity games and tools | Package Manager, by git URL | public, interface not yet stable |
| MCP server | AI assistants and agents | nothing to install: https://www.onlyworlds.com/mcp |
live |
| Plain REST | any other language or engine | none | live |
A world’s origin, in every client. A client’s world patch call (patchWorld, patch_world, PatchWorldAsync) sends source and producer when you name them, as given; a call that accepts a folder’s world.json leaves that file’s own pair out, since there it names the folder’s maker; and setting a world’s origin from a folder is a push’s first-fill step (only when the world’s origin is empty and the folder was not exported from that same world), never the plain patch call’s.
The TypeScript, Python and Unity clients generate their element types and fields from schema-dist, the published copy of the schema. For other engines, see Games.
Plain REST
Section titled “Plain REST”The API needs no SDK. Send the key (and, for writes, the PIN) as headers:
import requests
headers = {"API-Key": "your-key", "API-Pin": "your-pin"}
r = requests.get("https://www.onlyworlds.com/api/v2/character/", headers=headers)
characters = r.json()["data"]List responses come back in a {data, has_more, next_cursor} envelope, so paginate on next_cursor. To generate a client in another language, start from the OpenAPI document at https://www.onlyworlds.com/api/v2/openapi.json; the interactive reference is built from the same document.
Retired
Section titled “Retired”The @onlyworlds/mcp-client npm package is retired: the MCP server is hosted now, with nothing to install.
