eAkto Docs
/

Error format

Expected application failures return a stable JSON envelope:

{
  "error": {
    "code": "IDENTITY_ASSURANCE_REQUIRED",
    "title": "Identity verification required",
    "message": "A current Face Liveness and eVerify result is required to access government documents.",
    "suggested_action": "Complete identity verification and try again.",
    "retryable": false
  }
}

Fields

Field Meaning
code Stable machine-readable identifier
title Short citizen-friendly heading
message Safe explanation without stack details
suggested_action What the citizen or developer should do next
retryable Whether repeating the same action may succeed

Common status classes

Status Example
400 Capability or request not registered
401 Missing, invalid, expired, or signed-out session
403 High assurance, consent, or capability permission required
404 Owned resource or development-only endpoint unavailable
409 Invalid journey order, unavailable workflow, or missing idempotency
413 Upload exceeds configured size
422 Invalid request or unsupported document type
429 Capability rate limit reached
500 Unexpected server failure, redacted
503 Provider or configuration unavailable
504 Provider timeout

Flutter mapping

ApiClient converts a backend envelope into AppError. Network failures without an envelope use a local, retryable “backend unavailable” message.

UI code should display title, message, and suggestedAction; it should not branch on human-readable strings. Use code when program behavior differs.

View source

Built for the eGovPH Hackathon 2026. Prototype guidance is not official agency policy.