Accessibility Design Token Enforcer
API Contract
REST
/api/v1/design-token-rules
8 endpoints
GET
/api/v1/design-token-rules/api/v1/design-token-rules
List all design token enforcement rules
Public
Response Example
{
"data": [
{
"rule_id": "dtr-001",
"rule_name": "min_contrast_ratio_text",
"category": "contrast",
"threshold": 4.5,
"severity": "error",
"description": "Normal text must meet WCAG AA contrast ratio of 4.5:1",
"is_active": true
},
{
"rule_id": "dtr-002",
"rule_name": "min_touch_target_size",
"category": "touch_target",
"threshold": 44,
"severity": "error",
"description": "Interactive elements must be at least 44×44 logical pixels",
"is_active": true
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 8
}
}
GET
/api/v1/design-token-rules/api/v1/design-token-rules/:id
Get a single design token rule by ID
Public
Response Example
{
"rule_id": "dtr-001",
"rule_name": "min_contrast_ratio_text",
"category": "contrast",
"threshold": 4.5,
"severity": "error",
"description": "Normal text must meet WCAG AA contrast ratio of 4.5:1",
"is_active": true,
"created_at": "2026-01-10T08:00:00Z",
"updated_at": "2026-02-05T09:30:00Z"
}
POST
/api/v1/design-token-rules/api/v1/design-token-rules
Create a new design token rule
Public
Request Example
{
"rule_name": "min_font_size_body",
"category": "typography",
"threshold": 16,
"severity": "warning",
"description": "Body text must be at least 16sp to aid readability",
"is_active": true
}
Response Example
{
"rule_id": "dtr-009",
"rule_name": "min_font_size_body",
"category": "typography",
"threshold": 16,
"severity": "warning",
"is_active": true,
"created_at": "2026-03-26T11:10:00Z"
}
PUT
/api/v1/design-token-rules/api/v1/design-token-rules/:id
Update an existing design token rule
Public
Request Example
{
"threshold": 48,
"description": "Raised minimum touch target to 48×48 px per updated guidelines"
}
Response Example
{
"rule_id": "dtr-002",
"rule_name": "min_touch_target_size",
"threshold": 48,
"updated_at": "2026-03-26T11:15:00Z"
}
DELETE
/api/v1/design-token-rules/api/v1/design-token-rules/:id
Delete a design token rule
Public
Response Example
{
"deleted": true,
"rule_id": "dtr-009"
}
POST
/api/v1/design-token-rules/api/v1/design-token-rules/validate-token-usage
Lint a widget file for design token compliance
Public
Request Example
{
"widget_file": "lib/widgets/onboarding_choice_card.dart",
"content": "Container(color: Color(0xFFCCCCCC), child: Text('Choose', style: TextStyle(fontSize: 12)))"
}
Response Example
{
"widget_file": "lib/widgets/onboarding_choice_card.dart",
"lint_results": [
{
"rule_id": "dtr-001",
"rule_name": "min_contrast_ratio_text",
"line": 1,
"actual_value": "#CCCCCC on #FFFFFF = 1.6:1",
"expected": "≥ 4.5:1",
"severity": "error",
"message": "Text colour #CCCCCC on white background fails WCAG AA contrast"
},
{
"rule_id": "dtr-009",
"rule_name": "min_font_size_body",
"line": 1,
"actual_value": "12sp",
"expected": "≥ 16sp",
"severity": "warning",
"message": "Font size 12sp is below the recommended minimum of 16sp"
}
]
}
POST
/api/v1/design-token-rules/api/v1/design-token-rules/check-contrast
Check whether a foreground/background pair meets contrast requirements
Public
Request Example
{
"foreground": "#1F2937",
"background": "#F9FAFB"
}
Response Example
{
"foreground": "#1F2937",
"background": "#F9FAFB",
"contrast_ratio": 15.3,
"passes_aa_normal": true,
"passes_aa_large": true,
"passes_aaa_normal": true
}
GET
/api/v1/design-token-rules/api/v1/design-token-rules/lint-config
Get the generated lint configuration map for all active rules
Public
Response Example
{
"generated_at": "2026-03-26T11:20:00Z",
"rules": {
"min_contrast_ratio_text": {
"threshold": 4.5,
"severity": "error"
},
"min_touch_target_size": {
"threshold": 48,
"severity": "error"
},
"min_font_size_body": {
"threshold": 16,
"severity": "warning"
}
}
}