Identity, redaction and leads logo

Open Badges 2.0 / 3.0 credential verifier

$0.05 USDC per call · Business, finance and compliance · POST /api/v1/open-badges-verifier · Id open-badges-verifier

Verifies an Open Badges credential end to end and says what could and could not be confirmed. Accepts an Open Badges 3.0 credential (JSON with an eddsa-jcs-2022 proof, or a VC-JWT signed with EdDSA, ES256 or RS256), an Open Badges 2.0 assertion (hosted, or signed as an RS256 JWS), a hosted-assertion URL, or a baked PNG or SVG image. Checks the 2.0/3.0 required fields, the issuance and expiry window, the signature, that the signing key (did:key, did:web, JWKS or CryptographicKey) really belongs to the named issuer, the hosted-assertion, BadgeClass and Issuer chain with allowedOrigins and startsWith rules, and revocation (2.0 revocation lists and revoked flag, 3.0 1EdTechRevocationList and Bitstring status lists). Optionally confirms a recipient's email or identity against the badge's salted hash. Every check is pass, fail, unknown (for example an issuer host was unreachable) or unsupported (for example an RDF-canonicalization proof suite), and the verdict is valid only when nothing failed and nothing is left open. No model is used. Remote documents are fetched through an SSRF-guarded client, at most 12 per call, and JSON-LD contexts are never fetched.

What you get

A badge that merely renders proves nothing. This call tells an employer, LMS or wallet whether the issuer really signed it, whether it is expired or revoked, and which parts could not be checked, in under ten seconds.

Call it

Send the JSON body below to https://agents.writerslogic.com/api/v1/open-badges-verifier. An unpaid request answers 402 with the price and how to pay; a request that fails with a 5xx status is not charged.

curl -i -X POST https://agents.writerslogic.com/api/v1/open-badges-verifier \
  -H 'content-type: application/json' \
  -d '{"credential":{"@context":["https://www.w3.org/ns/credentials/v2","https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"],"id":"urn:uuid:5b6d2c1e-0c1a-4a52-9a53-0c0f7a1c9e11","type":["VerifiableCredential","OpenBadgeCredential"],"issuer":{"id":"did:key:z6MkgAnvkP45uNxwCKeNdt6wrYkEjpYX4f7Nrd8MQqFL8Fbn","type":["Profile"],"name":"Example University"},"validFrom":"2025-01-15T00:00:00Z","name":"Example Achievement","credentialSubject":{"type":["AchievementSubject"],"identifier":[{"type":"IdentityObject","hashed":false,"identityHash":"learner@example.org","identityType":"emailAddress"}],"achievement":{"id":"https://issuer.example/achievements/1","type":["Achievement"],"name":"Example Achievement","description":"Awarded for completing the example course.","criteria":{"narrative":"Complete all modules with a passing grade."}}},"proof":{"type":"DataIntegrityProof","cryptosuite":"eddsa-jcs-2022","created":"2025-01-15T00:00:00Z","verificationMethod":"did:key:z6MkgAnvkP45uNxwCKeNdt6wrYkEjpYX4f7Nrd8MQqFL8Fbn#z6MkgAnvkP45uNxwCKeNdt6wrYkEjpYX4f7Nrd8MQqFL8Fbn","proofPurpose":"assertionMethod","proofValue":"z3iyvJ3hfobNHzMPsBC39QPoo57kX7UWTBkCjL7wda4hxWDoeDeb1tQPq7HueQbbAxBEofghDqXa1rG8MEJexaUWt"}},"recipientIdentity":"learner@example.org"}'

Input

FieldTypeRequiredDescription
credentialanynoThe credential or assertion as a JSON object (or the same as a JSON string, or a compact JWS string).
jwsstring; length 0..1000000noA compact JWS: an Open Badges 3.0 VC-JWT or an Open Badges 2.0 signed assertion.
urlstring; length 0..2000nohttps URL of a hosted Open Badges 2.0 assertion or a hosted 3.0 credential.
imagestring; length 0..8500000noA baked badge image, base64 (data URLs accepted): a PNG with an openbadges iTXt chunk, or an SVG with an openbadges:assertion or openbadges:credential element. Up to 6 MB decoded.
recipientIdentitystring; length 1..320noOptional: the recipient's email or other identity to compare against the badge's recipient, including salted sha256$ and md5$ hashes.

Example request body

{
  "credential": {
    "@context": [
      "https://www.w3.org/ns/credentials/v2",
      "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
    ],
    "id": "urn:uuid:5b6d2c1e-0c1a-4a52-9a53-0c0f7a1c9e11",
    "type": [
      "VerifiableCredential",
      "OpenBadgeCredential"
    ],
    "issuer": {
      "id": "did:key:z6MkgAnvkP45uNxwCKeNdt6wrYkEjpYX4f7Nrd8MQqFL8Fbn",
      "type": [
        "Profile"
      ],
      "name": "Example University"
    },
    "validFrom": "2025-01-15T00:00:00Z",
    "name": "Example Achievement",
    "credentialSubject": {
      "type": [
        "AchievementSubject"
      ],
      "identifier": [
        {
          "type": "IdentityObject",
          "hashed": false,
          "identityHash": "learner@example.org",
          "identityType": "emailAddress"
        }
      ],
      "achievement": {
        "id": "https://issuer.example/achievements/1",
        "type": [
          "Achievement"
        ],
        "name": "Example Achievement",
        "description": "Awarded for completing the example course.",
        "criteria": {
          "narrative": "Complete all modules with a passing grade."
        }
      }
    },
    "proof": {
      "type": "DataIntegrityProof",
      "cryptosuite": "eddsa-jcs-2022",
      "created": "2025-01-15T00:00:00Z",
      "verificationMethod": "did:key:z6MkgAnvkP45uNxwCKeNdt6wrYkEjpYX4f7Nrd8MQqFL8Fbn#z6MkgAnvkP45uNxwCKeNdt6wrYkEjpYX4f7Nrd8MQqFL8Fbn",
      "proofPurpose": "assertionMethod",
      "proofValue": "z3iyvJ3hfobNHzMPsBC39QPoo57kX7UWTBkCjL7wda4hxWDoeDeb1tQPq7HueQbbAxBEofghDqXa1rG8MEJexaUWt"
    }
  },
  "recipientIdentity": "learner@example.org"
}

Result

The response is { "data": ..., "_provenance": ... }. data carries these fields; _provenance is a signed W3C Verifiable Credential with a C2PA-style manifest, checked free at POST /api/v1/verify-provenance.

FieldTypeRequiredDescription
verdictstring; one of "valid", "invalid", "unverified"noinvalid: at least one check failed. unverified: nothing failed but some checks are unknown or unsupported. valid: every check passed.
verdictReasonstringno
formatstring; one of "ob2-hosted", "ob2-signed", "ob3-credential", "ob3-jwt", "unrecognized"no
specVersionstring; one of "2.0", "3.0", "unknown"no
sourcestring; one of "json", "jws", "url", "png", "svg"no
checksarray<object>no
summaryobjectno
badgeone ofno
proofone ofno
recipientobjectnomatched (true, false or null when no identity was supplied) and detail.
fetchedarray<object>no
deterministicbooleannoAlways true: no model is involved.

Pay and connect

Available through: x402 (USDC on Base), MCP, RapidAPI, Apify.

Machine-readable