Skip to documentation
SparkGlimSparkGlim Developer
Search all documentation

Try a topic in your language or an exact API path.

    API reference

    Vendor, volunteer or partner application

    Stores an idempotent vendor, volunteer or partner application after module, campaign and required contact checks; submission does not approve it.

    POSThttps://api.sparkglim.net/api/white-label/v1/submissions

    Access model

    Access model
    Server-side Organization HMAC
    Required scope
    submissions: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

    NameTypeValidation
    x-white-label-domainRequired

    Verified website hostname used to resolve the approved organization account and bind this request.

    stringValidation: verified HTTPS hostname.
    x-white-label-key-idRequired

    Identifier extracted from the single issued Private Key value; never send its secret in this header.

    stringValidation: issued private key internal identifier.
    x-white-label-signature-versionRequired

    Selects the domain-bound signing format; API routes remain Version 1.

    stringValidation: 2.
    x-white-label-timestampRequired

    Request signing time in milliseconds, checked against the server clock to reject stale requests.

    stringValidation: 13 digit milliseconds; within five minutes.
    x-white-label-nonceRequired

    Fresh random signing value recorded by the server to reject replay of a signed request.

    stringValidation: fresh 16–128 [A-Za-z0-9_-].
    x-white-label-signatureRequired

    HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash.

    stringValidation: lowercase hexadecimal HMAC-SHA256.
    x-white-label-campaign-keyOptional

    Optional complete Campaign Key that narrows a private request to the same authorized campaign.

    stringValidation: complete optional scoped keyId:secret.
    X-Idempotency-KeyRequired

    Stable business-operation identity reused on retries with unchanged request details; different details under the same key are rejected.

    stringValidation: 16–128 [A-Za-z0-9_-].

    Request

    NameTypeValidation
    typeRequired

    Supported resource kind, reaction kind or discovery campaign filter specified by this endpoint.

    enumValidation: volunteer | vendor | partner.
    campaignIdRequired

    Existing campaign record within the caller’s account and any narrower campaign credential.

    stringValidation: UUID.
    detailsRequired

    Strict applicant-information object; only the documented fields are accepted.

    objectValidation: strict allowed fields.
    details.fullNameRequired

    Applicant identity or requested operating space recorded with the vendor, volunteer or partner application.

    stringValidation: 2–120.
    details.emailRequired

    Contact email used by the configured campaign or account workflow; never a credential granting access by itself.

    stringValidation: email <=254.
    details.phoneRequired

    Member or applicant contact phone used by the existing account workflow.

    stringValidation: valid phone <=40.
    details.descriptionRequired

    Organizer-provided description explaining this campaign or ticket type.

    stringValidation: 10–3000.
    details.businessNameOptional

    Applicant identity or requested operating space recorded with the vendor, volunteer or partner application.

    stringValidation: <=160; required for vendor/partner.
    details.categoryOptional

    Configured campaign category or approved settings category, depending on the resource.

    stringValidation: <=120; required for volunteer.
    details.standOptional

    Applicant identity or requested operating space recorded with the vendor, volunteer or partner application.

    stringValidation: <=80.
    clientIpOptional

    Original client IP supplied by an authorized backend; used by existing abuse controls.

    stringValidation: 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/submissions
    http
    POST /api/white-label/v1/submissions 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
    
    {
      "type": "volunteer",
      "campaignId": "11111111-1111-4111-8111-111111111111",
      "details": {
        "fullName": "Example applicant",
        "email": "applicant@example.com",
        "phone": "+233200000000",
        "description": "Example application description.",
        "category": "Example configured category"
      }
    }

    Response

    Success response · HTTP 201
    json
    {
      "success": true,
      "data": {
        "id": "11111111-1111-4111-8111-111111111111",
        "status": "pending",
        "created_at": "2030-01-01T00:00:00.000Z"
      },
      "requestId": "wlapi_example"
    }
    Error response · HTTP 400
    json
    {
      "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.ts
    • server/src/api/routes/white-label.ts
    • server/src/white-label/auth.ts
    • server/src/white-label/schemas.ts
    • server/src/white-label/organization-service.ts
    • server/src/white-label/service.ts