aion2calc logs AION 2 combat logs

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.

Discoveryhttps://island-1.tailbe3340.ts.net/.well-known/a2log.json
JSON Schemahttps://island-1.tailbe3340.ts.net/schema/a2log-v1.json
UploadPOST https://island-1.tailbe3340.ts.net/api/v1/logs
AuthAuthorization: Bearer <key> (ask the server owner for a key; anonymous uploads are not allowed)
Bodyone 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]]
  }]
}
FieldMeaning
players[].classgladiator, templar, assassin, ranger, sorcerer, spiritmaster (or elementalist), cleric, chanter
players[].specsskill name → chosen specialization slots 1-5
players[].statsoptional: 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_idthe game's skill id; variant codes are fine (the viewer maps them to the class skill)
hits[].multiextra hits of a multi-hit (0 = none)
hits[].stepname of a chain follow-up (e.g. "Cold Wave" with Ice Chain's id)
segments[].hpboss 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).