API product

White Label Reseller API

Separate reseller operations using the implemented member-based workflow.

Audited route registry

The endpoint list below is generated from the existing typed documentation registry and validated against implemented server sources.

Product-specific contract

Authentication, route prefix, request fields, response shape, and permissions remain separate from the other API products.

Endpoint reference

Base URL: https://api.sparkglim.net

Existing authenticated SparkGlim session via requireAuth. This is not HMAC white-label v1 authentication.

GET/api/white-label/portal/reseller

Load reseller console

Loads reseller console data for the signed-in user.

Authentication: Authenticated SparkGlim session

Request fields
FieldLocation / typeRequirement
Authorization

Existing authenticated SparkGlim user session. The server reads req.auth.userId.

header
Bearer session token
Required

Success · HTTP 200

{
  "success": true,
  "data": { "profile": {}, "members": [], "invitations": [] }
}

Error response shape

{
  "success": false,
  "error": "Invalid reseller member payload"
}
PATCH/api/white-label/portal/reseller/profile

Update reseller profile

Updates reseller profile settings such as status, risk level, approval requirements, public signup, and settings.

Authentication: Authenticated SparkGlim session

Request fields
FieldLocation / typeRequirement
Authorization

Existing authenticated SparkGlim user session. The server reads req.auth.userId.

header
Bearer session token
Required
status

Reseller profile status.

body
draft | enabled | suspended | disabled
Optional
requireSubCreatorApproval

Whether sub-creator approval is required.

body
boolean
Optional
allowPublicSignup

Whether public signup is enabled.

body
boolean
Optional

Success · HTTP 200

{
  "success": true,
  "data": { "status": "enabled" }
}

Error response shape

{
  "success": false,
  "error": "Invalid reseller member payload"
}
POST/api/white-label/portal/reseller/members

Create reseller relationship record

Adds the member through the SparkGlim creator team flow, then stores the white-label reseller relationship link.

Authentication: Authenticated SparkGlim session

Request fields
FieldLocation / typeRequirement
Authorization

Existing authenticated SparkGlim user session. The server reads req.auth.userId.

header
Bearer session token
Required
userId

Optional linked existing user ID.

body
uuid | null
Optional
creatorId

Creator account whose SparkGlim team should receive this member. Defaults to the reseller owner creator where available.

body
uuid | null
Optional
memberType

Member type.

body
owner | operator | finance | support | sub_creator
Optional
displayName

Display name.

body
string
Optional
roles

Reseller roles.

body
role[]
Optional
permissions

Capability list.

body
capability[]
Optional

Success · HTTP 201

{
  "success": true,
  "data": { "id": "member_id", "status": "pending" }
}

Error response shape

{
  "success": false,
  "error": "Invalid reseller member payload"
}

The server writes the member to public.organizer_teams so organizer OTP/login and team permissions use the same SparkGlim creator team model.

The white_label.reseller_members row is retained as the reseller relationship and oversight link.

PATCH/api/white-label/portal/reseller/members/:memberId

Update reseller relationship record

Partially updates the white-label reseller relationship and syncs the linked SparkGlim creator team member where applicable.

Authentication: Authenticated SparkGlim session

Request fields
FieldLocation / typeRequirement
Authorization

Existing authenticated SparkGlim user session. The server reads req.auth.userId.

header
Bearer session token
Required
memberId

Member ID.

path
uuid
Required

Success · HTTP 200

{
  "success": true,
  "data": { "id": "member_id" }
}

Error response shape

{
  "success": false,
  "error": "Invalid reseller member payload"
}
POST/api/white-label/portal/reseller/approval-requests

Create approval request

Creates a reseller approval request for implemented entities such as member, campaign, withdrawal, payout, payment_method, ussd, provider, or setting.

Authentication: Authenticated SparkGlim session

Request fields
FieldLocation / typeRequirement
Authorization

Existing authenticated SparkGlim user session. The server reads req.auth.userId.

header
Bearer session token
Required
entityType

Entity type.

body
member | campaign | withdrawal | payout | payment_method | ussd | provider | setting
Required
reason

Reason for review.

body
string | null
Optional
requestPayload

Request payload.

body
object
Optional

Success · HTTP 201

{
  "success": true,
  "data": { "id": "request_id", "status": "pending" }
}

Error response shape

{
  "success": false,
  "error": "Invalid reseller member payload"
}
POST/api/white-label/portal/reseller/otp/send

Send reseller OTP

Creates a reseller OTP challenge for login, signup, withdrawal approval, payment method verification, or campaign approval.

Authentication: Authenticated SparkGlim session

Request fields
FieldLocation / typeRequirement
Authorization

Existing authenticated SparkGlim user session. The server reads req.auth.userId.

header
Bearer session token
Required
channel

Delivery channel.

body
sms | email | whatsapp
Required
recipient

Recipient address or number.

body
string
Required
purpose

OTP purpose.

body
login | signup | withdrawal_approval | payment_method_verification | campaign_approval
Required

Success · HTTP 201

{
  "success": true,
  "data": { "challengeId": "challenge_id" }
}

Error response shape

{
  "success": false,
  "error": "Invalid reseller member payload"
}