The Ansible API manifesto

These are promises to the people writing clients and bots. Not about values — about what you can lean on once your code is in production.

1. The schema is published in full

The TL-schema is complete, not excerpted: every constructor, every method, every type, each with its own page and with a machine-readable dump. If a method exists on the server, it is in the schema. There are no hidden methods only our own clients know about.

2. Breaking changes live in layers

A layer number is a contract. Within a layer signatures do not change: if a constructor changes, it gets a new identifier and arrives in a new layer while the old one keeps working. The client declares its layer when it connects and gets answers in it.

One layer is live today — 223, the first public one. The next will appear in the layer log together with what changed; we do not remove old layers retroactively.

3. Keys are issued, not requested

api_id and api_hash are issued automatically at my.ansible.su — no application, no waiting, no explaining what your client is for. A key belongs to an account, not to a company.

The other side of that: a key can be blocked if it is used for spam or for brute-force attempts. The block hits the api_id rather than your users, and we will say what it was for.

4. Limits are stated, not guessed

Where there is a limit, the server returns FLOOD_WAIT_X with a number of seconds rather than dropping the connection silently. Errors are codes and text you can branch on, not human phrases that change between releases.

What we do not promise

We have no availability guarantee (SLA) — the project is young, and promising four nines would be a lie. Group calls are not implemented: the methods are in the schema, the media side needs an SFU, and it is not ready. Some client builds are debug builds. The full list is on the technical work page.

We do not promise compatibility with other servers of the same protocol family and do not treat it as a goal: compatibility is there for client libraries, and the server side here is our own.