Skip to main content

APIs

Updated on 30 August 2025.

The server base URL is https://talao.co.


POST /api/analyze-qrcode

Analyze a base64-encoded QR code representing an authorization request and/or presentation definition within the OIDC4VC ecosystem. The service evaluates structure, protocol compliance (OIDC4VCI / OIDC4VP), and semantic correctness using an AI agent, then returns either a base64-encoded Markdown report or a structured JSON summary.

This API powers: https://talao.co/ai/qrcode

Authentication

Note: API key validation may be disabled in some deployments. If enabled, include the header below.

HeaderValue
Api-KeyYour authorized key

Request (JSON)

{
"qrcode": "c29tZS1hc3NpZ24tdGV4dA==", // required, base64-encoded QR content
"oidc4vciDraft": "12", // optional, OIDC4VCI draft version, Final 1.0 is "18"
"oidc4vpDraft": "18", // optional, OIDC4VP draft version, Final 1.0 is "30"
"profile": "EBSI", // optional, default "custom"
"format": "text", // optional, "text" | "json" (default "text")
"model": "flash" // optional, "flash" | "escalation" | "pro" (default "flash")
}

Notes

  • qrcode must be base64-encoded to safely transmit non‑UTF‑8/binary payloads.
  • When format = json, the service converts the AI report into a structured JSON object.

Successful Responses

When format = text (default):

{
"report_base64": "<base64-encoded UTF-8 markdown report>"
}

When format = json:

{
// Structure produced from the AI report (keys may vary by input)
}

To decode the Markdown report in Python:

import base64
print(base64.b64decode(response["report_base64"]).decode())

Profiles

If profile is custom (default), OIDC4VC draft parameters apply directly. Other ecosystem profiles may adapt validation rules.

ProfileEcosystem/Notes
EBSIEBSI v3.x
INJIMOSIP Inji stack
DIIP_V3FIDES DIIP v3.0
DIIP_V4FIDES DIIP v4.0
EWCLSP EWC
customDefault behavior

Error Responses

HTTPBodyMeaning
400{ "error": "invalid JSON body" }Malformed JSON payload
400{ "error": "missing 'qrcode' field" }Required field not provided
400{ "error": "invalid base64 for 'qrcode'" }Base64 decoding failed
403{ "error": "access denied" }API key invalid/missing (if enforced)
500{ "error": "internal processing error" }Unexpected processing error

Example cURL

curl -X POST https://talao.co/api/analyze-qrcode   -H "Content-Type: application/json"   -H "Api-Key: your-api-key"   -d '{
"qrcode": "c29tZS1hc3NpZ24tdGV4dA==",
"oidc4vciDraft": "12",
"oidc4vpDraft": "18",
"profile": "EBSI",
"format": "text",
"model": "flash"
}'

POST /api/analyze-vc

Analyze a base64-encoded Verifiable Credential (VC). The service detects SD‑JWT VC, JWT VC (compact), or JSON‑LD VC format, evaluates compliance and structure using an AI agent, and returns either a base64-encoded Markdown report or a structured JSON summary.

This API powers: https://talao.co/ai/vc

Authentication

Note: API key validation may be disabled in some deployments. If enabled, include the header below.

HeaderValue
Api-KeyYour authorized key

Request (JSON)

{
"vc": "BASE64_ENCODED_VC_STRING", // required
"sdjwtvc_draft": "8", // optional (SD-JWT VC related) from "8" to "10"
"vcdm_draft": "1.1", // optional (W3C VCDM related) "1.1" | "2.0"
"format": "text", // optional, "text" | "json" (default "text")
"model": "flash" // optional, "flash" | "escalation" | "pro" (default "flash")
}

Successful Responses

When format = text (default):

{
"report_base64": "<base64-encoded UTF-8 markdown report>"
}

When format = json:

{
// Structure produced from the AI report (keys may vary by input)
}

To decode the Markdown report in Python:

import base64
print(base64.b64decode(response["report_base64"]).decode())

Error Responses

HTTPBodyMeaning
400{ "error": "invalid JSON body" }Malformed JSON payload
400{ "error": "missing 'vc' field" }Required field not provided
400{ "error": "invalid base64 for 'vc'" }Base64 decoding failed
403{ "error": "access denied" }API key invalid/missing (if enforced)
500{ "error": "internal processing error" }Unexpected processing error

Example cURL

curl -X POST https://talao.co/api/analyze-vc   -H "Content-Type: application/json"   -H "Api-Key: your-api-key"   -d '{
"vc": "BASE64_ENCODED_VC_STRING",
"sdjwtvc_draft": "8",
"vcdm_draft": "1.1",
"format": "text",
"model": "flash"
}'

JSON Rule Catalogs

This section documents the rule codes that can appear in the structured JSON outputs of the endpoints when format is set to "json".

Why these rule catalogs matter

  • Deterministic integrations: Clients can build logic on top of stable code values, independent of natural-language wording.
  • Severity-aware UX: FAIL vs WARN vs INFO lets apps decide whether to block flows, warn users, or log telemetry.
  • Compliance mapping: Components (auth_request, issuer_metadata, vc, etc.) make it easy to highlight exactly where a problem originates.
  • Profile portability: The same rule codes apply across profiles (EBSI, INJI, DIIP, etc.), simplifying multi-ecosystem support.
  • Testing & monitoring: Codes are ideal for regression tests, dashboards, and alerting without brittle text matching.

Rule Catalog — /api/analyze-qrcode (OIDC4VC)

Each JSON response in format: "json" mode uses the following machine-readable rule codes.

CodeSeverityComponentMessage
CONTENT_TYPE_UNEXPECTEDFAILnetworkUnexpected Content-Type received.
GENERAL_PARSE_ERRORFAILgeneralReport could not be parsed.
NETWORK_FETCH_FAILEDFAILnetworkNetwork fetch failed or timed out.
OIDC4VCI_ALG_MISMATCH_PROFILEWARNissuer_metadataAlgorithm allowed by issuer but not by selected profile.
OIDC4VCI_ALG_UNSUPPORTEDWARNissuer_metadataCredential signature algorithm not supported by profile.
OIDC4VCI_AUTHZ_CODE_PARAMS_MISSINGFAILissuer_metadataAuthorization Code flow missing PKCE or required parameters.
OIDC4VCI_AUTHZ_SERVER_MISSINGWARNissuer_metadataauthorization_server metadata missing; dynamic discovery may fail.
OIDC4VCI_CONFIGURATION_MISSINGFAILissuer_metadataIssuer credential configurations are missing.
OIDC4VCI_CREDENTIAL_ENDPOINT_MISSINGFAILissuer_metadatacredential_endpoint missing in metadata.
OIDC4VCI_CREDENTIAL_IDS_UNKNOWNWARNissuer_metadataUnknown credential_configuration_ids in offer or metadata.
OIDC4VCI_DISPLAY_MISSINGWARNissuer_metadataDisplay metadata missing; UX/localization may be degraded.
OIDC4VCI_DPOP_REQUIRED_MISSINGWARNissuer_metadataDPoP required by issuer/profile but not indicated.
OIDC4VCI_ENDPOINT_MISMATCHFAILissuer_metadataEndpoints in metadata do not align with offer/authorization server metadata.
OIDC4VCI_FORMAT_UNSUPPORTEDWARNissuer_metadataRequested credential format not supported by profile.
OIDC4VCI_GRANT_COMBINATION_INVALIDFAILissuer_metadataInvalid or conflicting grant configuration.
OIDC4VCI_GRANT_MISSINGFAILissuer_metadataGrant details (e.g., pre-authorized code, authorization_code) are missing.
OIDC4VCI_ISSUER_METADATA_MISSINGFAILissuer_metadataIssuer .well-known metadata missing or unreachable.
OIDC4VCI_ISSUER_MISMATCHFAILissuer_metadataIssuer in offer does not match issuer metadata.
OIDC4VCI_JTI_REPLAY_RISKWARNissuer_metadataNo unique jti in client proofs; replay risk possible.
OIDC4VCI_JWKS_MISSINGWARNissuer_metadataJWKS/JWKS URI missing in metadata; key discovery may fail.
OIDC4VCI_JWKS_UNREACHABLEFAILissuer_metadataJWKS/JWKS URI unreachable or invalid.
OIDC4VCI_LOCALE_UNSUPPORTEDWARNissuer_metadataRequested locale not supported by display metadata.
OIDC4VCI_OFFER_CT_BADFAILnetworkcredential_offer_uri returned unexpected Content-Type.
OIDC4VCI_OFFER_JSON_INVALIDFAILcredential_offerCredential offer JSON is invalid.
OIDC4VCI_OFFER_MISSINGFAILcredential_offerCredential offer is missing or invalid.
OIDC4VCI_OFFER_URI_HTTPFAILnetworkcredential_offer_uri must use HTTPS.
OIDC4VCI_OFFER_URI_UNREACHABLEFAILnetworkcredential_offer_uri unreachable or returned an error.
OIDC4VCI_PREAUTH_CODE_MISSINGFAILcredential_offerpre-authorized_code grant selected but code missing in offer.
OIDC4VCI_PROFILE_CONFLICTWARNissuer_metadataIssuer configuration conflicts with selected ecosystem profile.
OIDC4VCI_PROOF_REQUIRED_MISSINGFAILissuer_metadataIssuer requires a proof (e.g., JWT/CNF) but none was provided.
OIDC4VCI_PROOF_TYPE_UNSUPPORTEDWARNissuer_metadataProof type not supported by profile or issuer.
OIDC4VCI_SCOPE_MISSINGWARNissuer_metadataToken scope missing or empty for issuance.
OIDC4VCI_TOKEN_ENDPOINT_MISSINGFAILissuer_metadatatoken_endpoint missing in metadata.
OIDC4VCI_USER_PIN_REQUIRED_MISSINGWARNcredential_offerUser PIN required by offer but not provided.
OIDC4VP_AUD_MISMATCHFAILauth_requestaud claim does not match the wallet/relying party.
OIDC4VP_AUTHZ_MISSINGFAILauth_requestAuthorization request is missing or invalid.
OIDC4VP_AUTHZ_PLAIN_PARAMSWARNauth_requestAuthorization request passed via plain query params; signed request/request_uri recommended.
OIDC4VP_CLIENT_ID_MISSINGFAILauth_requestclient_id is missing.
OIDC4VP_CLIENT_ID_SCHEME_INVALIDWARNauth_requestclient_id scheme not supported by profile.
OIDC4VP_CLIENT_METADATA_MISMATCHFAILclient_metadataClient metadata does not match request parameters.
OIDC4VP_CLIENT_METADATA_MISSINGWARNclient_metadataClient metadata not provided or could not be fetched.
OIDC4VP_CONSTRAINTS_INVALIDWARNpresentation_definitionConstraints or fields filters are invalid or non-portable.
OIDC4VP_CT_BADFAILnetworkrequest_uri response Content-Type must be application/oauth-authz-req+jwt.
OIDC4VP_DCQL_USEDINFOpresentation_definitionVerifier uses 'dcql_query' (Digital Credential Query).
OIDC4VP_DPOP_REQUIRED_MISSINGWARNauth_requestDPoP indicated by profile but not used in request/metadata.
OIDC4VP_FORMATS_UNSUPPORTEDWARNpresentation_definitionRequested VP/VC formats not supported by wallet profile.
OIDC4VP_INPUT_DESCRIPTOR_MISSINGFAILpresentation_definitionNo input_descriptors found in Presentation Definition.
OIDC4VP_ISS_CERT_MISMATCHFAILauth_requestIssuer does not match certificate SAN (x5c) or allowed domains.
OIDC4VP_ISS_MISSINGFAILauth_request'iss' is missing from request JWT.
OIDC4VP_NONCE_MISSINGWARNauth_requestnonce missing; replay protection may be weaker.
OIDC4VP_PD_EMBEDDEDINFOpresentation_definitionVerifier embeds 'presentation_definition'.
OIDC4VP_PD_FETCH_FAILEDFAILpresentation_definitionpresentation_definition_uri is unreachable or invalid.
OIDC4VP_PD_INVALIDFAILpresentation_definitionPresentation Definition structure is invalid.
OIDC4VP_PD_MISSINGWARNpresentation_definitionPresentation Definition/DCQL not provided.
OIDC4VP_PD_URIINFOpresentation_definitionVerifier uses 'presentation_definition_uri'.
OIDC4VP_REDIRECT_URI_MISSINGFAILauth_requestredirect_uri is missing in authorization request.
OIDC4VP_REDIRECT_URI_UNREGISTEREDFAILauth_requestredirect_uri not registered for this client_id.
OIDC4VP_REQUEST_JWT_CRIT_UNSUPPORTEDFAILauth_requestUnsupported 'crit' header in request JWT.
OIDC4VP_REQUEST_JWT_EXPIREDFAILauth_requestSigned request JWT is expired or not yet valid.
OIDC4VP_REQUEST_JWT_INVALIDFAILauth_requestSigned request JWT is invalid or malformed.
OIDC4VP_REQUEST_JWT_SIG_INVALIDFAILauth_requestSigned request JWT signature verification failed.
OIDC4VP_REQUEST_URI_HTTPFAILnetworkrequest_uri must use HTTPS.
OIDC4VP_REQUEST_URI_TOO_LARGEWARNnetworkrequest_uri payload size unusually large.
OIDC4VP_REQUEST_URI_UNREACHABLEFAILnetworkrequest_uri is unreachable or returned an error.
OIDC4VP_RESPONSE_MODE_UNSUPPORTEDWARNauth_requestresponse_mode value is unsupported by profile or verifier.
OIDC4VP_RESPONSE_TYPE_UNSUPPORTEDFAILauth_requestUnsupported or missing response_type for OIDC4VP.
OIDC4VP_SCOPE_MISSINGWARNauth_requestscope is missing or empty.
OIDC4VP_STATE_MISSINGWARNauth_requeststate missing; CSRF protection may be weaker.
OIDC4VP_TOK_BINDING_REQUIREDWARNauth_requestToken binding/holder binding required by profile but not indicated.
OIDC4VP_VP_FORMATS_MISSINGWARNclient_metadatavp_formats missing in verifier metadata.
URL_HOSTNAME_MISMATCHFAILnetworkHostname mismatch between request and expected issuer domain.
URL_SCHEME_INSECUREFAILnetworkInsecure URL scheme (http) is not allowed for this context.

Rule Catalog — /api/analyze-vc (VC formats: SD‑JWT VC, JWT VC, JSON‑LD VC)

Each JSON response in format: "json" mode uses the following machine-readable rule codes.

CodeSeverityComponentMessage
JSONLD_CANONICALIZATION_ERRORFAILvcCanonicalization/normalization error during verification.
JSONLD_CONTEXT_CONFLICTWARNvcContext term conflicts or redefinitions detected.
JSONLD_CONTEXT_MISSINGFAILvc@context is missing or invalid.
JSONLD_CONTEXT_REMOTE_FETCH_FAILFAILvc@context remote document could not be fetched/resolved.
JSONLD_CONTROLLER_RESOLVE_FAILFAILvcController/DID Document could not be resolved.
JSONLD_EVIDENCE_INVALIDWARNvcEvidence object present but invalid format/content.
JSONLD_KEY_NOT_AUTHORIZEDFAILvcKey not authorized for assertionMethod.
JSONLD_PROOF_CREATED_INVALIDWARNvc'created' timestamp invalid or outside acceptable window.
JSONLD_PROOF_MISSINGFAILvcLinked Data Proof is missing.
JSONLD_PROOF_PURPOSE_INVALIDFAILvcproofPurpose invalid or not 'assertionMethod' when required.
JSONLD_PROOF_TYPE_UNSUPPORTEDWARNvcLinked Data Proof type is unsupported for profile.
JSONLD_SCHEMA_VOCAB_UNKNOWNWARNvcUnknown vocabulary/terms (interoperability risk).
JSONLD_SIG_VERIFICATION_FAILEDFAILvcLinked Data Proof verification failed.
JSONLD_STATUS_2021_INVALIDFAILvcStatusList2021 entry invalid or not decodable.
JSONLD_TYPE_MISSINGFAILvcVC 'type' is missing.
JSONLD_VCDM_VERSION_UNEXPECTEDWARNvcUnexpected VC Data Model version/terms for profile.
JSONLD_VM_MISSINGFAILvcverificationMethod missing in proof.
JSONLD_VM_RESOLVE_FAILFAILvcverificationMethod could not be resolved to a key.
SDJWTVC_ALG_UNSUPPORTEDWARNvcUnsupported or discouraged JWS 'alg'.
SDJWTVC_AUD_MISMATCHFAILkb_jwt'aud' does not match verifier / RP.
SDJWTVC_CLAIM_INTEGRITY_FAILFAILvcReconstructed claims do not match signed payload.
SDJWTVC_CRIT_UNSUPPORTEDFAILvcUnsupported 'crit' header present.
SDJWTVC_DIGEST_MISMATCHFAILvcDigest binding / disclosure hash mismatch.
SDJWTVC_DISCLOSURE_DUPLICATEWARNvcDuplicate disclosures detected.
SDJWTVC_DISCLOSURE_FORMATFAILvcDisclosure encoding/format invalid.
SDJWTVC_DISCLOSURE_MISSINGFAILvcRequired disclosures missing.
SDJWTVC_EXP_INVALIDWARNvcToken lifetime (exp/nbf/iat) is unusual or invalid.
SDJWTVC_ISS_MISSINGFAILvc'iss' claim missing in SD-JWT VC.
SDJWTVC_KB_ALG_UNSUPPORTEDWARNkb_jwtKey binding JWS algorithm unsupported by profile.
SDJWTVC_KEYBINDING_MISSINGWARNkb_jwtKey binding (holder binding) is missing or invalid.
SDJWTVC_NONCE_MISSINGWARNkb_jwtkb-jwt nonce missing where required.
SDJWTVC_SUB_MISSINGFAILvc'sub' claim missing in SD-JWT VC.
SDJWTVC_TYP_INVALIDFAILvcUnexpected 'typ' for SD-JWT VC.
SDJWTVC_UNBOUND_DISCLOSUREFAILvcDisclosure present but not bound to SD-JWT claims.
VCJWT_ALG_UNSUPPORTEDWARNvcUnsupported or discouraged JWS 'alg' for VC-JWT.
VCJWT_AUD_MISMATCHFAILvc'aud' does not match verifier / RP.
VCJWT_CLAIMS_MISSINGFAILvcRequired VC-JWT claims are missing (vc/iss/sub/nbf/exp).
VCJWT_CRIT_UNSUPPORTEDFAILvcUnsupported 'crit' header present.
VCJWT_EXP_INVALIDWARNvcToken lifetime (exp/nbf/iat) is unusual or invalid.
VCJWT_JWKS_UNREACHABLEFAILvcJWKS/JWKS URI unreachable or invalid.
VCJWT_KID_MISSINGWARNvc'kid' missing in header; key discovery may be ambiguous.
VCJWT_SIG_VERIFICATION_FAILEDFAILvcJWT signature verification failed.
VCJWT_SUBJECT_MISMATCHFAILvcJWT 'sub' does not match 'vc.credentialSubject.id' when required.
VCJWT_TYP_INVALIDFAILvcUnexpected 'typ' for VC-JWT.
VCJWT_VC_ISSUER_MISMATCHFAILvcJWT 'iss' does not match 'vc.issuer'.
VCJWT_VC_OBJECT_MISSINGFAILvc'vc' object missing in JWT claims.
VC_AUD_MISMATCHFAILvc'aud' does not match the intended verifier/relying party.
VC_CHARSET_INVALIDFAILvcInvalid character encoding or non-UTF-8 content.
VC_DATA_FORMAT_INVALIDWARNvcField value format invalid (e.g., date/URI).
VC_ISSUER_DID_RESOLVE_FAILFAILvcIssuer DID/URL could not be resolved.
VC_ISSUER_ID_MISSINGFAILvcIssuer identifier is missing.
VC_ISSUER_METHOD_NOT_ALLOWEDWARNvcIssuer DID method not allowed by profile.
VC_JTI_DUPLICATEFAILvcUnique identifier re-use detected (possible replay).
VC_JTI_MISSINGWARNvcUnique identifier (jti/id) missing; replay protection may be weaker.
VC_KEY_ALG_UNSUPPORTEDWARNvcSignature algorithm not supported by profile.
VC_KEY_FORMAT_MISMATCHFAILvcKey format/type does not match signature/proof type.
VC_KEY_NOT_AUTHORIZEDFAILvcKey is not authorized for assertion/proof purpose.
VC_KEY_RESOLVE_FAILFAILvcCould not resolve verification key (DID Doc/JWKS/VM).
VC_KEY_REVOKEDFAILvcVerification key has been revoked/expired.
VC_KID_MISSINGWARNvcKey identifier (kid/verificationMethod) is missing.
VC_NONCE_MISMATCHFAILvcNonce/challenge mismatch with the verifier request.
VC_NONCE_MISSINGWARNvcNonce/challenge missing where required by profile.
VC_PARSE_ERRORFAILvcCredential could not be parsed (malformed JSON/JWT/bytes).
VC_SCHEMA_REQUIRED_MISSINGFAILvcRequired fields missing by profile/schema.
VC_SCHEMA_UNDECLARED_FIELDSWARNvcUndeclared or unexpected fields present (schema mismatch).
VC_SIG_CRITICAL_HEADER_UNKNOWNFAILvcUnknown or unsupported critical header/parameter present.
VC_SIG_MALFORMEDFAILvcSignature/proof object malformed.
VC_SIG_VERIFICATION_FAILEDFAILvcSignature/proof verification failed.
VC_SIZE_EXCESSIVEWARNvcCredential size unusually large; may impact transport or verification.
VC_STATUS_ENDPOINT_UNREACHABLEFAILvcStatus endpoint unreachable.
VC_STATUS_LIST_INVALIDFAILvcStatus list/entry invalid or could not be decoded.
VC_STATUS_MISSINGWARNvcNo status information present (revocation/suspension unknown).
VC_STATUS_REVOKEDFAILvcCredential is revoked.
VC_STATUS_SUSPENDEDWARNvcCredential is suspended.
VC_SUBJECT_BINDING_MISSINGWARNvcHolder binding is missing; cannot prove possession.
VC_SUBJECT_ID_FORMAT_INVALIDWARNvccredentialSubject.id format is invalid or unexpected.
VC_SUBJECT_ID_MISSINGFAILvccredentialSubject.id (or equivalent) is missing when required.
VC_TIME_CLOCK_SKEW_LARGEWARNvcClock skew or token lifetime unusually large.
VC_TIME_EXPIREDFAILvcCredential is expired.
VC_TIME_IAT_AFTER_EXPFAILvciat is after exp; time window invalid.
VC_TIME_NBF_AFTER_EXPFAILvcnbf is after exp; time window invalid.
VC_TIME_NOT_YET_VALIDFAILvcCredential is not yet valid (nbf in future).

Note: Additional rule codes may be introduced over time. Clients should treat unknown codes as non-fatal unless marked with severity: FAIL.