API reference
Start ticket checkout
Validates organization ticketing access, selected ticket and buyer information, then creates or reuses central checkout with a receipt bound to this domain.
https://api.sparkglim.net/api/white-label/v1/payments/initializeAccess model
- Access model
- Server-side Organization HMAC
- Required scope
payments:write- Documented availability
- Implemented in source
Availability is verified from source, not a live production guarantee.
Private signing stays on your server. API Version 1 uses signature format v2; it is not API v2.
Headers
| Name | Type | Validation |
|---|---|---|
x-white-label-domainRequiredVerified website hostname used to resolve the approved organization account and bind this request. | string | Validation: verified HTTPS hostname. |
x-white-label-key-idRequiredIdentifier extracted from the single issued Private Key value; never send its secret in this header. | string | Validation: issued private key internal identifier. |
x-white-label-signature-versionRequiredSelects the domain-bound signing format; API routes remain Version 1. | string | Validation: 2. |
x-white-label-timestampRequiredRequest signing time in milliseconds, checked against the server clock to reject stale requests. | string | Validation: 13 digit milliseconds; within five minutes. |
x-white-label-nonceRequiredFresh random signing value recorded by the server to reject replay of a signed request. | string | Validation: fresh 16–128 [A-Za-z0-9_-]. |
x-white-label-signatureRequiredHMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. | string | Validation: lowercase hexadecimal HMAC-SHA256. |
x-white-label-campaign-keyOptionalOptional complete Campaign Key that narrows a private request to the same authorized campaign. | string | Validation: complete optional scoped keyId:secret. |
X-Idempotency-KeyRequiredStable business-operation identity reused on retries with unchanged request details; different details under the same key are rejected. | string | Validation: 16–128 [A-Za-z0-9_-]. |
Request
| Name | Type | Validation |
|---|---|---|
campaign_idRequiredExisting campaign record within the caller’s account and any narrower campaign credential. | string | Validation: UUID. |
ticket_idRequiredThe selected ticket type belonging to the specified campaign; server checks status, capacity and price. | string | Validation: UUID. |
quantityRequiredNumber of tickets requested; inventory and per-person purchase limits remain server-enforced. | integer | Validation: 1–100. |
phone_numberRequiredParticipant contact phone; required payment channels and campaign rules may require a valid international number. | string | Validation: nonempty valid phone. |
emailOptionalContact email used by the configured campaign or account workflow; never a credential granting access by itself. | string | Validation: email. |
discount_codeOptionalExisting campaign-specific discount or invitation credential, revalidated by the server before purchasing. | string | Validation: trimmed nonempty. |
invite_codeOptionalExisting campaign-specific discount or invitation credential, revalidated by the server before purchasing. | string | Validation: trimmed nonempty. |
luggage_quantityOptionalQuantity of luggage in an event that actually supports the configured luggage option. | integer | Validation: >=0. |
attendee_informationOptionalAnswers matching the actual campaign-specific fields, required values and supported options. | object | Validation: string values matching configured fields. |
payment_channelOptionalOptional channel preference; only methods enabled for the real selling country, currency and merchant may be used. | enum | Validation: card | mobile_money | apple_pay | bank_transfer | crypto; availability is server-controlled. |
network_codeOptionalConfigured mobile network selection where the chosen payment channel requires it. | string | Validation: configured network. |
is_appOptionalExisting caller context used to select Web or User App configuration; it grants no extra permissions. | boolean | Validation: client context. |
return_pathOptionalRelative return destination on the verified current website after centralized checkout. | string | Validation: same verified domain relative path. |
clientIpOptionalOriginal client IP supplied by an authorized backend; used by existing abuse controls. | string | Validation: valid IP. |
Request
Examples describe the contract and are not executed. Use authorized test records; never paste a real secret into these pages.
POST /api/white-label/v1/payments/initialize HTTP/1.1
Host: api.sparkglim.net
x-white-label-domain: events.example.com
x-white-label-key-id: <ISSUED_KEY_ID>
x-white-label-signature-version: 2
x-white-label-timestamp: <FRESH_MILLISECONDS>
x-white-label-nonce: <FRESH_SIGNING_NONCE>
x-white-label-signature: <SERVER_GENERATED_SIGNATURE>
X-Idempotency-Key: example_stable_operation_0001
Content-Type: application/json
{
"campaign_id": "11111111-1111-4111-8111-111111111111",
"ticket_id": "22222222-2222-4222-8222-222222222222",
"quantity": 1,
"phone_number": "+233200000000",
"return_path": "/payment-return"
}Response
{
"success": true,
"data": {
"authorization_url": "https://checkout.sparkglim.net/gh/<SERVER_REFERENCE>",
"reference": "<SERVER_REFERENCE>"
},
"requestId": "wlapi_example"
}{
"success": false,
"error": "<ERROR_MESSAGE>",
"requestId": "wlapi_example"
}Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload.
Limits & retries
Organization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.
Source compatibility
Authorized operations require account-specific testing.
server/src/api/router.tsserver/src/api/routes/white-label.tsserver/src/white-label/auth.tsserver/src/white-label/schemas.tsserver/src/white-label/organization-service.tsserver/src/white-label/service.ts