API reference
Start public vote
Validates a public voting campaign, eligible nominee, supported vote quantity and browser protection before starting centralized checkout.
https://api.sparkglim.net/api/public/voteAccess model
- Access model
- Public access with validation
- Documented availability
- Implemented in source
Availability is verified from source, not a live production guarantee.
Open the returned checkout URL. SparkGlim Server owns prices, methods, payment verification and fulfillment; browser returns are navigation only.
Request
| Name | Type | Validation |
|---|---|---|
campaign_idRequiredExisting campaign record within the caller’s account and any narrower campaign credential. | string | Validation: UUID. |
participant_idRequiredThe nominee selected within this campaign; approval and campaign rules are checked by the server. | string | Validation: UUID. |
vote_countRequiredNumber of votes requested for the selected nominee; SparkGlim Server determines the valid price and records completed votes. | integer | Validation: 1–100. |
phone_numberRequiredParticipant contact phone; required payment channels and campaign rules may require a valid international number. | string | Validation: nonempty. |
emailOptionalContact email used by the configured campaign or account workflow; never a credential granting access by itself. | string | Validation: email. |
payment_channelOptionalOptional channel preference; only methods enabled for the real selling country, currency and merchant may be used. | enum | Validation: configured method only. |
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. |
web_abuse_contextRequiredExisting browser/device protection payload required before public checkout initialization; not a replacement for server authorization. | object | Validation: strict object; device_details JSON <=12000 characters. |
web_abuse_context.device_idRequiredExisting browser/device protection signal accepted by the current public checkout protection schema. | string | Validation: 12–160. |
web_abuse_context.device_fingerprintRequiredExisting browser/device protection signal accepted by the current public checkout protection schema. | string | Validation: 12–160. |
web_abuse_context.browser_signatureOptionalExisting browser/device protection signal accepted by the current public checkout protection schema. | string|null | Validation: 12–160. |
web_abuse_context.hardware_signatureOptionalExisting browser/device protection signal accepted by the current public checkout protection schema. | string|null | Validation: 12–160. |
web_abuse_context.device_detailsOptionalExisting browser/device protection signal accepted by the current public checkout protection schema. | object | Validation: JSON object. |
web_abuse_context.client_pattern_detectedOptionalExisting browser/device protection signal accepted by the current public checkout protection schema. | boolean | Validation: existing device protection. |
client_attempt_idOptionalStable client operation identifier used to reuse an existing attempt and reject mismatched retries. | string | Validation: stable normalized operation identity. |
return_pathOptionalRelative return destination on the verified current website after centralized checkout. | string | Validation: same-origin relative path; no // or backslash. |
Request
Examples describe the contract and are not executed. Use authorized test records; never paste a real secret into these pages.
POST /api/public/vote HTTP/1.1
Host: api.sparkglim.net
Content-Type: application/json
{
"campaign_id": "11111111-1111-4111-8111-111111111111",
"participant_id": "33333333-3333-4333-8333-333333333333",
"vote_count": 1,
"phone_number": "+233200000000",
"web_abuse_context": {
"device_id": "<EXISTING_DEVICE_ID>",
"device_fingerprint": "<EXISTING_DEVICE_FINGERPRINT>"
},
"client_attempt_id": "example_stable_attempt_0001"
}Response
{
"success": true,
"data": {
"id": "11111111-1111-4111-8111-111111111111",
"status": "pending"
}
}{
"success": false,
"error": "<ERROR_MESSAGE>"
}Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload.
Limits & retries
Default Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.
Source compatibility
Authorized operations require account-specific testing.
server/src/api/router.tsserver/src/api/routes/public.ts