Certiverse Voucher Partner API
Overview
The Certiverse Voucher Partner API provides read access to voucher partners, programs, purchases, and individual vouchers. All endpoints require a Bearer token associated with a user holding the PartnerManageVouchers function point.
All list endpoints support paginated responses. A nextLink property is included in the response when additional pages are available; when absent, the current page is the last.
GET /api/vouchers/partners
Returns a paginated list of voucher partners. All query parameters are optional; omitting all filters returns all accessible partners.
Request Headers| Header | Value | Required |
|---|---|---|
Authorization |
Bearer <token> |
Required |
| Parameter | Type | Required | Description |
|---|---|---|---|
page |
integer | Optional | Page number. Defaults to 1. |
partnerName |
string | Optional | Filter by partner name. Partial matches may be supported. |
status |
string | Optional |
Filter by partner status. ActiveArchivedInactive |
| Property | Type | Nullable | Description |
|---|---|---|---|
data |
PartnerVoucherPartnerModel[] | No | List of matching voucher partners. |
nextLink |
string | Nullable | URL to the next page. Absent when no further pages exist. |
| Property | Type | Nullable | Description |
|---|---|---|---|
id |
string | No | Unique identifier. |
isActive |
boolean | No | Whether the partner is currently active. |
isArchived |
boolean | No | Whether the partner has been archived. |
name |
string | No | Display name. |
users |
PartnerVoucherPartnerUserModel[] | No | Users associated with this partner. |
| Property | Type | Nullable | Description |
|---|---|---|---|
email |
string | No | Email address of the partner user. |
isActive |
boolean | No | Whether the user account is active. |
status |
string | No | Current status (e.g., Active, Inactive). |
| Code | Description |
|---|---|
| 200 | Success. |
| 400 | Bad Request — invalid status value. |
| 401 | Unauthorized. |
| 422 | Unprocessable Entity - Exceeded the 10,000 record limit |
| 500 | Internal Server Error. |
Voucher Programs
GET /api/vouchers/programs
Returns a paginated list of voucher programs. Each program includes its store exams, partner assignments, discount tiers, and restriction settings.
Request Headers| Header | Value | Required |
|---|---|---|
Authorization |
Bearer <token> |
Required |
| Parameter | Type | Required | Description |
|---|---|---|---|
page |
integer | Optional | Page number. Defaults to 1. |
programName |
string | Optional | Filter by program name. Partial matches may be supported. |
| Property | Type | Nullable | Description |
|---|---|---|---|
data |
PartnerVoucherProgramModel[] | No | List of matching voucher programs. |
nextLink |
string | Nullable | URL to the next page. |
| Property | Type | Nullable | Description |
|---|---|---|---|
allowAchPayments |
boolean | No | Whether ACH (bank transfer) payments are accepted. |
discounts |
PartnerVoucherProgramDiscountModel[] | No | Bulk discount tiers. |
expirationPeriodInDays |
integer | No | Days after issuance before a voucher expires. |
id |
string | No | Unique identifier. |
isActive |
boolean | No | |
isArchived |
boolean | No | |
isInactive |
boolean | No | |
name |
string | No | Display name. |
partners |
PartnerVoucherProgramPartnerModel | No | Partner assignment and pricing configuration. |
restrictions |
PartnerVoucherProgramRestrictionsModel | No | Booking restrictions applied to vouchers. |
storeExams |
PartnerVoucherProgramStoreExamModel[] | No | Exams available under this program. |
voucherCodePrefix |
string | No | Prefix applied to generated voucher codes. |
| Property | Type | Description |
|---|---|---|
id |
string | Unique identifier for the discount tier. |
percent |
decimal | Discount percentage when the threshold is met. |
quantity |
integer | Minimum quantity to qualify for this discount. |
| Property | Type | Description |
|---|---|---|
assignedPartners |
PartnerVoucherProgramAssignedPartnerModel[] | Partners explicitly assigned to this program. |
canAssignedPartnersPurchaseZeroPrice |
boolean | Whether assigned partners can purchase vouchers at zero cost. |
isAvailableToAllVoucherPartners |
boolean | If true, open to all partners. If false, only assigned partners may participate. |
partnerCostPerVoucher |
decimal | Cost per voucher charged to the partner. |
| Property | Type | Description |
|---|---|---|
emailDomainRestrictions |
PartnerVoucherProgramEmailDomainRestrictionModel[] | Domain-level restrictions on who may redeem vouchers. |
enforceAssignedEmailToBookExam |
boolean | If true, the voucher's assigned recipient email must match the booking account. |
| Property | Type | Description |
|---|---|---|
code |
string | Short exam code. |
id |
string | Unique identifier. |
name |
string | Exam display name. |
price |
decimal | Retail price of the exam. |
| Code | Description |
|---|---|
| 200 | Success. |
| 401 | Unauthorized. |
| 422 | Unprocessable Entity - Exceeded the 10,000 record limit |
| 500 | Internal Server Error. |
GET /api/vouchers/purchases
Returns a paginated list of voucher purchase records, including quantity, pricing, and status. At least one filter parameter (other than page) must be provided.
At least one of the following is required: purchaseCode, partnerName, programName, purchasedByEmail, or status. Providing only page returns a 400 Bad Request. |
| Header | Value | Required |
|---|---|---|
Authorization |
Bearer <token> |
Required |
| Parameter | Type | Required | Description |
|---|---|---|---|
page |
integer | Optional | Page number. Defaults to 1. |
partnerName |
string | Conditional | Filter by the name of the partner who made the purchase. |
programName |
string | Conditional | Filter by voucher program name. |
purchaseCode |
string | Conditional | Filter by voucher purchase code. |
purchasedByEmail |
string | Conditional | Filter by buyer email. Must be a valid email format. |
status |
string | Conditional |
Filter by purchase status. CheckoutCancelled CheckoutExpired CheckoutFailed CheckoutInProgress CompleteVoucherCreation |
| Property | Type | Nullable | Description |
|---|---|---|---|
amountPaid |
decimal | No | Total amount paid. |
id |
string | No | Unique identifier for the purchase record. |
isArchived |
boolean | No | Whether this purchase record has been archived. |
notes |
string | No | Notes recorded against this purchase. |
partnerName |
string | No | Name of the partner who made the purchase. |
programName |
string | No | Name of the voucher program purchased. |
purchaseDateUtc |
string (ISO 8601) | No | Date/time the purchase was initiated, UTC. |
purchasedByFirstName |
string | No | First name of the purchasing user. |
purchasedByLastName |
string | No | Last name of the purchasing user. |
quantity |
integer | No | Total vouchers purchased. |
quantityRemaining |
integer | No | Vouchers remaining unused. |
quantityUsed |
integer | No | Vouchers redeemed. |
status |
string | No | Current purchase status. |
voucherPurchaseCode |
string | No | Human-readable code identifying this purchase. |
| Code | Description |
|---|---|
| 200 | Success. |
| 400 | Bad Request — no filter parameters provided; invalid status; invalid email format. |
| 401 | Unauthorized. |
| 422 | Unprocessable Entity - Exceeded the 10,000 record limit |
| 500 | Internal Server Error. |
POST /api/vouchers/purchases
Creates a new voucher purchase for the authenticated partner. Upon success, the system queues voucher generation and returns the created purchase record.
| This endpoint only supports voucher programs priced at $0. Attempting to purchase a program with a non-zero price will result in a 400 Bad Request. |
| Header | Value | Required |
|---|---|---|
Authorization |
Bearer <token> |
Required |
Content-Type |
application/json |
Required |
| Property | Type | Required | Validation | Description |
|---|---|---|---|---|
notes |
string | Required | Non-empty | Notes to associate with this purchase record. |
partnerName |
string | Required | Non-empty | Name of the partner making the purchase. Must match an active partner within your organization. |
programName |
string | Required | Non-empty | Name of the voucher program to purchase from. Must match an active program. |
quantity |
integer | Required | 1–1000 | Number of vouchers to purchase. |
{ "notes": "Q2 employee certification batch", "partnerName": "Acme Corp", "programName": "Spring Certification Drive", "quantity": 50 } Response — 200 OK
Returns a single PartnerVoucherPurchaseModel representing the newly created purchase. The schema is identical to a single item in the GET /vouchers/purchases data[] array, listed above.
| Note on purchasedByFirstName / purchasedByLastName: Purchases made via this API are attributed to the system user "Certiverse API" rather than an individual person. These fields will reflect that system name. |
HTTP Status Codes
| Code | Description |
|---|---|
| 200 | Success. Returns the created PartnerVoucherPurchaseModel. |
| 400 | Bad Request — validation failure, partner or program not found, or program price is not $0. |
| 401 | Unauthorized. |
| 500 | Internal Server Error. |
GET /api/vouchers
Returns a paginated list of individual vouchers with assignment, usage, and reservation details. At least one filter parameter (other than page) must be provided.
At least one of the following is required: purchaseCode, voucherCode, recipientEmail, isUsed, isActive, reservationCode, or storeExamCode. Providing only page returns a 400 Bad Request. |
| Header | Value | Required |
|---|---|---|
Authorization |
Bearer <token> |
Required |
| Parameter | Type | Required | Description |
|---|---|---|---|
isActive |
boolean | Conditional | Filter by active status. |
isUsed |
boolean | Conditional | true for used vouchers, false for unused. |
page |
integer | Optional | Page number. Defaults to 1. |
purchaseCode |
string | Conditional | Filter by associated purchase code. |
recipientEmail |
string | Conditional | Filter by assigned recipient email. Must be valid email format. |
reservationCode |
string | Conditional | Filter vouchers associated with a specific reservation code. |
storeExamCode |
string | Conditional | Filter vouchers linked to a specific store exam code. |
voucherCode |
string | Conditional | Filter by individual voucher code. |
| Property | Type | Nullable | Description |
|---|---|---|---|
assignedDateUtc |
string (ISO 8601) | Nullable | Date/time assigned to recipient, UTC. Omitted if not assigned. |
expirationDateUtc |
string (ISO 8601) | No | Expiration date/time, UTC. |
id |
string | No | Unique identifier for the voucher. |
isActive |
boolean | No | Whether the voucher is eligible for use. |
isUsed |
boolean | No | Whether the voucher has been redeemed. |
recipientEmail |
string | Nullable | Assigned recipient email. Omitted if not assigned. |
reservationCode |
string | Nullable | Linked reservation code. Omitted if none. |
reservationStatus |
string | Nullable | Status of the associated reservation. Omitted if none. |
storeExamCode |
string | Nullable | Linked store exam code. Omitted if not linked. |
usedBy |
PartnerVoucherUsedByModel | Nullable | Redemption details. Omitted if not used. |
voucherCode |
string | No | Unique redemption code. |
voucherPurchaseCode |
string | No | Code identifying the purchase batch. |
| Property | Type | Description |
|---|---|---|
clientCandidateId |
string | Client-defined candidate identifier. |
firstName |
string | First name of the redeeming person. |
lastName |
string | Last name of the redeeming person. |
personId |
string | Identifier of the person who redeemed the voucher. |
usedDateUtc |
string (ISO 8601) | Date/time the voucher was redeemed, UTC. |
| Code | Description |
|---|---|
| 200 | Success. |
| 400 | Bad Request — no filter provided; invalid email; invalid boolean for isUsed/isActive. |
| 401 | Unauthorized. |
| 422 | Unprocessable Entity - Exceeded the 10,000 record limit |
| 500 | Internal Server Error. |
Contact Us
If you have any questions or need additional assistance, please contact us by either emailing support@certiverse.com or by submitting a ticket from this article.