---
title: "Verify one or many T-numbers (batch)"
method: POST
path: "/v1/verify"
tags: ["Verification"]
---

# Verify one or many T-numbers (batch)

`POST /v1/verify`

## Request

- Base URL: `https://jp-verify.obolpay.xyz`
- URL: `https://jp-verify.obolpay.xyz/v1/verify`
- Auth: one of:
  - none
  - API key in header `X-API-Key`

## Headers

- `X-API-Key` string

## Request body

- object: ``POST /v1/verify`` body.
  - `numbers` string[], required: T-numbers to verify (a comma-joined string is also accepted); up to the caller's tier batch ceiling — see the service description
  - `sign` boolean, nullable: return an Ed25519-signed record (Growth/Reseller keys only; otherwise the response says so and signs nothing)
  - `include` string[], nullable: add-ons to embed in each result (1.5.0; a comma-separated string is also accepted). `shareholders` replaces the free compact `major_shareholders` object with the full block (holders[] and filings[]) and costs +1 unit per corporate result that actually carries rows; a status-only answer costs nothing extra. Unknown members are ignored.

## Response `200`

One record per well-formed input number (a `not_registered` or `invalid` record carries every documented key, null where the register has nothing to say — never an absent key); malformed inputs are listed under `invalid[]`, unmetered. The example is the real response of this code on a sample register.

- unknown

## Other responses

- `400`: Malformed input — refused before metering; nothing was charged.
- `401`: Unknown, inactive, or expired API key.
- `413`: Request body over the size cap — refused before it was buffered or parsed; nothing was charged.
- `422`: Validation Error
- `429`: Quota exceeded for the caller's tier.
- `503`: The register, or an optional feature, is unavailable or not configured on this deployment. A register 503 (since 1.4.1) also carries the mirror's `data_as_of` with the source fields — `source_latest_diff_date` (the newest 差分 the NTA 公表サイト listed when the sync last read it), `source_checked_at`, `source_gap_business_days` and `freshness.rule` (`stale` here) — so a caller can tell a mirror that is behind its source (`data_date` older than `source_latest_diff_date`) from a source that has not published (equal, but `source_checked_at` older than `freshness.source_check_max_hours`); `data_as_of` is null when the mirror is absent. Nothing was charged.

---

[API](https://skmtc.dev/obolpay/apis/jp-verify.md) · [All operations](https://skmtc.dev/obolpay/apis/jp-verify/llms.txt) · [OpenAPI document](https://skmtc.dev/obolpay/apis/jp-verify/revisions/bf8851690df0?raw)
