♿ WIA A11Y API Documentation

REST API for sign language, braille, TTS audiobook, and accessibility services. 254 languages supported. Integrate accessibility into your publishing pipeline.

Base URL: https://a11y.wiabook.com/api/v1

Overview

The WIA A11Y API provides six core services:

EndpointServicePrice/PU
/sign-languageText to sign language gestures (93 gestures, 254 languages)$0.02
/brailleText to braille (UEB + Korean + IPA)$0.01
/ttsText to audiobook (Piper TTS / Premium)$0.03
/a11y-checkWCAG 2.1 AA accessibility check$0.01
/a11y-fixAuto-fix accessibility issues$0.02
/full-packageAll 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_.

Security: Never expose your API key in client-side code. Always call from your server.

Page Units

Billing is based on Page Units (PU):

Supported input formats: EPUB, PDF, DOCX, HWP/HWPX, TXT, MD, HTML, or raw text.

Rate Limits

PlanRate LimitMonthly Quota
Pay As You Go10 req/minPrepaid credits
Starter ($99/mo)30 req/min500 PU
Pro ($299/mo)60 req/min2,000 PU
Enterprise ($999/mo)UnlimitedUnlimited

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.

POST /api/v1/sign-language

Parameters

FieldTypeRequiredDescription
fileFile*Upload EPUB/PDF/DOCX/TXT/HTML file
textString*Raw text input (alternative to file)
langStringNoLanguage 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.

POST /api/v1/braille

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.

POST /api/v1/tts

Additional Parameters

FieldTypeDescription
premiumBooleanUse 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.

POST /api/v1/a11y-check

Additional Parameters

FieldTypeDescription
urlStringURL 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.

POST /api/v1/a11y-fix

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.

POST /api/v1/full-package

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.

GET /api/v1/account
{
  "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

StatusErrorDescription
400Bad RequestMissing or invalid parameters
401UnauthorizedMissing or invalid API key
403ForbiddenInvalid API key
429Rate LimitedToo many requests or quota exceeded
500Server ErrorInternal processing error

Need help? a11y@wiastandards.com | View Plans | Free A11Y Checker

© 2018 – WIA · President Yeon Sam-Heum, Ph.D.