---
name: axiora
description: Read Japanese listed-company data (financials, ownership, capital, earnings, governance, filing text) from the Axiora API, with every row linked to the EDINET or TDnet filing it came from.
---

# Axiora skill

Use this when a task needs facts about a Japanese listed company or investor and the answer must be traceable to an official filing.

Base URL: `https://api.axiora.dev`. Endpoint index: https://axiora.dev/llms.txt. Full reference: https://axiora.dev/openapi.json.

## 1. Authenticate

Send the key on every request: `Authorization: Bearer ax_live_...`. Keys start with `ax_live_` or `ax_test_`. No key yet, or no MCP client set up: https://axiora.dev/agents.md. Plans and what each includes: https://axiora.dev/pricing.md.

MCP clients can use `https://api.axiora.dev/mcp` instead (read-only tools) with the same key as a Bearer token, or sign in through OAuth.

## 2. Resolve the identifier first

Callers usually hold a name, a 4-digit securities code (7203), an EDINET code (E02144) or an investor name. Turn it into an entity before reading data.

```
GET /v1/identifiers?id=7203
```

The response names the entity (`name`, `name_en`, `edinet_code`, `securities_code`, `isin`, `lei`, `entity_id`), lists its `roles`, and gives `links`: for each role, the endpoint that serves it. Follow a link rather than guessing a path.

- Many ids at once: `POST /v1/batch/identifiers` with `{"ids": [...]}` (up to 100). Ids that match nothing are listed in `meta.unresolved`, never dropped.
- Only a name: `GET /v1/companies/search?q=Toyota` or `GET /v1/investors/search?q=...`.
- Any path segment `{code}` accepts the EDINET code or the securities code.

## 3. Read a row

```
GET /v1/companies/7203/financials?years=5
```

Every response is `{"data": ..., "meta": ...}`.

- `data`: a list or one object. Money is JPY integers, dates are ISO 8601, and a fiscal year is named by the year it ends.
- `meta.request_id`: quote it when reporting a problem.
- `meta.total`, `meta.limit`, `meta.offset`, `meta.next_cursor`: page with `limit` and `offset`, or pass `next_cursor` back as `cursor` until it is null.
- `meta.as_of` (on derived data): pass it back as `?as_of=` to get the same rows later, even after the data has been updated.
- `meta.caveats`: context you should carry into the answer, for example that a history is not adjusted for stock splits.

Cite the source. Financial rows carry `source_doc_id`; filing-derived rows carry `doc_id`. Both are EDINET (or TDnet) document ids, and `GET /v1/filings/{doc_id}` returns the filing. A null field means the filing did not report it or it is not yet covered; say so rather than filling a value.

Field meanings: `GET /v1/ontology/fields` and `GET /v1/ontology/fields/{field_name}`.

## 4. Handle errors

Errors keep the envelope: `{"error": {"code", "message", "details"}, "meta": {"request_id"}}`. Branch on `error.code`, not on the message.

| Status | Code | What to do |
| --- | --- | --- |
| 400 | UNKNOWN_QUERY_PARAMETER | A parameter is not accepted here. `error.details.valid` lists the ones that are. Fix and retry. |
| 401 | UNAUTHORIZED | Key missing or invalid. Check the `Authorization` header. |
| 403 | FORBIDDEN | The key is not allowed to use this endpoint. Tell the user; do not retry. |
| 403 | TIER_REQUIRED | The endpoint or dataset needs a higher plan than the key has. Tell the user; do not retry. |
| 404 | NOT_FOUND | Not in coverage. Report it as absent; do not substitute another company. |
| 404 | IDENTIFIER_NOT_AN_ISSUER | The id is an investor or other entity, not a listed company. Use `error.details.links`. |
| 404 | ISSUER_NOT_ON_EDINET | Listed, but files on TDnet only. Use the earnings endpoints in `error.details.links`. |
| 404 | UNKNOWN_ENDPOINT | The path does not exist. Check https://axiora.dev/openapi.json. |
| 413 | BODY_TOO_LARGE | The request body is over the size limit. Send less per request. |
| 422 | VALIDATION_ERROR | A value is malformed or out of range. `error.message` names it. |
| 429 | RATE_LIMITED | Wait for the seconds in `Retry-After`, then retry. `X-RateLimit-Remaining` shows what is left. |
| 500 | INTERNAL_ERROR | Safe to retry once. If it repeats, report the `request_id`. |

## Common tasks

- Who holds 5% or more of a company, and how has it changed: `GET /v1/companies/{code}/ownership/trajectories`, then `GET /v1/companies/{code}/ownership/signals`.
- What one investor holds: `GET /v1/investors/search?q=`, then `GET /v1/investors/{code}/positions`.
- Biggest recent ownership moves across the market: `GET /v1/ownership/movers`.
- Results and guidance: `GET /v1/companies/{code}/earnings`, `/forecasts`, `/forecast-revisions`.
- Buybacks: `GET /v1/companies/{code}/buybacks`.
- Filing text in English: `GET /v1/filings/{doc_id}/translations`.

Axiora does not serve real-time prices, order books or trade execution.
