Upload a fight from any tool
This server accepts AION 2 combat logs in a2log, an open JSON format. Any meter, parser or bot can upload a fight with one HTTP request and get back a link anyone can open.
| Discovery | https://island-1.tailbe3340.ts.net/.well-known/a2log.json |
| JSON Schema | https://island-1.tailbe3340.ts.net/schema/a2log-v1.json |
| Upload | POST https://island-1.tailbe3340.ts.net/api/v1/logs |
| Auth | Authorization: Bearer <key> (ask the server owner for a key; anonymous uploads are not allowed) |
| Body | one a2log document, Content-Type: application/json, optionally Content-Encoding: gzip; at most 25 MB |
| Visibility | ?visibility=public|unlisted|private or meta.visibility; default unlisted
(link only). Public logs are listed on the home page; private links carry a secret ?t= token. |
The a2log document
One document is one fight: players, and one or more segments (pulls). Times are seconds from the segment start.
Only t, player and damage are required per hit; add what your tool knows.
{
"format": "a2log", "version": 1,
"meta": {"source": "my-meter 1.2", "title": "Gatekeeper Pinopi", "region": "na",
"recorded_at": "2026-10-04T19:00:00Z"},
"players": [{"id": "p1", "name": "Name", "class": "sorcerer", "combat_power": 70000,
"specs": {"Hellfire": [2, 4]}}],
"segments": [{
"label": "Gatekeeper Pinopi", "boss": "Gatekeeper Pinopi", "duration": 93.0, "killed": true,
"hits": [{"t": 0.0, "player": "p1", "skill": "Hellfire", "skill_id": 15060000, "damage": 12345,
"crit": true, "double": false, "perfect": false, "multi": 2, "dot": false, "back": false}],
"buffs": [{"player": "p1", "name": "Element Enhancement", "skill_id": 15400000, "start": 1.0, "end": 21.0}],
"hp": [[0.0, 1437663], [1.5, 1400000]]
}]
}
| Field | Meaning |
|---|---|
players[].class | gladiator, templar, assassin, ranger, sorcerer, spiritmaster (or elementalist), cleric, chanter |
players[].specs | skill name → chosen specialization slots 1-5 |
players[].stats | optional: the character's stats during the fight as the game shows them
(critical_hit, attack, double_pct, perfect_pct, multihit_pct,
combat_speed_pct, cooldown_pct, accuracy); lets the server calibrate crit and the other rates |
meta.contribute | "no" keeps the fight out of the anonymous class statistics
(private logs are always kept out) |
hits[].skill_id | the game's skill id; variant codes are fine (the viewer maps them to the class skill) |
hits[].multi | extra hits of a multi-hit (0 = none) |
hits[].step | name of a chain follow-up (e.g. "Cold Wave" with Ice Chain's id) |
segments[].hp | boss HP samples [t, hp] |
Examples
curl -X POST "https://island-1.tailbe3340.ts.net/api/v1/logs?visibility=unlisted" \ -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \ --data-binary @fight.json # gzip it for big fights gzip -c fight.json | curl -X POST "https://island-1.tailbe3340.ts.net/api/v1/logs" -H "Authorization: Bearer $KEY" \ -H "Content-Type: application/json" -H "Content-Encoding: gzip" --data-binary @-
Answer (201):
{"id": "aB3dE5fG7h", "visibility": "unlisted", "url": "https://island-1.tailbe3340.ts.net/l/aB3dE5fG7h",
"json_url": "https://island-1.tailbe3340.ts.net/api/v1/logs/aB3dE5fG7h/raw", "delete_token": "…", "delete_url": "…"}
import json, urllib.request
req = urllib.request.Request("https://island-1.tailbe3340.ts.net/api/v1/logs", json.dumps(doc).encode(),
{"Content-Type": "application/json", "Authorization": "Bearer " + key})
print(json.load(urllib.request.urlopen(req))["url"])
Errors come back as {"error": "…"} with 400 (the document is invalid; the message names the field),
401 (no key), 413 (too large) or 429 (too many uploads).
Read: GET /api/v1/logs (public list), GET /api/v1/logs/<id> (summary),
/raw (the document), /analysis?segment=0&player=p1 (breakdown).
Delete: DELETE /api/v1/logs/<id>?token=<delete_token> or with the uploader's key.
Learned from all public and unlisted uploads (anonymous): GET /api/v1/stats/<class>
(class statistics, also on the statistics page) and GET /api/v1/calibration/<class>
(per-skill damage factors, rate factors and crit curve for simulators).