♿ WIA A11Y API Documentation
REST API for sign language, braille, TTS audiobook, and accessibility services. 254 languages supported. Integrate accessibility into your publishing pipeline.
https://a11y.wiabook.com/api/v1
Overview
The WIA A11Y API provides six core services:
| Endpoint | Service | Price/PU |
|---|---|---|
/sign-language | Text to sign language gestures (93 gestures, 254 languages) | $0.02 |
/braille | Text to braille (UEB + Korean + IPA) | $0.01 |
/tts | Text to audiobook (Piper TTS / Premium) | $0.03 |
/a11y-check | WCAG 2.1 AA accessibility check | $0.01 |
/a11y-fix | Auto-fix accessibility issues | $0.02 |
/full-package | All services combined (discounted) | $0.05 |
Authentication
All API requests require a Bearer token in the Authorization header:
Authorization: Bearer wia_a11y_your_api_key_here
Get your API key by subscribing at /pricing. Keys start with wia_a11y_.
Page Units
Billing is based on Page Units (PU):
- 1 Page Unit = 1,000 characters (including spaces)
- Minimum charge: 1 PU per request
- Example: 200-page novel (~200,000 chars) = 200 PU
- Example: 20-page picture book (~5,000 chars) = 5 PU
Supported input formats: EPUB, PDF, DOCX, HWP/HWPX, TXT, MD, HTML, or raw text.
Rate Limits
| Plan | Rate Limit | Monthly Quota |
|---|---|---|
| Pay As You Go | 10 req/min | Prepaid credits |
| Starter ($99/mo) | 30 req/min | 500 PU |
| Pro ($299/mo) | 60 req/min | 2,000 PU |
| Enterprise ($999/mo) | Unlimited | Unlimited |
When rate limited, you'll receive a 429 response with a retryAfter field (seconds).
POST /sign-language
Convert text to sign language gesture sequences. 254 languages supported.
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
file | File | * | Upload EPUB/PDF/DOCX/TXT/HTML file |
text | String | * | Raw text input (alternative to file) |
lang | String | No | Language code (default: ko) |
* Either file or text is required
Response
{
"success": true,
"service": "sign-language",
"input": {
"format": "text",
"page_units": 200,
"language": "ko"
},
"output": {
"sign_data_url": "https://a11y.wiabook.com/api/results/...",
"viewer_url": "https://wiatalk.com/sign-viewer.html?data=...",
"embed_code": "<iframe ...>",
"total_sentences": 1870,
"total_gestures": 10419,
"gestures_per_sentence_avg": 5.6
},
"billing": {
"page_units_charged": 200,
"price_per_unit": 0.02,
"total_charged": 4.00,
"currency": "USD",
"remaining_quota": 300
}
}
POST /braille
Convert text to braille. UEB international standard + Korean braille + IPA phoneme mapping.
Same parameters as /sign-language. Returns braille text, HTML, and character counts.
Price: $0.01/PU
POST /tts
Convert text to audiobook (chapter-by-chapter MP3). 30+ languages via Piper TTS.
Additional Parameters
| Field | Type | Description |
|---|---|---|
premium | Boolean | Use premium voice engine (+50% PU cost) |
Price: $0.03/PU (standard) | $0.045/PU (premium)
POST /a11y-check
Run WCAG 2.1 AA accessibility check on HTML content or URL.
Additional Parameters
| Field | Type | Description |
|---|---|---|
url | String | URL to check (alternative to file/text) |
Returns score (0-100), violations, passes, and category scores (Perceivable, Operable, Understandable, Robust).
Price: $0.01/PU | URL check: 1 PU flat
POST /a11y-fix
Automatically fix accessibility issues in HTML content. Adds alt text, lang attributes, viewport, ARIA labels, high-contrast CSS, and semantic tags.
Returns original score, fixed score, list of fixes applied, and URL to fixed content.
Price: $0.02/PU
POST /full-package
Complete accessibility transformation: sign language + braille + TTS + check + fix + badge. Discounted vs individual services.
Same parameters as /sign-language. Returns combined results from all services plus certification badge.
Price: $0.05/PU (vs $0.06 individual total)
Response includes
- Sign language gesture data + viewer URL
- Braille text conversion
- TTS audiobook chapters
- Accessibility check score + violations
- Auto-fixed content
- Certification badge (Premium/Platinum based on score)
- Billing breakdown with discount
GET /account
View your API key account info, quota usage, and plan details.
{
"success": true,
"account": {
"email": "user@example.com",
"plan": "pro",
"monthly_quota": 2000,
"used_this_month": 450,
"remaining": 1550,
"rate_limit": "60 req/min",
"quota_resets": "2026-04-01"
}
}
Examples: cURL
# Sign language conversion (text)
curl -X POST https://a11y.wiabook.com/api/v1/sign-language \
-H "Authorization: Bearer wia_a11y_YOUR_KEY" \
-F "text=Hello world. This is a test." \
-F "lang=en"
# Braille conversion (file upload)
curl -X POST https://a11y.wiabook.com/api/v1/braille \
-H "Authorization: Bearer wia_a11y_YOUR_KEY" \
-F "file=@my-book.epub" \
-F "lang=ko"
# Full package
curl -X POST https://a11y.wiabook.com/api/v1/full-package \
-H "Authorization: Bearer wia_a11y_YOUR_KEY" \
-F "file=@document.pdf" \
-F "lang=en"
# Check account
curl https://a11y.wiabook.com/api/v1/account \
-H "Authorization: Bearer wia_a11y_YOUR_KEY"
Examples: Python
import requests
API_KEY = "wia_a11y_YOUR_KEY"
BASE = "https://a11y.wiabook.com/api/v1"
headers = {"Authorization": f"Bearer {API_KEY}"}
# Text input
resp = requests.post(f"{BASE}/sign-language",
headers=headers,
data={"text": "Hello world", "lang": "en"})
print(resp.json())
# File upload
with open("book.epub", "rb") as f:
resp = requests.post(f"{BASE}/full-package",
headers=headers,
files={"file": f},
data={"lang": "ko"})
print(resp.json())
Examples: Node.js
const API_KEY = 'wia_a11y_YOUR_KEY';
const BASE = 'https://a11y.wiabook.com/api/v1';
// Text input
const resp = await fetch(`${BASE}/braille`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ text: 'Hello world', lang: 'en' })
});
console.log(await resp.json());
// File upload
const form = new FormData();
form.append('file', fs.createReadStream('book.epub'));
form.append('lang', 'ko');
const resp2 = await fetch(`${BASE}/full-package`, {
method: 'POST',
headers: { 'Authorization': `Bearer ${API_KEY}` },
body: form
});
console.log(await resp2.json());
Examples: PHP
$apiKey = 'wia_a11y_YOUR_KEY';
$base = 'https://a11y.wiabook.com/api/v1';
// Text input
$ch = curl_init("$base/tts");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => ['text' => 'Hello world', 'lang' => 'en'],
CURLOPT_HTTPHEADER => ["Authorization: Bearer $apiKey"]
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
// File upload
$ch = curl_init("$base/full-package");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'file' => new CURLFile('book.epub'),
'lang' => 'ko'
],
CURLOPT_HTTPHEADER => ["Authorization: Bearer $apiKey"]
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
Error Codes
| Status | Error | Description |
|---|---|---|
400 | Bad Request | Missing or invalid parameters |
401 | Unauthorized | Missing or invalid API key |
403 | Forbidden | Invalid API key |
429 | Rate Limited | Too many requests or quota exceeded |
500 | Server Error | Internal processing error |
Need help? a11y@wiastandards.com | View Plans | Free A11Y Checker
© 2018 – WIA · President Yeon Sam-Heum, Ph.D.