01 / request
Start with a VPX Badge ID
The path parameter must use this exact grammar:
VPX-YYYY-XXXXXXXX- YYYY is a four-digit year.
- XXXXXXXX is eight characters from
A-H J-N P-Z 2-9. - The identifier is uppercase; the alphabet omits I, O, 0, and 1.
A malformed ID returns HTTP 400 with code invalid_badge_id. A well-formed ID with no public issued record follows the privacy-safe 404 behavior below.
02 / integrate
Make the request
Send a GET request to the relative route from your application’s public origin. The endpoint does not require an API key or a session.
curl --request GET \
--url https://veripix.polsia.app/api/badges/VPX-2026-ABCD234503 / response
Read the public projection
An issued badge record returns HTTP 200 with ten top-level fields. Dotted paths below describe each nested registration and history field. The normalized status distinguishes active, revoked, and corrected records. Private account, payment, storage, and upload fields are never included.
Every sample below is illustrative, including its VPX ID and image URL. The base64 signature and public-key strings satisfy the response format but are synthetic, are not a production key pair, and cannot verify a real badge.
Successful lookups return HTTP 200. The embedded history and /api/badges/{badgeId}/history contain at most 100 events: the registration followed by the 99 newest verifications in chronological order. Older events are omitted from this response. The public JSON response is capped at 32 KiB.
| Field | Type |
|---|---|
| vpxBadgeId | string |
| imageUrl | string (URL) |
| photoSha256 | string |
| registeredAt | string (ISO 8601) |
| issuanceStatus | string |
| status | string |
| statusExplanation | string |
| registrationEvent | object |
| registrationEvent.eventType | string |
| registrationEvent.vpxBadgeId | string |
| registrationEvent.photoSha256 | string |
| registrationEvent.registeredAt | string (ISO 8601) |
| registrationEvent.signature | string (base64) |
| registrationEvent.algorithm | string |
| registrationEvent.keyId | string |
| registrationEvent.publicKey | string (base64) |
| registrationEvent.verificationStatus | string |
| verificationHistory | object |
| verificationHistory.vpxBadgeId | string |
| verificationHistory.events | array (up to 100) |
| verificationHistory.events[].eventType | string |
| verificationHistory.events[].timestamp | string (ISO 8601) |
| verificationHistory.events[].signatureStatus | string |
| squad | object | null |
| squad.familyId | string |
| squad.memberNames | array of strings |
| badgePresentation | object |
| badgePresentation.badge | object or null |
| badgePresentation.disclaimer | string |
| disclaimer | string |
{
"vpxBadgeId": "VPX-2026-ABCD2345",
"imageUrl": "https://assets.example.test/photo.jpg",
"photoSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"registeredAt": "2026-09-13T00:00:00.000Z",
"issuanceStatus": "ISSUED",
"status": "active",
"statusExplanation": "This badge is active and currently valid.",
"registrationEvent": {
"eventType": "INITIAL_REGISTRATION",
"vpxBadgeId": "VPX-2026-ABCD2345",
"photoSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"registeredAt": "2026-09-13T00:00:00.000Z",
"signature": "c2lnbmF0dXJl",
"algorithm": "Ed25519",
"keyId": "illustrative-key-id",
"publicKey": "cHVibGljLWtleQ==",
"verificationStatus": "valid"
},
"verificationHistory": {
"vpxBadgeId": "VPX-2026-ABCD2345",
"events": [
{
"eventType": "INITIAL_REGISTRATION",
"timestamp": "2026-09-13T00:00:00.000Z",
"signatureStatus": "valid"
},
{
"eventType": "PUBLIC_VERIFICATION",
"timestamp": "2026-09-13T00:01:00.000Z",
"signatureStatus": "valid"
}
]
},
"squad": null,
"badgePresentation": {
"badge": {
"style": "Futuristic",
"title": "Future Verified",
"report": "Main character energy: confirmed.",
"rarity": "Epic"
},
"disclaimer": "Badge titles, reports, and rarity are entertainment only. They are not forensic or legal proof."
},
"disclaimer": "Registration records evidence; it does not prove ownership or authorship."
}{
"issuanceStatus": "REVOKED",
"status": "revoked",
"statusExplanation": "This badge is revoked and is no longer valid."
}{
"issuanceStatus": "CORRECTED",
"status": "corrected",
"statusExplanation": "This record was corrected; the displayed evidence is the current public evidence."
}04 / responses
Validation and not-found responses
Malformed identifiers return HTTP 400. Well-formed unknown and not-yet-issued IDs return the same generic HTTP 404, so consumers cannot distinguish those two private states.
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": "Invalid VPX Badge ID.",
"code": "invalid_badge_id"
}HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": "Badge not found."
}05 / scope
Registration is evidence, not ownership
Registration records evidence; it does not prove ownership or authorship.
The API verifies what VeriPix recorded about an image and when it was registered. It does not independently establish who created, owns, or is authorized to use the image.