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.
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.
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.
The current server schema is 232. The first public layer, 223, remains archived. See the layer log for published layers; compatibility is verified per client and scenario.
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.
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.
We have no availability guarantee (SLA) — the project is young, and promising four nines would be a lie. The group-call server is deployed; compatibility is checked per client and device. See each client release for its status and limitations. 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.