Loading Certifyx
Preparing secure workspace
Loading Certifyx
Preparing secure workspace
API
Customer-facing API examples for templates, issuing, verifying, revoking, and webhooks.
https://sandbox.certifyx.club/v1https://api.certifyx.club/v1https://verify.certifyx.clubhttps://docs.certifyx.clubSend API keys as Bearer tokens from your server. Use sk_sandbox_ keys with the sandbox API host and sk_live_ keys with the production API host. Never expose API keys in browser JavaScript, mobile apps, or public repositories.
Authorization: Bearer sk_sandbox_xxx/v1/certificates/issueCreates one certificate, renders the PDF, hashes metadata, and returns the verification URL.POST/v1/certificates/bulkCreates a queued batch for multiple certificate payloads using the same issue schema.GET/v1/certificates/{certificateId}Reads the latest certificate status, PDF signed URL, public metadata, and blockchain transaction records.POST/v1/certificates/{certificateId}/revokeMarks a certificate as revoked and records the revocation reason.GET/v1/verify/{certificateId}Performs server-side verification and writes a verification log for the certificate.GET/v1/templatesLists active organization and Certifyx templates available for issuance.POST/v1/webhooksRegisters an endpoint for certificate lifecycle events and returns the signing secret once./v1/certificates/issueCreates one certificate, renders the PDF, hashes metadata, and returns the verification URL.
No path parameters.
No query parameters.
certificateIdstringtemplateIduuid | nullrecipientNamestringrecipientEmailemailtitlestringissuedAtISO datetimeexpiresAtISO datetime | nullpublicMetadataobjectprivateMetadataobject{
"certificateId": "CX-CLIENT-0001",
"templateId": "8e884cad-6a34-4f15-9d6d-0c2798d4d002",
"recipientName": "Aina Rahman",
"recipientEmail": "[email protected]",
"title": "Safety Training Certificate",
"issuedAt": "2026-05-10T08:00:00.000Z",
"expiresAt": "2027-05-10T08:00:00.000Z",
"publicMetadata": {
"trainer_name": "Certifyx Academy",
"venue": "Kuala Lumpur"
},
"privateMetadata": {
"identification_no": "900101-14-1234",
"device_id": "tablet-042"
}
}{
"data": {
"certificateId": "CX-CLIENT-0001",
"certificateUuid": "6ebeb4b1-8bf6-4df3-a366-cf7a569b0c6e",
"environment": "sandbox",
"status": "issued",
"certificateHash": "b7a5c0...",
"issuedAt": "2026-05-10T08:00:00.000Z",
"verificationUrl": "https://verify.certifyx.club/CX-CLIENT-0001",
"proofMode": "pdf_only",
"pdf": {
"url": "https://...",
"expiresIn": 3600
},
"blockchain": null
}
}VALIDATION_ERROR{
"error": {
"code": "VALIDATION_ERROR",
"message": "Request body is invalid."
}
}QUOTA_EXCEEDED{
"error": {
"code": "QUOTA_EXCEEDED",
"message": "Production certificates require at least one credit. Top up credits from Billing."
}
}INVALID_API_KEY{
"error": {
"code": "INVALID_API_KEY",
"message": "Missing Bearer API key."
}
}RATE_LIMITED{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded."
}
}/v1/certificates/bulkCreates a queued batch for multiple certificate payloads using the same issue schema.
No path parameters.
No query parameters.
batchNamestringcertificatesIssueCertificateInput[]{
"batchName": "May 2026 Safety Training",
"certificates": [
{
"certificateId": "CX-BATCH-0001",
"recipientName": "Aina Rahman",
"recipientEmail": "[email protected]",
"title": "Safety Training Certificate",
"publicMetadata": {
"trainer_name": "Certifyx Academy"
},
"privateMetadata": {
"identification_no": "900101-14-1234"
}
}
]
}{
"data": {
"batch": {
"id": "7c4c0d2d-49d6-48a7-b107-bc6f62bc8170",
"name": "May 2026 Safety Training",
"environment": "sandbox",
"status": "queued",
"total_count": 1,
"created_at": "2026-05-10T08:15:27.578Z"
}
}
}VALIDATION_ERROR{
"error": {
"code": "VALIDATION_ERROR",
"message": "certificates must contain at least 1 item."
}
}INVALID_API_KEY{
"error": {
"code": "INVALID_API_KEY",
"message": "Missing Bearer API key."
}
}RATE_LIMITED{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded."
}
}/v1/certificates/{certificateId}Reads the latest certificate status, PDF signed URL, public metadata, and blockchain transaction records.
certificateIdstringNo query parameters.
No request body.
{
"data": {
"certificateId": "CX-CLIENT-0001",
"certificateUuid": "6ebeb4b1-8bf6-4df3-a366-cf7a569b0c6e",
"environment": "sandbox",
"status": "issued",
"recipientName": "Aina Rahman",
"recipientEmail": "[email protected]",
"title": "Safety Training Certificate",
"issueDate": "2026-05-10",
"expiresAt": "2027-05-10T08:00:00.000Z",
"certificateHash": "b7a5c0...",
"publicMetadata": {
"trainer_name": "Certifyx Academy"
},
"verificationUrl": "https://verify.certifyx.club/CX-CLIENT-0001",
"proofMode": "pdf_only",
"pdf": {
"url": "https://...",
"expiresIn": 3600
},
"blockchainTransactions": []
}
}CERTIFICATE_NOT_FOUND{
"error": {
"code": "CERTIFICATE_NOT_FOUND",
"message": "Certificate was not found."
}
}INVALID_API_KEY{
"error": {
"code": "INVALID_API_KEY",
"message": "Missing Bearer API key."
}
}RATE_LIMITED{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded."
}
}/v1/certificates/{certificateId}/revokeMarks a certificate as revoked and records the revocation reason.
certificateIdstringNo query parameters.
reasonstring{
"reason": "Issued with incorrect recipient details"
}{
"data": {
"certificateId": "CX-CLIENT-0001",
"environment": "sandbox",
"status": "revoked",
"revokedAt": "2026-05-10T09:00:00.000Z",
"reason": "Issued with incorrect recipient details",
"proofMode": "pdf_only",
"blockchain": null
}
}CERTIFICATE_NOT_FOUND{
"error": {
"code": "CERTIFICATE_NOT_FOUND",
"message": "Certificate was not found."
}
}CERTIFICATE_REVOKED{
"error": {
"code": "CERTIFICATE_REVOKED",
"message": "Certificate is already revoked."
}
}INVALID_API_KEY{
"error": {
"code": "INVALID_API_KEY",
"message": "Missing Bearer API key."
}
}RATE_LIMITED{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded."
}
}/v1/verify/{certificateId}Performs server-side verification and writes a verification log for the certificate.
certificateIdstringNo query parameters.
No request body.
{
"data": {
"certificateId": "CX-CLIENT-0001",
"certificateUuid": "6ebeb4b1-8bf6-4df3-a366-cf7a569b0c6e",
"environment": "sandbox",
"status": "verified",
"certificateStatus": "issued",
"recipientName": "Aina Rahman",
"title": "Safety Training Certificate",
"issueDate": "2026-05-10",
"expiresAt": "2027-05-10T08:00:00.000Z",
"certificateHash": "b7a5c0...",
"verificationUrl": "https://verify.certifyx.club/CX-CLIENT-0001",
"proofMode": "pdf_only",
"blockchain": null
}
}{
"data": {
"certificateId": "CX-MISSING",
"environment": "sandbox",
"status": "not_found",
"message": "Certificate was not found.",
"blockchain": null
}
}INVALID_API_KEY{
"error": {
"code": "INVALID_API_KEY",
"message": "Missing Bearer API key."
}
}RATE_LIMITED{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded."
}
}/v1/templatesLists active organization and Certifyx templates available for issuance.
No path parameters.
No query parameters.
No request body.
{
"data": {
"environment": "sandbox",
"templates": [
{
"id": "8e884cad-6a34-4f15-9d6d-0c2798d4d002",
"name": "Classic Academic",
"description": "Formal certificate with a strong border.",
"is_premium": false,
"is_active": true,
"metadata_schema": {
"fields": [
{
"key": "identification_no",
"label": "Identification No.",
"type": "text",
"visibility": "private"
}
]
},
"updated_at": "2026-05-10T08:15:27.578Z"
}
]
}
}INTERNAL_ERROR{
"error": {
"code": "INTERNAL_ERROR",
"message": "Unable to load templates."
}
}INVALID_API_KEY{
"error": {
"code": "INVALID_API_KEY",
"message": "Missing Bearer API key."
}
}RATE_LIMITED{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded."
}
}/v1/webhooksRegisters an endpoint for certificate lifecycle events and returns the signing secret once.
No path parameters.
No query parameters.
urlurldescriptionstringeventsstring[]{
"url": "https://client.example.com/certifyx/webhook",
"description": "Production certificate events",
"events": ["certificate.issued", "certificate.revoked"]
}{
"data": {
"environment": "sandbox",
"webhook": {
"id": "ff99b705-1db0-4b5d-894e-91347ce53648",
"url": "https://client.example.com/certifyx/webhook",
"events": ["certificate.issued", "certificate.revoked"],
"active": true,
"created_at": "2026-05-10T08:15:27.578Z"
},
"signingSecret": "whsec_..."
}
}VALIDATION_ERROR{
"error": {
"code": "VALIDATION_ERROR",
"message": "url must be a valid URL."
}
}INVALID_API_KEY{
"error": {
"code": "INVALID_API_KEY",
"message": "Missing Bearer API key."
}
}RATE_LIMITED{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded."
}
}