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"
    }
  }
}

Additional Metadata

{
  "contract_summary": {
    "total_contracts": 410,
    "total_endpoints": 2416,
    "api_styles_used": [
      "rest"
    ]
  },
  "generated_at": "2026-03-26T06:55:53.316Z"
}