Reference
Every code, and what to do about it.
All 33 validation codes, with plain-language explanations and shareable links. Check a badge.
Input problems
11 codesThe file or URL never produced a credential the validator could read. Nothing about the issuer or the signature has been judged yet.
input_fetch_failedThe address could not be reached, timed out, or answered with an error status.
Open the URL in a browser. If it needs a login or sits behind a company network, download the credential and upload the file instead.
unsupported_input_formatThe bytes are not a badge credential in any format the validator supports.
Check that you are not uploading a decorative copy of the badge image, a PDF certificate, or a screenshot.
missing_baked_payloadThe image is a valid PNG or SVG, but no credential is baked into it.
Ask the issuer for the hosted credential URL or the JSON file. Images saved from social media almost always lose the baked payload.
invalid_pngThe PNG structure is damaged or truncated.
Download the original file again rather than copying it out of a document or a chat app.
invalid_svgThe SVG could not be parsed, or its assertion block is broken.
Re-export the badge from the issuing platform, or use the hosted URL.
invalid_jsonThe document is not well formed JSON.
If you pasted the credential into a file by hand, check for a missing bracket or a trailing comma.
invalid_jwtThe token is not a well formed compact JWS.
A VC-JWT has exactly three base64url segments separated by dots. Copy the whole token, including the signature.
jose_header_invalidThe JWT header is missing required fields or declares an unexpected type.
This is an issuing problem. Send the token to the platform that produced it.
missing_contextThe credential does not declare the @context the standard requires.
Usually means a credential fragment was exported rather than the full document.
invalid_jsonldA declared context could not be resolved or expanded.
Often a temporary network problem at the context host. Try again, then report it to the issuer.
parser_limit_exceededThe document is deeper, larger, or more repetitive than the parser limits allow.
Split batch exports into individual credentials before validating them.
Credential problems
22 codesA credential was read, and something about its content, proof, or status does not hold up. These are the results worth paying attention to.
missing_required_fieldA property the specification marks as required is absent, such as the issuer, the achievement, or the issuance date.
The credential cannot be relied on as evidence. Ask the issuer to reissue it.
invalid_field_valueA property exists but holds a value of the wrong shape, such as a malformed date.
Note the path reported with the error and send it to the issuing platform.
schema_validation_failedThe credential body does not match the published JSON Schema for its type.
Treat it as a conformance bug on the issuing side.
credential_schema_failedA schema the credential itself points to rejected the document.
The issuer declared a stricter schema than the credential satisfies.
invalid_credential_typeThe type array does not describe an Open Badges credential the validator recognises.
Check whether the document is a different kind of verifiable credential.
proof_verification_failedThe signature does not match the document. The content has changed since it was signed, or it was signed with a different key.
Do not trust the credential. Ask the issuer for a fresh copy and compare the two.
verification_method_not_resolvedThe key or DID named in the proof could not be fetched or read.
Common when an issuer rotates keys or moves a key file. The issuer has to republish it.
unsupported_proof_typeThe proof uses a mechanism outside the supported set.
Tell us which proof type you are working with and we will look at adding it.
unsupported_cryptosuiteThe data integrity cryptosuite is not one we verify.
Same as above. Send an example and we will take a look.
credential_revokedThe issuer has revoked this credential on its status list.
The badge was genuine and is no longer valid. Only the issuer can explain why.
credential_suspendedThe credential is suspended, which is usually temporary.
Ask the issuer when it will be reinstated.
credential_expiredThe validity window closed before today.
Expiry is normal for credentials that need renewal. The achievement still happened.
credential_not_yet_validThe validity window starts in the future.
Check the issuance date against the current date.
invalid_identifierAn identifier is not a usable IRI or DID.
An issuing bug. Report it with the reported path.
jwt_claim_mismatchA JWT claim disagrees with the credential body it wraps, for example a different subject.
Do not trust the credential until the issuer explains it.
jwt_required_claim_missingA claim the profile requires is absent from the token.
Report it to the issuing platform.
external_resource_unreachableAn issuer profile, achievement definition, image, or evidence link did not resolve.
Often a reorganised website. The credential may still be signed and valid.
status_type_unsupportedThe status mechanism is not one we can read.
Ask the issuer which status list they publish.
refresh_failedA refresh service was declared and did not answer.
Non fatal on its own. Try again later.
recipient_mismatchAn expected recipient was supplied and the credential names someone else.
The public form never supplies one, so this only appears through the API.
unsupported_vc_profileThe verifiable credential profile is outside VC 1.1 and VC 2.0.
Send us the credential and we will look at the profile.
context_order_invalidContexts are declared in the wrong order, which changes how terms resolve.
The Verifiable Credentials context has to come first. Report it to the issuer.
Code not listed?
Send it over and we will document it.