{"openapi":"3.1.0","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"SparkGlim Developer APIs","version":"1","description":"Source-audited Public, Organization API Version 1 and Reseller contracts. Documentation text is English; x-language-metadata provides five-language titles and descriptions. Examples are inert and illustrative. Source implementation does not prove production activation. Organization signature format v2 does not introduce API Version 2.","contact":{"name":"SparkGlim","url":"https://sparkglim.net/contact","email":"support@sparkglim.net"}},"servers":[{"url":"https://api.sparkglim.net"}],"tags":[{"name":"public","description":"Eligible public resources and existing protected participation entry points."},{"name":"organization","description":"Approved domain-bound Organization API Version 1."},{"name":"reseller","description":"Separate authenticated member/session workflow."}],"paths":{"/api/white-label/v1/context":{"get":{"operationId":"organization-get-context","tags":["organization"],"summary":"Account context","description":"Loads approved organization account, branding, verified domains and configured operational context for a private settings reader.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"account":{"status":"enabled"},"branding":{},"domains":[],"settings":{},"providerSummary":[]},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["settings:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-get-context","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Account context","description":"Loads approved organization account, branding, verified domains and configured operational context for a private settings reader."},"fr":{"title":"Contexte du compte","description":"Charge compte Organisation approuvé, identité, domaines vérifiés et contexte configuré pour un lecteur privé des paramètres."},"es":{"title":"Contexto de cuenta","description":"Carga cuenta aprobada, marca, dominios verificados y contexto configurado para lectura privada."},"pt":{"title":"Contexto da conta","description":"Carrega conta aprovada, marca, domínios verificados e contexto configurado para leitura privada."},"ar":{"title":"سياق الحساب","description":"يحمّل حساب المنظمة المعتمد والعلامة والنطاقات الموثقة والسياق المهيأ لقارئ إعدادات خاص."}}}},"/api/white-label/v1/config":{"get":{"operationId":"organization-get-config","tags":["organization"],"summary":"Domain and modules","description":"Returns the authenticated domain, optional campaign scope and enabled organization modules without private provider credentials.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationPublicKey":[]},{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key","in":"header","required":true,"description":"Complete issued Public or Campaign Key for the endpoint’s permitted safe-read scope. Validation: issued Public or Campaign keyId:secret.","schema":{"type":"string","description":"Complete issued Public or Campaign Key for the endpoint’s permitted safe-read scope. Validation: issued Public or Campaign keyId:secret."}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"domain":"events.example.com","campaignId":null,"modules":["ticketing"]},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["settings:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-get-config","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Domain and modules","description":"Returns the authenticated domain, optional campaign scope and enabled organization modules without private provider credentials."},"fr":{"title":"Domaine et modules","description":"Retourne domaine authentifié, périmètre éventuel de campagne et modules activés, sans secrets des prestataires."},"es":{"title":"Dominio y módulos","description":"Devuelve dominio autenticado, alcance de campaña y módulos activos sin secretos de proveedores."},"pt":{"title":"Domínio e módulos","description":"Devolve domínio autenticado, âmbito de campanha e módulos ativos sem segredos de prestadores."},"ar":{"title":"النطاق والوحدات","description":"يعيد النطاق المعتمد ونطاق الحملة الاختياري ووحدات المنظمة المفعلة دون أسرار المزودين."}}}},"/api/white-label/v1/storefront":{"get":{"operationId":"organization-get-storefront","tags":["organization"],"summary":"Campaign storefront","description":"Combines permitted approved campaigns and ticket types for one account/domain; campaign credentials keep their narrower scope.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationPublicKey":[]},{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key","in":"header","required":true,"description":"Complete issued Public or Campaign Key for the endpoint’s permitted safe-read scope. Validation: issued Public or Campaign keyId:secret.","schema":{"type":"string","description":"Complete issued Public or Campaign Key for the endpoint’s permitted safe-read scope. Validation: issued Public or Campaign keyId:secret."}},{"name":"campaignId","in":"query","required":false,"description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID within campaign credential.","schema":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID within campaign credential.","format":"uuid"}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"campaigns":[],"ticketTypes":[]},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["campaigns:read","tickets:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-get-storefront","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Campaign storefront","description":"Combines permitted approved campaigns and ticket types for one account/domain; campaign credentials keep their narrower scope."},"fr":{"title":"Vitrine de campagnes","description":"Combine campagnes approuvées et types de billets autorisés pour le compte et domaine ; les clés gardent leur périmètre."},"es":{"title":"Escaparate de campañas","description":"Combina campañas aprobadas y tipos de entradas permitidos para cuenta y dominio; las claves conservan su alcance."},"pt":{"title":"Montra de campanhas","description":"Combina campanhas aprovadas e tipos de bilhetes permitidos para conta e domínio; as chaves mantêm o âmbito."},"ar":{"title":"واجهة الحملات","description":"يجمع الحملات المعتمدة وأنواع التذاكر المسموحة للحساب والنطاق مع حفظ النطاق الأضيق لمفتاح الحملة."}}}},"/api/white-label/v1/campaigns":{"get":{"operationId":"organization-get-campaigns","tags":["organization"],"summary":"Approved campaigns","description":"Lists approved campaigns owned by this organization, optionally narrowed by campaignId. Private campaigns require an explicit matching campaign credential.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationPublicKey":[]},{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key","in":"header","required":true,"description":"Complete issued Public or Campaign Key for the endpoint’s permitted safe-read scope. Validation: issued Public or Campaign keyId:secret.","schema":{"type":"string","description":"Complete issued Public or Campaign Key for the endpoint’s permitted safe-read scope. Validation: issued Public or Campaign keyId:secret."}},{"name":"campaignId","in":"query","required":false,"description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID within key scope.","schema":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID within key scope.","format":"uuid"}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":[],"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["campaigns:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-get-campaigns","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Approved campaigns","description":"Lists approved campaigns owned by this organization, optionally narrowed by campaignId. Private campaigns require an explicit matching campaign credential."},"fr":{"title":"Campagnes approuvées","description":"Liste les campagnes approuvées de l’organisation, limitées éventuellement par campaignId. Les privées exigent une clé de campagne explicite correspondante."},"es":{"title":"Campañas aprobadas","description":"Lista campañas aprobadas de la organización, limitadas por campaignId. Las privadas requieren credencial explícita coincidente."},"pt":{"title":"Campanhas aprovadas","description":"Lista campanhas aprovadas da organização, limitadas por campaignId. As privadas exigem credencial explícita correspondente."},"ar":{"title":"الحملات المعتمدة","description":"يسرد الحملات المعتمدة المملوكة للمنظمة مع تضييق اختياري بمعرّف الحملة؛ وتتطلب الخاصة اعتماد حملة مطابقًا صريحًا."}}},"post":{"operationId":"organization-post-campaigns","tags":["organization"],"summary":"Create campaign","description":"Creates a campaign under the approved organization using validated details and creator ownership; draft creation is not publication.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Public-facing campaign title supplied by the authorized organizer. Validation: 3–255.","minLength":3,"maxLength":255},"description":{"type":"string","description":"Organizer-provided description explaining this campaign or ticket type. Validation: 10–5000.","minLength":10,"maxLength":5000},"campaign_type":{"type":"string","description":"Selects ticketing, awards voting or donation campaign services; does not grant access to an unrelated module. Validation: ticketing | voting | donation.","enum":["ticketing","voting","donation"]},"start_date":{"type":"string","description":"Campaign opening timestamp in ISO datetime format. Validation: ISO datetime.","format":"date-time"},"end_date":{"type":"string","description":"Campaign closing timestamp in ISO datetime format. Validation: ISO datetime.","format":"date-time"},"country_code":{"type":"string","description":"Configured selling country code; the server checks account and market eligibility. Validation: ISO2.","pattern":"^[A-Za-z]{2}$"},"currency_code":{"type":"string","description":"Existing permitted campaign currency; choosing a country never authorizes a new currency. Validation: ISO3.","pattern":"^[A-Za-z]{3}$"},"slug":{"type":"string","description":"URL-friendly identifier for the existing campaign or published article. Validation: configured slug schema."},"status":{"type":"string","description":"Requested supported lifecycle state; account and campaign approval rules still control publication and access. Validation: draft | pending_approval | approved | rejected | archived.","enum":["draft","pending_approval","approved","rejected","archived"]},"vote_price":{"type":"number","description":"Campaign configuration value for the selected product, stored in the campaign’s own currency or capacity unit. Validation: >=0.","minimum":0},"donation_goal":{"type":"number","description":"Campaign configuration value for the selected product, stored in the campaign’s own currency or capacity unit. Validation: >=0.","minimum":0},"ticket_price":{"type":"number","description":"Campaign configuration value for the selected product, stored in the campaign’s own currency or capacity unit. Validation: >=0.","minimum":0},"ticket_capacity":{"type":"integer","description":"Campaign configuration value for the selected product, stored in the campaign’s own currency or capacity unit. Validation: >0.","exclusiveMinimum":0},"image_url":{"anyOf":[{"type":"string","description":"URL of the resource’s supplied image; use authorized public media. Validation: URL.","format":"uri"},{"type":"null","description":"URL of the resource’s supplied image; use authorized public media. Validation: URL."}],"description":"URL of the resource’s supplied image; use authorized public media. Validation: URL."},"banner_url":{"anyOf":[{"type":"string","description":"Campaign cover artwork URL supplied by the organizer. Validation: URL.","format":"uri"},{"type":"null","description":"Campaign cover artwork URL supplied by the organizer. Validation: URL."}],"description":"Campaign cover artwork URL supplied by the organizer. Validation: URL."},"category":{"anyOf":[{"type":"string","description":"Configured campaign category or approved settings category, depending on the resource. Validation: <=120.","maxLength":120},{"type":"null","description":"Configured campaign category or approved settings category, depending on the resource. Validation: <=120."}],"description":"Configured campaign category or approved settings category, depending on the resource. Validation: <=120."},"location":{"anyOf":[{"type":"string","description":"Public campaign location or discovery location filter; separate from the financial selling country. Validation: <=255.","maxLength":255},{"type":"null","description":"Public campaign location or discovery location filter; separate from the financial selling country. Validation: <=255."}],"description":"Public campaign location or discovery location filter; separate from the financial selling country. Validation: <=255."},"event_date":{"anyOf":[{"type":"string","description":"Scheduled event date/time, distinct from the campaign selling period. Validation: ISO datetime.","format":"date-time"},{"type":"null","description":"Scheduled event date/time, distinct from the campaign selling period. Validation: ISO datetime."}],"description":"Scheduled event date/time, distinct from the campaign selling period. Validation: ISO datetime."},"verification_required":{"type":"boolean","description":"Controls the supported verification requirement for the resource; it does not bypass server eligibility checks. Validation: default true."},"metadata":{"type":"object","description":"Additional JSON metadata accepted by the documented schema; it never overrides authorization, prices or account ownership. Validation: JSON object."}},"required":["title","description","campaign_type","start_date","end_date"]},"example":{"title":"Example campaign","description":"An illustrative campaign description.","campaign_type":"ticketing","start_date":"2030-06-01T09:00:00.000Z","end_date":"2030-06-02T18:00:00.000Z"}}}},"responses":{"201":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"draft"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["campaigns:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-campaigns","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Create campaign","description":"Creates a campaign under the approved organization using validated details and creator ownership; draft creation is not publication."},"fr":{"title":"Créer une campagne","description":"Crée une campagne dans l’organisation approuvée avec données validées et propriété Créateur ; un brouillon n’est pas publié."},"es":{"title":"Crear campaña","description":"Crea una campaña bajo la organización aprobada con datos validados y propiedad del creador; un borrador no se publica."},"pt":{"title":"Criar campanha","description":"Cria campanha na organização aprovada com dados validados e propriedade do Criador; rascunho não é publicação."},"ar":{"title":"إنشاء حملة","description":"ينشئ حملة ضمن المنظمة المعتمدة ببيانات موثقة وملكية المنشئ؛ ولا يعني إنشاء المسودة نشرها."}}}},"/api/white-label/v1/campaigns/{campaignId}":{"patch":{"operationId":"organization-patch-campaigns-campaignId","tags":["organization"],"summary":"Update campaign","description":"Updates supported fields of a campaign owned by the authenticated organization; account permissions and status rules still apply.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}},{"name":"campaignId","in":"path","required":true,"description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID or documented resource identifier.","schema":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID or documented resource identifier.","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Public-facing campaign title supplied by the authorized organizer. Validation: 3–255.","minLength":3,"maxLength":255},"description":{"type":"string","description":"Organizer-provided description explaining this campaign or ticket type. Validation: 10–5000.","minLength":10,"maxLength":5000},"campaign_type":{"type":"string","description":"Selects ticketing, awards voting or donation campaign services; does not grant access to an unrelated module. Validation: ticketing | voting | donation.","enum":["ticketing","voting","donation"]},"start_date":{"type":"string","description":"Campaign opening timestamp in ISO datetime format. Validation: ISO datetime.","format":"date-time"},"end_date":{"type":"string","description":"Campaign closing timestamp in ISO datetime format. Validation: ISO datetime.","format":"date-time"},"country_code":{"type":"string","description":"Configured selling country code; the server checks account and market eligibility. Validation: ISO2.","pattern":"^[A-Za-z]{2}$"},"currency_code":{"type":"string","description":"Existing permitted campaign currency; choosing a country never authorizes a new currency. Validation: ISO3.","pattern":"^[A-Za-z]{3}$"},"slug":{"type":"string","description":"URL-friendly identifier for the existing campaign or published article. Validation: configured slug schema."},"status":{"type":"string","description":"Requested supported lifecycle state; account and campaign approval rules still control publication and access. Validation: draft | pending_approval | approved | rejected | archived.","enum":["draft","pending_approval","approved","rejected","archived"]},"vote_price":{"type":"number","description":"Campaign configuration value for the selected product, stored in the campaign’s own currency or capacity unit. Validation: >=0.","minimum":0},"donation_goal":{"type":"number","description":"Campaign configuration value for the selected product, stored in the campaign’s own currency or capacity unit. Validation: >=0.","minimum":0},"ticket_price":{"type":"number","description":"Campaign configuration value for the selected product, stored in the campaign’s own currency or capacity unit. Validation: >=0.","minimum":0},"ticket_capacity":{"type":"integer","description":"Campaign configuration value for the selected product, stored in the campaign’s own currency or capacity unit. Validation: >0.","exclusiveMinimum":0},"image_url":{"anyOf":[{"type":"string","description":"URL of the resource’s supplied image; use authorized public media. Validation: URL.","format":"uri"},{"type":"null","description":"URL of the resource’s supplied image; use authorized public media. Validation: URL."}],"description":"URL of the resource’s supplied image; use authorized public media. Validation: URL."},"banner_url":{"anyOf":[{"type":"string","description":"Campaign cover artwork URL supplied by the organizer. Validation: URL.","format":"uri"},{"type":"null","description":"Campaign cover artwork URL supplied by the organizer. Validation: URL."}],"description":"Campaign cover artwork URL supplied by the organizer. Validation: URL."},"category":{"anyOf":[{"type":"string","description":"Configured campaign category or approved settings category, depending on the resource. Validation: <=120.","maxLength":120},{"type":"null","description":"Configured campaign category or approved settings category, depending on the resource. Validation: <=120."}],"description":"Configured campaign category or approved settings category, depending on the resource. Validation: <=120."},"location":{"anyOf":[{"type":"string","description":"Public campaign location or discovery location filter; separate from the financial selling country. Validation: <=255.","maxLength":255},{"type":"null","description":"Public campaign location or discovery location filter; separate from the financial selling country. Validation: <=255."}],"description":"Public campaign location or discovery location filter; separate from the financial selling country. Validation: <=255."},"event_date":{"anyOf":[{"type":"string","description":"Scheduled event date/time, distinct from the campaign selling period. Validation: ISO datetime.","format":"date-time"},{"type":"null","description":"Scheduled event date/time, distinct from the campaign selling period. Validation: ISO datetime."}],"description":"Scheduled event date/time, distinct from the campaign selling period. Validation: ISO datetime."},"verification_required":{"type":"boolean","description":"Controls the supported verification requirement for the resource; it does not bypass server eligibility checks. Validation: default true."},"metadata":{"type":"object","description":"Additional JSON metadata accepted by the documented schema; it never overrides authorization, prices or account ownership. Validation: JSON object."}}},"example":{"title":"Updated example campaign"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["campaigns:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-patch-campaigns-campaignId","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Update campaign","description":"Updates supported fields of a campaign owned by the authenticated organization; account permissions and status rules still apply."},"fr":{"title":"Modifier une campagne","description":"Modifie les champs autorisés d’une campagne appartenant à l’organisation ; permissions et règles de statut s’appliquent."},"es":{"title":"Actualizar campaña","description":"Actualiza campos permitidos de una campaña de la organización; se aplican permisos y reglas de estado."},"pt":{"title":"Atualizar campanha","description":"Atualiza campos permitidos de campanha da organização; aplicam-se permissões e regras de estado."},"ar":{"title":"تحديث حملة","description":"يحدّث الحقول المدعومة لحملة مملوكة للمنظمة مع تطبيق الصلاحيات وقواعد الحالة."}}}},"/api/white-label/v1/ticket-types":{"get":{"operationId":"organization-get-ticket-types","tags":["organization"],"summary":"Ticket types","description":"Lists campaign ticket definitions and campaign currency after checking the organization’s ticketing module and permitted campaign scope.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationPublicKey":[]},{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key","in":"header","required":true,"description":"Complete issued Public or Campaign Key for the endpoint’s permitted safe-read scope. Validation: issued Public or Campaign keyId:secret.","schema":{"type":"string","description":"Complete issued Public or Campaign Key for the endpoint’s permitted safe-read scope. Validation: issued Public or Campaign keyId:secret."}},{"name":"campaignId","in":"query","required":false,"description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID within key scope.","schema":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID within key scope.","format":"uuid"}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":[],"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["tickets:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-get-ticket-types","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Ticket types","description":"Lists campaign ticket definitions and campaign currency after checking the organization’s ticketing module and permitted campaign scope."},"fr":{"title":"Types de billets","description":"Liste types de billets et devise après vérification du module billetterie et du périmètre de campagne."},"es":{"title":"Tipos de entradas","description":"Lista tipos de entrada y moneda tras comprobar módulo y alcance de campaña."},"pt":{"title":"Tipos de bilhetes","description":"Lista tipos de bilhetes e moeda após verificar módulo e âmbito da campanha."},"ar":{"title":"أنواع التذاكر","description":"يسرد تعريفات التذاكر وعملة الحملة بعد فحص وحدة التذاكر ونطاق الحملة المسموح."}}},"post":{"operationId":"organization-post-ticket-types","tags":["organization"],"summary":"Create ticket type","description":"Creates a validated ticket type for an organization-owned campaign; price, capacity and attendee fields remain server-controlled records.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"name":{"type":"string","description":"Display name of the ticket type or participant managed by this operation. Validation: 2–120.","minLength":2,"maxLength":120},"price":{"type":"number","description":"Ticket price stored and validated by the server in the campaign currency. Validation: >=0.","minimum":0},"quantity_available":{"type":"integer","description":"Configured ticket inventory; selling and concurrent purchase checks remain on SparkGlim Server. Validation: >=0.","minimum":0},"description":{"anyOf":[{"type":"string","description":"Organizer-provided description explaining this campaign or ticket type. Validation: <=1000.","maxLength":1000},{"type":"null","description":"Organizer-provided description explaining this campaign or ticket type. Validation: <=1000."}],"description":"Organizer-provided description explaining this campaign or ticket type. Validation: <=1000."},"ticket_type":{"type":"string","description":"Configured admission tier, including paid, free or group ticket definitions. Validation: paid | free | early_bird | vip | student | group.","enum":["paid","free","early_bird","vip","student","group"]},"status":{"type":"string","description":"Requested supported lifecycle state; account and campaign approval rules still control publication and access. Validation: active | inactive | sold_out.","enum":["active","inactive","sold_out"]},"is_free":{"type":"boolean","description":"Marks a supported free ticket; free fulfillment remains a server-controlled flow. Validation: default false."},"max_per_person":{"type":"integer","description":"Maximum configured ticket quantity per buyer, enforced during purchase. Validation: >0.","exclusiveMinimum":0},"image_url":{"anyOf":[{"type":"string","description":"URL of the resource’s supplied image; use authorized public media. Validation: URL.","format":"uri"},{"type":"null","description":"URL of the resource’s supplied image; use authorized public media. Validation: URL."}],"description":"URL of the resource’s supplied image; use authorized public media. Validation: URL."},"required_attendee_fields":{"type":"array","description":"Existing attendee-field configuration required for this ticket type. Validation: configured attendee fields.","items":{"type":"object"}}},"required":["campaignId","name","price","quantity_available"]},"example":{"campaignId":"11111111-1111-4111-8111-111111111111","name":"Example ticket","price":10,"quantity_available":100}}}},"responses":{"201":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["tickets:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-ticket-types","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Create ticket type","description":"Creates a validated ticket type for an organization-owned campaign; price, capacity and attendee fields remain server-controlled records."},"fr":{"title":"Créer un type de billet","description":"Crée un type validé pour une campagne de l’organisation ; prix, capacité et champs restent des données serveur."},"es":{"title":"Crear tipo de entrada","description":"Crea tipo validado para campaña de la organización; precio, capacidad y campos siguen en servidor."},"pt":{"title":"Criar tipo de bilhete","description":"Cria tipo validado para campanha da organização; preço, capacidade e campos permanecem no servidor."},"ar":{"title":"إنشاء نوع تذكرة","description":"ينشئ نوع تذكرة متحققًا لحملة المنظمة؛ وتظل الأسعار والسعة وحقول الحضور سجلات خادم."}}}},"/api/white-label/v1/ticket-types/{ticketTypeId}":{"patch":{"operationId":"organization-patch-ticket-types-ticketTypeId","tags":["organization"],"summary":"Update ticket type","description":"Changes supported ticket definition fields after verifying ticket ownership within the organization account.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}},{"name":"ticketTypeId","in":"path","required":true,"description":"The selected ticket type belonging to the specified campaign; server checks status, capacity and price. Validation: UUID or documented resource identifier.","schema":{"type":"string","description":"The selected ticket type belonging to the specified campaign; server checks status, capacity and price. Validation: UUID or documented resource identifier.","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"name":{"type":"string","description":"Display name of the ticket type or participant managed by this operation. Validation: 2–120.","minLength":2,"maxLength":120},"price":{"type":"number","description":"Ticket price stored and validated by the server in the campaign currency. Validation: >=0.","minimum":0},"quantity_available":{"type":"integer","description":"Configured ticket inventory; selling and concurrent purchase checks remain on SparkGlim Server. Validation: >=0.","minimum":0},"description":{"anyOf":[{"type":"string","description":"Organizer-provided description explaining this campaign or ticket type. Validation: <=1000.","maxLength":1000},{"type":"null","description":"Organizer-provided description explaining this campaign or ticket type. Validation: <=1000."}],"description":"Organizer-provided description explaining this campaign or ticket type. Validation: <=1000."},"ticket_type":{"type":"string","description":"Configured admission tier, including paid, free or group ticket definitions. Validation: paid | free | early_bird | vip | student | group.","enum":["paid","free","early_bird","vip","student","group"]},"status":{"type":"string","description":"Requested supported lifecycle state; account and campaign approval rules still control publication and access. Validation: active | inactive | sold_out.","enum":["active","inactive","sold_out"]},"is_free":{"type":"boolean","description":"Marks a supported free ticket; free fulfillment remains a server-controlled flow. Validation: default false."},"max_per_person":{"type":"integer","description":"Maximum configured ticket quantity per buyer, enforced during purchase. Validation: >0.","exclusiveMinimum":0},"image_url":{"anyOf":[{"type":"string","description":"URL of the resource’s supplied image; use authorized public media. Validation: URL.","format":"uri"},{"type":"null","description":"URL of the resource’s supplied image; use authorized public media. Validation: URL."}],"description":"URL of the resource’s supplied image; use authorized public media. Validation: URL."},"required_attendee_fields":{"type":"array","description":"Existing attendee-field configuration required for this ticket type. Validation: configured attendee fields.","items":{"type":"object"}}}},"example":{"name":"Updated example ticket"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["tickets:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-patch-ticket-types-ticketTypeId","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Update ticket type","description":"Changes supported ticket definition fields after verifying ticket ownership within the organization account."},"fr":{"title":"Modifier un type de billet","description":"Modifie les champs de billet autorisés après vérification de leur appartenance à l’organisation."},"es":{"title":"Actualizar tipo de entrada","description":"Modifica campos de entrada permitidos tras comprobar pertenencia a la organización."},"pt":{"title":"Atualizar tipo de bilhete","description":"Altera campos de bilhete permitidos após verificar pertença à organização."},"ar":{"title":"تحديث نوع تذكرة","description":"يغيّر حقول تعريف التذكرة المدعومة بعد التحقق من ملكيتها ضمن حساب المنظمة."}}}},"/api/white-label/v1/ticket-types/bootstrap":{"post":{"operationId":"organization-post-ticket-types-bootstrap","tags":["organization"],"summary":"Creator-enabled bootstrap","description":"Initializes1–30 ticket types only for an empty campaign with creator-enabled bootstrap, using a durable idempotent operation.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}},{"name":"X-Idempotency-Key","in":"header","required":true,"description":"Stable business-operation identity reused on retries with unchanged request details; different details under the same key are rejected. Validation: 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Stable business-operation identity reused on retries with unchanged request details; different details under the same key are rejected. Validation: 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"ticketTypes":{"type":"array","description":"Initial ticket definitions for an empty creator-enabled campaign; each item uses the ticket schema without campaignId. Validation: 1–30 ticket definitions; all create ticket fields except campaignId.","items":{"type":"object"},"minItems":1,"maxItems":30}},"required":["campaignId","ticketTypes"]},"example":{"campaignId":"11111111-1111-4111-8111-111111111111","ticketTypes":[{"name":"Example ticket","price":10,"quantity_available":100}]}}}},"responses":{"201":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["tickets:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-ticket-types-bootstrap","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Creator-enabled bootstrap","description":"Initializes1–30 ticket types only for an empty campaign with creator-enabled bootstrap, using a durable idempotent operation."},"fr":{"title":"Initialisation autorisée par le Créateur","description":"Initialise1–30 types uniquement pour une campagne vide avec autorisation Créateur et idempotence durable."},"es":{"title":"Inicialización autorizada por el creador","description":"Inicializa1–30 tipos solo para campaña vacía con autorización del creador e idempotencia duradera."},"pt":{"title":"Inicialização autorizada pelo Criador","description":"Inicializa1–30 tipos só para campanha vazia com autorização do Criador e idempotência durável."},"ar":{"title":"تهيئة مفعلة من المنشئ","description":"يهيئ1–30 نوع تذكرة لحملة فارغة فقط مع تمكين المنشئ وحماية عدم تكرار دائمة."}}}},"/api/white-label/v1/participants":{"get":{"operationId":"organization-get-participants","tags":["organization"],"summary":"Nominees and participants","description":"Lists organization-owned nominees or participants with optional campaign, status and search filters; this is a private record reader.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}},{"name":"campaignId","in":"query","required":false,"description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","schema":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"}},{"name":"search","in":"query","required":false,"description":"Text filter applied to the existing published records selected by this endpoint. Validation: trimmed text.","schema":{"type":"string","description":"Text filter applied to the existing published records selected by this endpoint. Validation: trimmed text."}},{"name":"status","in":"query","required":false,"description":"Requested supported lifecycle state; account and campaign approval rules still control publication and access. Validation: supported status.","schema":{"type":"string","description":"Requested supported lifecycle state; account and campaign approval rules still control publication and access. Validation: supported status."}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":[],"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["campaigns:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-get-participants","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Nominees and participants","description":"Lists organization-owned nominees or participants with optional campaign, status and search filters; this is a private record reader."},"fr":{"title":"Candidats et participants","description":"Liste candidats ou participants de l’organisation avec filtres de campagne, statut et recherche ; lecture privée."},"es":{"title":"Candidatos y participantes","description":"Lista candidatos o participantes de la organización con filtros de campaña, estado y búsqueda; lectura privada."},"pt":{"title":"Nomeados e participantes","description":"Lista nomeados ou participantes da organização com filtros de campanha, estado e pesquisa; leitura privada."},"ar":{"title":"المرشحون والمشاركون","description":"يسرد مرشحي المنظمة أو مشاركيها مع تصفية الحملة والحالة والبحث؛ وهذه قراءة سجلات خاصة."}}},"post":{"operationId":"organization-post-participants","tags":["organization"],"summary":"Create participant","description":"Creates a participant associated with an organization-owned campaign and optional category using the validated participant schema.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"name":{"type":"string","description":"Display name of the ticket type or participant managed by this operation. Validation: 2–160.","minLength":2,"maxLength":160},"categoryId":{"anyOf":[{"type":"string","description":"Existing category belonging to this campaign; never a category from another account or campaign. Validation: UUID.","format":"uuid"},{"type":"null","description":"Existing category belonging to this campaign; never a category from another account or campaign. Validation: UUID."}],"description":"Existing category belonging to this campaign; never a category from another account or campaign. Validation: UUID."},"bio":{"anyOf":[{"type":"string","description":"Nominee biography supplied by the authorized organizer. Validation: <=5000.","maxLength":5000},{"type":"null","description":"Nominee biography supplied by the authorized organizer. Validation: <=5000."}],"description":"Nominee biography supplied by the authorized organizer. Validation: <=5000."},"phoneNumber":{"anyOf":[{"type":"string","description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: <=32.","maxLength":32},{"type":"null","description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: <=32."}],"description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: <=32."},"imageUrl":{"anyOf":[{"type":"string","description":"URL of the resource’s supplied image; use authorized public media. Validation: URL.","format":"uri"},{"type":"null","description":"URL of the resource’s supplied image; use authorized public media. Validation: URL."}],"description":"URL of the resource’s supplied image; use authorized public media. Validation: URL."},"applicationStatus":{"type":"string","description":"Nominee approval state accepted by the organization management contract. Validation: pending | approved | rejected.","enum":["pending","approved","rejected"]},"metadata":{"type":"object","description":"Additional JSON metadata accepted by the documented schema; it never overrides authorization, prices or account ownership. Validation: JSON object."}},"required":["campaignId","name"]},"example":{"campaignId":"11111111-1111-4111-8111-111111111111","name":"Example nominee","applicationStatus":"pending"}}}},"responses":{"201":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["campaigns:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-participants","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Create participant","description":"Creates a participant associated with an organization-owned campaign and optional category using the validated participant schema."},"fr":{"title":"Créer un participant","description":"Crée un participant lié à une campagne de l’organisation et à une catégorie éventuelle selon le schéma validé."},"es":{"title":"Crear participante","description":"Crea participante de una campaña de la organización y categoría opcional según esquema validado."},"pt":{"title":"Criar participante","description":"Cria participante de campanha da organização e categoria opcional segundo esquema validado."},"ar":{"title":"إنشاء مشارك","description":"ينشئ مشاركًا مرتبطًا بحملة المنظمة وفئة اختيارية وفق مخطط المشارك المتحقق."}}}},"/api/white-label/v1/participants/{participantId}":{"patch":{"operationId":"organization-patch-participants-participantId","tags":["organization"],"summary":"Update participant","description":"Updates only a participant belonging to the organization, preserving the existing campaign and approval authorization checks.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}},{"name":"participantId","in":"path","required":true,"description":"The nominee selected within this campaign; approval and campaign rules are checked by the server. Validation: UUID or documented resource identifier.","schema":{"type":"string","description":"The nominee selected within this campaign; approval and campaign rules are checked by the server. Validation: UUID or documented resource identifier.","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"name":{"type":"string","description":"Display name of the ticket type or participant managed by this operation. Validation: 2–160.","minLength":2,"maxLength":160},"categoryId":{"anyOf":[{"type":"string","description":"Existing category belonging to this campaign; never a category from another account or campaign. Validation: UUID.","format":"uuid"},{"type":"null","description":"Existing category belonging to this campaign; never a category from another account or campaign. Validation: UUID."}],"description":"Existing category belonging to this campaign; never a category from another account or campaign. Validation: UUID."},"bio":{"anyOf":[{"type":"string","description":"Nominee biography supplied by the authorized organizer. Validation: <=5000.","maxLength":5000},{"type":"null","description":"Nominee biography supplied by the authorized organizer. Validation: <=5000."}],"description":"Nominee biography supplied by the authorized organizer. Validation: <=5000."},"phoneNumber":{"anyOf":[{"type":"string","description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: <=32.","maxLength":32},{"type":"null","description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: <=32."}],"description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: <=32."},"imageUrl":{"anyOf":[{"type":"string","description":"URL of the resource’s supplied image; use authorized public media. Validation: URL.","format":"uri"},{"type":"null","description":"URL of the resource’s supplied image; use authorized public media. Validation: URL."}],"description":"URL of the resource’s supplied image; use authorized public media. Validation: URL."},"applicationStatus":{"type":"string","description":"Nominee approval state accepted by the organization management contract. Validation: pending | approved | rejected.","enum":["pending","approved","rejected"]},"metadata":{"type":"object","description":"Additional JSON metadata accepted by the documented schema; it never overrides authorization, prices or account ownership. Validation: JSON object."}}},"example":{"bio":"Example biography"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["campaigns:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-patch-participants-participantId","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Update participant","description":"Updates only a participant belonging to the organization, preserving the existing campaign and approval authorization checks."},"fr":{"title":"Modifier un participant","description":"Modifie uniquement un participant de l’organisation en conservant les contrôles de campagne et d’approbation."},"es":{"title":"Actualizar participante","description":"Actualiza solo participante de la organización preservando controles de campaña y aprobación."},"pt":{"title":"Atualizar participante","description":"Atualiza apenas participante da organização preservando controlos de campanha e aprovação."},"ar":{"title":"تحديث مشارك","description":"يحدّث مشاركًا تابعًا للمنظمة فقط مع حفظ ضوابط الحملة والموافقة القائمة."}}}},"/api/white-label/v1/tickets/verify":{"post":{"operationId":"organization-post-tickets-verify","tags":["organization"],"summary":"Public ticket status","description":"Reads tenant-scoped public admission status without checking the guest in or exposing the purchased ticket QR.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationPublicKey":[]},{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key","in":"header","required":true,"description":"Complete issued Public or Campaign Key for the endpoint’s permitted safe-read scope. Validation: issued Public or Campaign keyId:secret.","schema":{"type":"string","description":"Complete issued Public or Campaign Key for the endpoint’s permitted safe-read scope. Validation: issued Public or Campaign keyId:secret."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID required for scoped ticket lookup.","format":"uuid"},"ticketCode":{"type":"string","description":"Existing ticket credential within the authorized campaign, used for lookup or authorized admission. Validation: ticket credential; 3–120."}},"required":["campaignId","ticketCode"]},"example":{"campaignId":"11111111-1111-4111-8111-111111111111","ticketCode":"<EXISTING_TICKET_CODE>"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"status":"invalid","message":"This ticket code is invalid."},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["tickets:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-tickets-verify","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Public ticket status","description":"Reads tenant-scoped public admission status without checking the guest in or exposing the purchased ticket QR."},"fr":{"title":"Statut public du billet","description":"Lit le statut d’admission public limité au tenant sans enregistrer l’entrée ni exposer le QR acheté."},"es":{"title":"Estado público de entrada","description":"Lee estado público de admisión del tenant sin registrar entrada ni exponer QR comprado."},"pt":{"title":"Estado público do bilhete","description":"Lê estado público de admissão do tenant sem registar entrada nem expor QR comprado."},"ar":{"title":"حالة التذكرة العامة","description":"يقرأ حالة الدخول العامة ضمن نطاق العميل دون تسجيل دخول الضيف أو كشف QR التذكرة المشتراة."}}}},"/api/white-label/v1/tickets/check-in":{"post":{"operationId":"organization-post-tickets-check-in","tags":["organization"],"summary":"Authorized check-in","description":"Records authorized admission for a ticket belonging to this organization; duplicate check-in returns its existing state.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ticketCode":{"type":"string","description":"Existing ticket credential within the authorized campaign, used for lookup or authorized admission. Validation: 3–120.","minLength":3,"maxLength":120},"checkedInBy":{"anyOf":[{"type":"string","description":"Display name of the ticket type or participant managed by this operation. Validation: <=120.","maxLength":120},{"type":"null","description":"Display name of the ticket type or participant managed by this operation. Validation: <=120."}],"description":"Display name of the ticket type or participant managed by this operation. Validation: <=120."}},"required":["ticketCode"]},"example":{"ticketCode":"<EXISTING_TICKET_CODE>"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"checkedIn":true,"alreadyCheckedIn":false,"checkedInAt":"2030-01-01T09:00:00.000Z","ticket":{"ticketCode":"<TICKET_CODE>"}},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["tickets:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-tickets-check-in","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Authorized check-in","description":"Records authorized admission for a ticket belonging to this organization; duplicate check-in returns its existing state."},"fr":{"title":"Contrôle d’entrée autorisé","description":"Enregistre l’admission autorisée d’un billet de l’organisation ; une répétition retourne l’état existant."},"es":{"title":"Registro autorizado","description":"Registra admisión autorizada de entrada de la organización; repetir devuelve estado existente."},"pt":{"title":"Entrada autorizada","description":"Regista admissão autorizada de bilhete da organização; repetir devolve estado existente."},"ar":{"title":"تسجيل دخول مصرح","description":"يسجل دخولًا مصرحًا لتذكرة المنظمة؛ وتعيد محاولة الدخول المكررة حالتها القائمة."}}}},"/api/white-label/v1/votes/initialize":{"post":{"operationId":"organization-post-votes-initialize","tags":["organization"],"summary":"Start vote checkout","description":"Validates campaign and nominee, initializes the existing vote payment and reuses the durable operation on retries; the server records completed votes.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}},{"name":"X-Idempotency-Key","in":"header","required":true,"description":"Stable business-operation identity reused on retries with unchanged request details; different details under the same key are rejected. Validation: 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Stable business-operation identity reused on retries with unchanged request details; different details under the same key are rejected. Validation: 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"participantId":{"type":"string","description":"The nominee selected within this campaign; approval and campaign rules are checked by the server. Validation: UUID.","format":"uuid"},"voteCount":{"type":"integer","description":"Number of votes requested for the selected nominee; SparkGlim Server determines the valid price and records completed votes. Validation: 1–100.","minimum":1,"maximum":100},"phoneNumber":{"type":"string","description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: 8–32.","minLength":8,"maxLength":32},"callbackUrl":{"type":"string","description":"Return destination accepted by the existing integration contract; never proof that a payment succeeded. Validation: URL.","format":"uri"},"email":{"anyOf":[{"type":"string","description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email.","format":"email"},{"type":"null","description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email."}],"description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email."},"channel":{"type":"string","description":"Delivery or integration channel supported by this operation and the account’s enabled configuration. Validation: web | ussd | telegram | whatsapp.","enum":["web","ussd","telegram","whatsapp"]},"payment_channel":{"type":"string","description":"Optional channel preference; only methods enabled for the real selling country, currency and merchant may be used. Validation: enabled checkout method."},"metadata":{"type":"object","description":"Additional JSON metadata accepted by the documented schema; it never overrides authorization, prices or account ownership. Validation: JSON object."}},"required":["campaignId","participantId","voteCount","phoneNumber","callbackUrl"]},"example":{"campaignId":"11111111-1111-4111-8111-111111111111","participantId":"33333333-3333-4333-8333-333333333333","voteCount":1,"phoneNumber":"+233200000000","callbackUrl":"https://events.example.com/payment-return"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"authorization_url":"https://checkout.sparkglim.net/gh/<SERVER_REFERENCE>","reference":"<SERVER_REFERENCE>"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["payments:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-votes-initialize","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Start vote checkout","description":"Validates campaign and nominee, initializes the existing vote payment and reuses the durable operation on retries; the server records completed votes."},"fr":{"title":"Démarrer le paiement du vote","description":"Valide campagne et candidat, initialise le paiement existant et réutilise l’opération aux reprises ; le serveur enregistre les votes terminés."},"es":{"title":"Iniciar pago de votos","description":"Valida campaña y candidato, inicia pago existente y reutiliza operación al reintentar; el servidor registra votos completados."},"pt":{"title":"Iniciar pagamento de votos","description":"Valida campanha e nomeado, inicia pagamento existente e reutiliza operação em repetições; o servidor regista votos concluídos."},"ar":{"title":"بدء دفع الأصوات","description":"يتحقق من الحملة والمرشح ويهيئ دفع الأصوات القائم ويعيد العملية عند المحاولة؛ ويسجل الخادم الأصوات المكتملة."}}}},"/api/white-label/v1/fundraising/initialize":{"post":{"operationId":"organization-post-fundraising-initialize","tags":["organization"],"summary":"Start donation checkout","description":"Initializes a donation through the approved organization campaign and existing payment service with durable idempotency.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}},{"name":"X-Idempotency-Key","in":"header","required":true,"description":"Stable business-operation identity reused on retries with unchanged request details; different details under the same key are rejected. Validation: 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Stable business-operation identity reused on retries with unchanged request details; different details under the same key are rejected. Validation: 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"amount":{"type":"number","description":"Requested contribution or withdrawal amount in the existing campaign/account currency; the server validates financial authority and final terms. Validation: positive; server validates campaign currency.","exclusiveMinimum":0},"callbackUrl":{"type":"string","description":"Return destination accepted by the existing integration contract; never proof that a payment succeeded. Validation: URL.","format":"uri"},"phoneNumber":{"anyOf":[{"type":"string","description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: 8–32.","minLength":8,"maxLength":32},{"type":"null","description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: 8–32."}],"description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: 8–32."},"email":{"anyOf":[{"type":"string","description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email.","format":"email"},{"type":"null","description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email."}],"description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email."},"donorName":{"anyOf":[{"type":"string","description":"Public display label for the member or contributor; it does not change account ownership. Validation: <=160.","maxLength":160},{"type":"null","description":"Public display label for the member or contributor; it does not change account ownership. Validation: <=160."}],"description":"Public display label for the member or contributor; it does not change account ownership. Validation: <=160."},"displayName":{"anyOf":[{"type":"string","description":"Public display label for the member or contributor; it does not change account ownership. Validation: <=160.","maxLength":160},{"type":"null","description":"Public display label for the member or contributor; it does not change account ownership. Validation: <=160."}],"description":"Public display label for the member or contributor; it does not change account ownership. Validation: <=160."},"anonymous":{"type":"boolean","description":"Requests the existing anonymous-contribution behavior; conflicting anonymity fields must not be sent. Validation: default false."},"message":{"anyOf":[{"type":"string","description":"Optional donor message retained with the contribution under the campaign’s permitted presentation. Validation: <=1000.","maxLength":1000},{"type":"null","description":"Optional donor message retained with the contribution under the campaign’s permitted presentation. Validation: <=1000."}],"description":"Optional donor message retained with the contribution under the campaign’s permitted presentation. Validation: <=1000."},"channel":{"type":"string","description":"Delivery or integration channel supported by this operation and the account’s enabled configuration. Validation: web | ussd | telegram | whatsapp.","enum":["web","ussd","telegram","whatsapp"]},"payment_channel":{"type":"string","description":"Optional channel preference; only methods enabled for the real selling country, currency and merchant may be used. Validation: enabled checkout method."},"metadata":{"type":"object","description":"Additional JSON metadata accepted by the documented schema; it never overrides authorization, prices or account ownership. Validation: JSON object."}},"required":["campaignId","amount","callbackUrl"]},"example":{"campaignId":"11111111-1111-4111-8111-111111111111","amount":10,"callbackUrl":"https://events.example.com/payment-return","anonymous":true}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"authorization_url":"https://checkout.sparkglim.net/gh/<SERVER_REFERENCE>","reference":"<SERVER_REFERENCE>"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["payments:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-fundraising-initialize","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Start donation checkout","description":"Initializes a donation through the approved organization campaign and existing payment service with durable idempotency."},"fr":{"title":"Démarrer le paiement du don","description":"Initialise un don via la campagne Organisation et le service de paiement existant avec idempotence durable."},"es":{"title":"Iniciar pago del donativo","description":"Inicializa donativo mediante campaña aprobada y servicio existente con idempotencia duradera."},"pt":{"title":"Iniciar pagamento do donativo","description":"Inicializa donativo pela campanha aprovada e serviço existente com idempotência durável."},"ar":{"title":"بدء دفع التبرع","description":"يهيئ تبرعًا عبر حملة المنظمة المعتمدة وخدمة الدفع القائمة مع حماية عدم تكرار دائمة."}}}},"/api/white-label/v1/fundraising/summary":{"get":{"operationId":"organization-get-fundraising-summary","tags":["organization"],"summary":"Fundraising report","description":"Returns private organization fundraising totals, campaigns and up to50 recent donation records; it is not a public disclosure-safe aggregate.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}},{"name":"campaignId","in":"query","required":false,"description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","schema":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"totals":{"campaignCount":0,"donationCount":0,"totalRaised":0},"campaigns":[],"recentDonations":[]},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["analytics:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-get-fundraising-summary","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Fundraising report","description":"Returns private organization fundraising totals, campaigns and up to50 recent donation records; it is not a public disclosure-safe aggregate."},"fr":{"title":"Rapport de collecte","description":"Retourne totaux privés, campagnes et jusqu’à50 dons récents ; ce n’est pas un agrégat public filtré."},"es":{"title":"Informe de recaudación","description":"Devuelve totales privados, campañas y hasta50 donaciones recientes; no es agregado público filtrado."},"pt":{"title":"Relatório de angariação","description":"Devolve totais privados, campanhas e até50 donativos recentes; não é agregado público filtrado."},"ar":{"title":"تقرير جمع التبرعات","description":"يعيد مجاميع المنظمة الخاصة وحملاتها وحتى50 سجل تبرع حديثًا؛ وليس تجميعًا آمنًا للنشر العام."}}}},"/api/white-label/v1/payments/initialize":{"post":{"operationId":"organization-post-payments-initialize","tags":["organization"],"summary":"Start ticket checkout","description":"Validates organization ticketing access, selected ticket and buyer information, then creates or reuses central checkout with a receipt bound to this domain.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}},{"name":"X-Idempotency-Key","in":"header","required":true,"description":"Stable business-operation identity reused on retries with unchanged request details; different details under the same key are rejected. Validation: 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Stable business-operation identity reused on retries with unchanged request details; different details under the same key are rejected. Validation: 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"ticket_id":{"type":"string","description":"The selected ticket type belonging to the specified campaign; server checks status, capacity and price. Validation: UUID.","format":"uuid"},"quantity":{"type":"integer","description":"Number of tickets requested; inventory and per-person purchase limits remain server-enforced. Validation: 1–100.","minimum":1,"maximum":100},"phone_number":{"type":"string","description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: nonempty valid phone.","minLength":1},"email":{"type":"string","description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email.","format":"email"},"discount_code":{"type":"string","description":"Existing campaign-specific discount or invitation credential, revalidated by the server before purchasing. Validation: trimmed nonempty."},"invite_code":{"type":"string","description":"Existing campaign-specific discount or invitation credential, revalidated by the server before purchasing. Validation: trimmed nonempty."},"luggage_quantity":{"type":"integer","description":"Quantity of luggage in an event that actually supports the configured luggage option. Validation: >=0.","minimum":0},"attendee_information":{"type":"object","description":"Answers matching the actual campaign-specific fields, required values and supported options. Validation: string values matching configured fields."},"payment_channel":{"type":"string","description":"Optional channel preference; only methods enabled for the real selling country, currency and merchant may be used. Validation: card | mobile_money | apple_pay | bank_transfer | crypto; availability is server-controlled.","enum":["card","mobile_money","apple_pay","bank_transfer","crypto"]},"network_code":{"type":"string","description":"Configured mobile network selection where the chosen payment channel requires it. Validation: configured network."},"is_app":{"type":"boolean","description":"Existing caller context used to select Web or User App configuration; it grants no extra permissions. Validation: client context."},"return_path":{"type":"string","description":"Relative return destination on the verified current website after centralized checkout. Validation: same verified domain relative path."},"clientIp":{"type":"string","description":"Original client IP supplied by an authorized backend; used by existing abuse controls. Validation: valid IP."}},"required":["campaign_id","ticket_id","quantity","phone_number"]},"example":{"campaign_id":"11111111-1111-4111-8111-111111111111","ticket_id":"22222222-2222-4222-8222-222222222222","quantity":1,"phone_number":"+233200000000","return_path":"/payment-return"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"authorization_url":"https://checkout.sparkglim.net/gh/<SERVER_REFERENCE>","reference":"<SERVER_REFERENCE>"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["payments:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-payments-initialize","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Start ticket checkout","description":"Validates organization ticketing access, selected ticket and buyer information, then creates or reuses central checkout with a receipt bound to this domain."},"fr":{"title":"Démarrer le paiement des billets","description":"Valide accès billetterie, billet et acheteur, puis crée ou réutilise le paiement central avec reçu lié au domaine."},"es":{"title":"Iniciar pago de entradas","description":"Valida acceso a entradas, tipo y comprador; crea o reutiliza pago central con recibo vinculado al dominio."},"pt":{"title":"Iniciar pagamento de bilhetes","description":"Valida acesso a bilhetes, tipo e comprador; cria ou reutiliza pagamento central com recibo vinculado ao domínio."},"ar":{"title":"بدء دفع التذاكر","description":"يتحقق من صلاحية التذاكر والنوع والمشتري ثم ينشئ الدفع المركزي أو يستعيده بإيصال مرتبط بالنطاق."}}}},"/api/white-label/v1/payments/verify":{"post":{"operationId":"organization-post-payments-verify","tags":["organization"],"summary":"Server payment reconciliation","description":"Server-side reconciliation checks the opaque receipt against this account/domain/reference before using the existing authoritative payment service. Never call from a public browser.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reference":{"type":"string","description":"Opaque transaction reference returned by the original server initialization; retain it unchanged. Validation: 1–200.","minLength":1,"maxLength":200},"receiptToken":{"type":"string","description":"Opaque receipt from ticket initialization, required with the matching reference for server-side reconciliation. Validation: UUID bound to this domain/account/payment.","format":"uuid"}},"required":["reference","receiptToken"]},"example":{"reference":"<SERVER_REFERENCE>","receiptToken":"44444444-4444-4444-8444-444444444444"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"reference":"<SERVER_REFERENCE>","status":"pending"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["payments:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-payments-verify","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Server payment reconciliation","description":"Server-side reconciliation checks the opaque receipt against this account/domain/reference before using the existing authoritative payment service. Never call from a public browser."},"fr":{"title":"Rapprochement serveur du paiement","description":"Le rapprochement serveur vérifie le reçu lié au compte, domaine et référence avant le service de paiement ; jamais depuis le navigateur public."},"es":{"title":"Conciliación del pago en servidor","description":"La conciliación del servidor verifica recibo, cuenta, dominio y referencia antes del servicio autoritativo; nunca desde navegador público."},"pt":{"title":"Reconciliação do pagamento no servidor","description":"A reconciliação do servidor verifica recibo, conta, domínio e referência antes do serviço oficial; nunca pelo navegador público."},"ar":{"title":"مطابقة الدفع من الخادم","description":"تتحقق مطابقة الخادم من الإيصال والحساب والنطاق والمرجع قبل خدمة الدفع المعتمدة؛ ولا تستدعى من متصفح عام."}}}},"/api/white-label/v1/submissions":{"post":{"operationId":"organization-post-submissions","tags":["organization"],"summary":"Vendor, volunteer or partner application","description":"Stores an idempotent vendor, volunteer or partner application after module, campaign and required contact checks; submission does not approve it.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}},{"name":"X-Idempotency-Key","in":"header","required":true,"description":"Stable business-operation identity reused on retries with unchanged request details; different details under the same key are rejected. Validation: 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Stable business-operation identity reused on retries with unchanged request details; different details under the same key are rejected. Validation: 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Supported resource kind, reaction kind or discovery campaign filter specified by this endpoint. Validation: volunteer | vendor | partner.","enum":["volunteer","vendor","partner"]},"campaignId":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"details":{"type":"object","description":"Strict applicant-information object; only the documented fields are accepted. Validation: strict allowed fields.","properties":{"fullName":{"type":"string","description":"Applicant identity or requested operating space recorded with the vendor, volunteer or partner application. Validation: 2–120.","minLength":2,"maxLength":120},"email":{"type":"string","description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email <=254.","format":"email","maxLength":254},"phone":{"type":"string","description":"Member or applicant contact phone used by the existing account workflow. Validation: valid phone <=40.","maxLength":40},"description":{"type":"string","description":"Organizer-provided description explaining this campaign or ticket type. Validation: 10–3000.","minLength":10,"maxLength":3000},"businessName":{"type":"string","description":"Applicant identity or requested operating space recorded with the vendor, volunteer or partner application. Validation: <=160; required for vendor/partner.","maxLength":160},"category":{"type":"string","description":"Configured campaign category or approved settings category, depending on the resource. Validation: <=120; required for volunteer.","maxLength":120},"stand":{"type":"string","description":"Applicant identity or requested operating space recorded with the vendor, volunteer or partner application. Validation: <=80.","maxLength":80}},"required":["fullName","email","phone","description"],"additionalProperties":false},"clientIp":{"type":"string","description":"Original client IP supplied by an authorized backend; used by existing abuse controls. Validation: valid IP."}},"required":["type","campaignId","details"]},"example":{"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"}}}}},"responses":{"201":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending","created_at":"2030-01-01T00:00:00.000Z"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["submissions:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-submissions","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Vendor, volunteer or partner application","description":"Stores an idempotent vendor, volunteer or partner application after module, campaign and required contact checks; submission does not approve it."},"fr":{"title":"Candidature prestataire, bénévole ou partenaire","description":"Enregistre une candidature idempotente après vérification du module, campagne et contacts ; l’envoi ne l’approuve pas."},"es":{"title":"Solicitud de proveedor, voluntario o socio","description":"Guarda solicitud idempotente tras verificar módulo, campaña y contactos; enviarla no la aprueba."},"pt":{"title":"Candidatura de fornecedor, voluntário ou parceiro","description":"Guarda candidatura idempotente após verificar módulo, campanha e contactos; enviar não aprova."},"ar":{"title":"طلب بائع أو متطوع أو شريك","description":"يحفظ طلب بائع أو متطوع أو شريك بعد فحص الوحدة والحملة والتواصل مع عدم التكرار؛ ولا يوافق عليه الإرسال."}}}},"/api/white-label/v1/my-tickets/request-otp":{"post":{"operationId":"organization-post-my-tickets-request-otp","tags":["organization"],"summary":"Request ticket-access OTP","description":"Sends a ticket-access code only when the scoped campaign has a completed ticket matching the submitted contact.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"contact":{"type":"string","description":"Customer email or phone used only to find completed tickets in the authorized campaign before sending an access OTP. Validation: 3–254.","minLength":3,"maxLength":254},"challengeId":{"type":"string","description":"Identifier returned by the matching OTP request; it is bound to that contact, website and campaign. Validation: UUID.","format":"uuid"},"code":{"type":"string","description":"The existing resource credential or verification code required by this endpoint; never publish a real OTP or ticket secret. Validation: 6 digits.","pattern":"^\\d{6}$","minLength":6,"maxLength":6},"sessionToken":{"type":"string","description":"Verified customer ticket-access session bound to the account, website and campaign. Validation: 40–100.","minLength":40,"maxLength":100},"ticketCode":{"type":"string","description":"Existing ticket credential within the authorized campaign, used for lookup or authorized admission. Validation: 6–80.","minLength":6,"maxLength":80},"page":{"type":"integer","description":"Requested result page within the endpoint’s documented numbering; retain server pagination metadata. Validation: 0–1000 default0.","minimum":0,"maximum":1000}},"required":["campaignId","contact"]},"example":{"campaignId":"11111111-1111-4111-8111-111111111111","contact":"buyer@example.com"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"deliveryStarted":true,"challengeId":"11111111-1111-4111-8111-111111111111","message":"Your sign-in code has been sent."},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["my-tickets:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-my-tickets-request-otp","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Request ticket-access OTP","description":"Sends a ticket-access code only when the scoped campaign has a completed ticket matching the submitted contact."},"fr":{"title":"Demander le code d’accès aux billets","description":"Envoie un code seulement si un billet terminé de la campagne correspond au contact envoyé."},"es":{"title":"Solicitar OTP de acceso a entradas","description":"Envía código solo si existe entrada completada de la campaña para el contacto enviado."},"pt":{"title":"Pedir OTP de acesso aos bilhetes","description":"Envia código só se existe bilhete concluído da campanha para o contacto enviado."},"ar":{"title":"طلب رمز الوصول للتذاكر","description":"يرسل رمز وصول فقط عند وجود تذكرة مكتملة بالحملة تطابق معلومات التواصل المرسلة."}}}},"/api/white-label/v1/my-tickets/verify-otp":{"post":{"operationId":"organization-post-my-tickets-verify-otp","tags":["organization"],"summary":"Verify ticket-access OTP","description":"Validates the campaign-bound challenge and code, then issues a limited customer ticket-access session.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"contact":{"type":"string","description":"Customer email or phone used only to find completed tickets in the authorized campaign before sending an access OTP. Validation: 3–254.","minLength":3,"maxLength":254},"challengeId":{"type":"string","description":"Identifier returned by the matching OTP request; it is bound to that contact, website and campaign. Validation: UUID.","format":"uuid"},"code":{"type":"string","description":"The existing resource credential or verification code required by this endpoint; never publish a real OTP or ticket secret. Validation: 6 digits.","pattern":"^\\d{6}$","minLength":6,"maxLength":6},"sessionToken":{"type":"string","description":"Verified customer ticket-access session bound to the account, website and campaign. Validation: 40–100.","minLength":40,"maxLength":100},"ticketCode":{"type":"string","description":"Existing ticket credential within the authorized campaign, used for lookup or authorized admission. Validation: 6–80.","minLength":6,"maxLength":80},"page":{"type":"integer","description":"Requested result page within the endpoint’s documented numbering; retain server pagination metadata. Validation: 0–1000 default0.","minimum":0,"maximum":1000}},"required":["campaignId","challengeId","code"]},"example":{"campaignId":"11111111-1111-4111-8111-111111111111","challengeId":"44444444-4444-4444-8444-444444444444","code":"000000"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"token":"<VERIFIED_CUSTOMER_SESSION>","expiresAt":"2030-01-01T00:10:00.000Z"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["my-tickets:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-my-tickets-verify-otp","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Verify ticket-access OTP","description":"Validates the campaign-bound challenge and code, then issues a limited customer ticket-access session."},"fr":{"title":"Vérifier le code d’accès","description":"Valide le défi et le code liés à la campagne puis émet une session client limitée aux billets."},"es":{"title":"Verificar OTP de acceso","description":"Valida desafío y código de campaña y emite sesión de acceso limitada a entradas."},"pt":{"title":"Verificar OTP de acesso","description":"Valida desafio e código da campanha e emite sessão de acesso limitada aos bilhetes."},"ar":{"title":"التحقق من رمز الوصول","description":"يتحقق من تحدي الحملة والرمز ثم يصدر جلسة عميل محدودة للوصول إلى التذاكر."}}}},"/api/white-label/v1/my-tickets/list":{"post":{"operationId":"organization-post-my-tickets-list","tags":["organization"],"summary":"Customer ticket list","description":"Lists tickets within the verified customer session and campaign using20 purchases per zero-based page.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"contact":{"type":"string","description":"Customer email or phone used only to find completed tickets in the authorized campaign before sending an access OTP. Validation: 3–254.","minLength":3,"maxLength":254},"challengeId":{"type":"string","description":"Identifier returned by the matching OTP request; it is bound to that contact, website and campaign. Validation: UUID.","format":"uuid"},"code":{"type":"string","description":"The existing resource credential or verification code required by this endpoint; never publish a real OTP or ticket secret. Validation: 6 digits.","pattern":"^\\d{6}$","minLength":6,"maxLength":6},"sessionToken":{"type":"string","description":"Verified customer ticket-access session bound to the account, website and campaign. Validation: 40–100.","minLength":40,"maxLength":100},"ticketCode":{"type":"string","description":"Existing ticket credential within the authorized campaign, used for lookup or authorized admission. Validation: 6–80.","minLength":6,"maxLength":80},"page":{"type":"integer","description":"Requested result page within the endpoint’s documented numbering; retain server pagination metadata. Validation: 0–1000 default0.","minimum":0,"maximum":1000}},"required":["campaignId","sessionToken"]},"example":{"campaignId":"11111111-1111-4111-8111-111111111111","sessionToken":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"expiresAt":"2030-01-01T00:10:00.000Z","hasMore":false,"tickets":[]},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["my-tickets:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-my-tickets-list","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Customer ticket list","description":"Lists tickets within the verified customer session and campaign using20 purchases per zero-based page."},"fr":{"title":"Billets du client","description":"Liste les billets de la session client vérifiée et de la campagne avec20 achats par page commençant à zéro."},"es":{"title":"Entradas del cliente","description":"Lista entradas de sesión y campaña verificadas con20 compras por página desde cero."},"pt":{"title":"Bilhetes do cliente","description":"Lista bilhetes da sessão e campanha verificadas com20 compras por página iniciada em zero."},"ar":{"title":"قائمة تذاكر العميل","description":"يسرد تذاكر الجلسة والحملة الموثقتين بمعدل20 عملية شراء لكل صفحة تبدأ من الصفر."}}}},"/api/white-label/v1/my-tickets/qr":{"post":{"operationId":"organization-post-my-tickets-qr","tags":["organization"],"summary":"Customer ticket QR","description":"Renders a QR only for a ticket found inside the verified customer session and authorized campaign.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"contact":{"type":"string","description":"Customer email or phone used only to find completed tickets in the authorized campaign before sending an access OTP. Validation: 3–254.","minLength":3,"maxLength":254},"challengeId":{"type":"string","description":"Identifier returned by the matching OTP request; it is bound to that contact, website and campaign. Validation: UUID.","format":"uuid"},"code":{"type":"string","description":"The existing resource credential or verification code required by this endpoint; never publish a real OTP or ticket secret. Validation: 6 digits.","pattern":"^\\d{6}$","minLength":6,"maxLength":6},"sessionToken":{"type":"string","description":"Verified customer ticket-access session bound to the account, website and campaign. Validation: 40–100.","minLength":40,"maxLength":100},"ticketCode":{"type":"string","description":"Existing ticket credential within the authorized campaign, used for lookup or authorized admission. Validation: 6–80.","minLength":6,"maxLength":80},"page":{"type":"integer","description":"Requested result page within the endpoint’s documented numbering; retain server pagination metadata. Validation: 0–1000 default0.","minimum":0,"maximum":1000}},"required":["campaignId","sessionToken","ticketCode"]},"example":{"campaignId":"11111111-1111-4111-8111-111111111111","sessionToken":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","ticketCode":"<EXISTING_TICKET_CODE>"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"qr":"data:image/png;base64,<QR_BYTES>"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["my-tickets:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-my-tickets-qr","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Customer ticket QR","description":"Renders a QR only for a ticket found inside the verified customer session and authorized campaign."},"fr":{"title":"QR du billet client","description":"Génère un QR seulement pour un billet de la session client vérifiée et de la campagne autorisée."},"es":{"title":"QR de entrada del cliente","description":"Genera QR solo para entrada de la sesión verificada y campaña autorizada."},"pt":{"title":"QR do bilhete do cliente","description":"Gera QR só para bilhete da sessão verificada e campanha autorizada."},"ar":{"title":"رمز QR لتذكرة العميل","description":"يولّد QR لتذكرة موجودة ضمن جلسة العميل الموثقة والحملة المصرح بها فقط."}}}},"/api/white-label/v1/my-tickets/logout":{"post":{"operationId":"organization-post-my-tickets-logout","tags":["organization"],"summary":"End ticket-access session","description":"Revokes the customer ticket-access session; it does not sign the organizer out of unrelated accounts.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"contact":{"type":"string","description":"Customer email or phone used only to find completed tickets in the authorized campaign before sending an access OTP. Validation: 3–254.","minLength":3,"maxLength":254},"challengeId":{"type":"string","description":"Identifier returned by the matching OTP request; it is bound to that contact, website and campaign. Validation: UUID.","format":"uuid"},"code":{"type":"string","description":"The existing resource credential or verification code required by this endpoint; never publish a real OTP or ticket secret. Validation: 6 digits.","pattern":"^\\d{6}$","minLength":6,"maxLength":6},"sessionToken":{"type":"string","description":"Verified customer ticket-access session bound to the account, website and campaign. Validation: 40–100.","minLength":40,"maxLength":100},"ticketCode":{"type":"string","description":"Existing ticket credential within the authorized campaign, used for lookup or authorized admission. Validation: 6–80.","minLength":6,"maxLength":80},"page":{"type":"integer","description":"Requested result page within the endpoint’s documented numbering; retain server pagination metadata. Validation: 0–1000 default0.","minimum":0,"maximum":1000}},"required":["campaignId","sessionToken"]},"example":{"campaignId":"11111111-1111-4111-8111-111111111111","sessionToken":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"loggedOut":true},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["my-tickets:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-my-tickets-logout","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"End ticket-access session","description":"Revokes the customer ticket-access session; it does not sign the organizer out of unrelated accounts."},"fr":{"title":"Fermer la session billets","description":"Révoque la session client des billets sans déconnecter l’organisateur d’autres comptes."},"es":{"title":"Cerrar sesión de entradas","description":"Revoca sesión de entradas del cliente sin cerrar otras cuentas del organizador."},"pt":{"title":"Terminar sessão de bilhetes","description":"Revoga sessão de bilhetes do cliente sem terminar outras contas do organizador."},"ar":{"title":"إنهاء جلسة التذاكر","description":"يلغي جلسة وصول العميل للتذاكر دون تسجيل خروج المنظم من حسابات أخرى."}}}},"/api/white-label/v1/analytics":{"get":{"operationId":"organization-get-analytics","tags":["organization"],"summary":"Campaign analytics","description":"Returns private account metrics, creator-currency reporting totals and up to20 recent transaction-reporting records.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"metrics":{"campaigns":0,"ticketTypes":0,"transactions":0,"tickets":0,"notifications":0},"totals":{"transactionCount":0},"recentTransactions":[]},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["analytics:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-get-analytics","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Campaign analytics","description":"Returns private account metrics, creator-currency reporting totals and up to20 recent transaction-reporting records."},"fr":{"title":"Analyse des campagnes","description":"Retourne mesures privées, totaux dans la devise de reporting et jusqu’à20 transactions récentes."},"es":{"title":"Análisis de campañas","description":"Devuelve métricas privadas, totales en moneda de informes y hasta20 transacciones recientes."},"pt":{"title":"Análise de campanhas","description":"Devolve métricas privadas, totais na moeda de relatórios e até20 transações recentes."},"ar":{"title":"تحليلات الحملات","description":"يعيد مقاييس الحساب الخاصة ومجاميع عملة التقارير وحتى20 سجل معاملة حديثًا."}}}},"/api/white-label/v1/settings":{"get":{"operationId":"organization-get-settings","tags":["organization"],"summary":"Read settings","description":"Reads permitted organization settings, optionally filtered by categories; private configuration is not a public feed.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}},{"name":"categories","in":"query","required":false,"description":"Configured campaign category or approved settings category, depending on the resource. Validation: category filter.","schema":{"anyOf":[{"type":"string","description":"Configured campaign category or approved settings category, depending on the resource. Validation: category filter."},{"type":"array","description":"Configured campaign category or approved settings category, depending on the resource. Validation: category filter.","items":{"type":"string"}}],"description":"Configured campaign category or approved settings category, depending on the resource. Validation: category filter."}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"branding":{"platformName":"Example organization"}},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["settings:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-get-settings","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Read settings","description":"Reads permitted organization settings, optionally filtered by categories; private configuration is not a public feed."},"fr":{"title":"Lire les paramètres","description":"Lit les paramètres autorisés, éventuellement filtrés par catégories ; ce n’est pas un flux public."},"es":{"title":"Leer configuración","description":"Lee configuración permitida, filtrable por categorías; no es un flujo público."},"pt":{"title":"Ler definições","description":"Lê definições permitidas, filtráveis por categorias; não é um fluxo público."},"ar":{"title":"قراءة الإعدادات","description":"يقرأ إعدادات المنظمة المسموحة مع تصفية اختيارية بالفئات؛ وليست مصدرًا عامًا."}}}},"/api/white-label/v1/settings/{category}":{"patch":{"operationId":"organization-patch-settings-category","tags":["organization"],"summary":"Update allowed settings","description":"Updates one allowed organization settings category and records its configuration version and audit history.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}},{"name":"category","in":"path","required":true,"description":"Configured campaign category or approved settings category, depending on the resource. Validation: UUID or documented resource identifier.","schema":{"type":"string","description":"Configured campaign category or approved settings category, depending on the resource. Validation: UUID or documented resource identifier.","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"config":{"type":"object","description":"Allowed settings payload for the specified category; protected operational policy is still enforced. Validation: allowed settings object."}},"required":["config"]},"example":{"config":{"platformName":"Example organization"}}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"category":"branding","config":{"platformName":"Example organization"}},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["settings:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-patch-settings-category","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Update allowed settings","description":"Updates one allowed organization settings category and records its configuration version and audit history."},"fr":{"title":"Modifier les paramètres autorisés","description":"Modifie une catégorie autorisée et enregistre version de configuration et historique d’audit."},"es":{"title":"Actualizar configuración permitida","description":"Actualiza categoría permitida y registra versión e historial de auditoría."},"pt":{"title":"Atualizar definições permitidas","description":"Atualiza categoria permitida e regista versão e histórico de auditoria."},"ar":{"title":"تحديث الإعدادات المسموحة","description":"يحدّث فئة إعدادات منظمة مسموحة ويسجل نسخة التهيئة وسجل التدقيق."}}}},"/api/white-label/v1/notifications":{"post":{"operationId":"organization-post-notifications","tags":["organization"],"summary":"Queue configured notification","description":"Dispatches an enabled email or SMS notification using the organization’s configured sender/provider and returns the notification record plus delivery result.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"channel":{"type":"string","description":"Delivery or integration channel supported by this operation and the account’s enabled configuration. Validation: email | sms.","enum":["email","sms"]},"eventType":{"type":"string","description":"Configured notification event, subject or data accepted by the organization’s enabled delivery workflow. Validation: 1–120.","minLength":1,"maxLength":120},"recipient":{"type":"string","description":"Destination contact for the requested permitted notification or verification challenge. Validation: 3–255.","minLength":3,"maxLength":255},"subject":{"anyOf":[{"type":"string","description":"Configured notification event, subject or data accepted by the organization’s enabled delivery workflow. Validation: <=255.","maxLength":255},{"type":"null","description":"Configured notification event, subject or data accepted by the organization’s enabled delivery workflow. Validation: <=255."}],"description":"Configured notification event, subject or data accepted by the organization’s enabled delivery workflow. Validation: <=255."},"payload":{"type":"object","description":"Configured notification event, subject or data accepted by the organization’s enabled delivery workflow. Validation: configured event payload."}},"required":["channel","eventType","recipient"]},"example":{"channel":"email","eventType":"<CONFIGURED_EVENT>","recipient":"member@example.com","payload":{}}}}},"responses":{"202":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"record":{"id":"11111111-1111-4111-8111-111111111111"},"result":{}},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["notifications:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-notifications","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Queue configured notification","description":"Dispatches an enabled email or SMS notification using the organization’s configured sender/provider and returns the notification record plus delivery result."},"fr":{"title":"Mettre une notification configurée en attente","description":"Envoie email ou SMS activé avec expéditeur configuré et retourne enregistrement et résultat de livraison."},"es":{"title":"Encolar notificación configurada","description":"Envía email o SMS habilitado con remitente configurado y devuelve registro y resultado de entrega."},"pt":{"title":"Colocar notificação configurada em fila","description":"Envia email ou SMS ativo com remetente configurado e devolve registo e resultado de entrega."},"ar":{"title":"إدراج إشعار مهيأ","description":"يرسل بريدًا أو SMS مفعّلًا بإعدادات المرسل والمزود ويعيد سجل الإشعار ونتيجة التسليم."}}}},"/api/white-label/v1/withdrawals":{"post":{"operationId":"organization-post-withdrawals","tags":["organization"],"summary":"Capability-gated withdrawal","description":"Creates or reuses a server-validated withdrawal only for a private key with explicit withdrawal capability and a stable idempotency key.\n\nOrganization limiter: 120 requests per key and 300 per IP per window; honor Retry-After and X-RateLimit headers.\n\nAvailability is verified from source, not a live production guarantee.\n\nPrivate signing stays on your server. API Version 1 uses signature format v2; it is not API v2.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"OrganizationDomain":[],"OrganizationKeyId":[],"OrganizationSignatureVersion":[],"OrganizationTimestamp":[],"OrganizationNonce":[],"OrganizationSignature":[]}],"parameters":[{"name":"x-white-label-domain","in":"header","required":true,"description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname.","schema":{"type":"string","description":"Verified website hostname used to resolve the approved organization account and bind this request. Validation: verified HTTPS hostname."}},{"name":"x-white-label-key-id","in":"header","required":true,"description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier.","schema":{"type":"string","description":"Identifier extracted from the single issued Private Key value; never send its secret in this header. Validation: issued private key internal identifier."}},{"name":"x-white-label-signature-version","in":"header","required":true,"description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","schema":{"type":"string","description":"Selects the domain-bound signing format; API routes remain Version 1. Validation: 2.","enum":["2"]}},{"name":"x-white-label-timestamp","in":"header","required":true,"description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","schema":{"type":"string","description":"Request signing time in milliseconds, checked against the server clock to reject stale requests. Validation: 13 digit milliseconds; within five minutes.","pattern":"^\\d{13}$","minLength":13,"maxLength":13}},{"name":"x-white-label-nonce","in":"header","required":true,"description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Fresh random signing value recorded by the server to reject replay of a signed request. Validation: fresh 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}},{"name":"x-white-label-signature","in":"header","required":true,"description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","schema":{"type":"string","description":"HMAC-SHA256 of the canonical domain, idempotency key, campaign credential, timestamp, nonce, method, path, sorted query and exact body hash. Validation: lowercase hexadecimal HMAC-SHA256.","pattern":"^[a-f0-9]{64}$"}},{"name":"x-white-label-campaign-key","in":"header","required":false,"description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret.","schema":{"type":"string","description":"Optional complete Campaign Key that narrows a private request to the same authorized campaign. Validation: complete optional scoped keyId:secret."}},{"name":"X-Idempotency-Key","in":"header","required":true,"description":"Stable business-operation identity reused on retries with unchanged request details; different details under the same key are rejected. Validation: 16–128 [A-Za-z0-9_-].","schema":{"type":"string","description":"Stable business-operation identity reused on retries with unchanged request details; different details under the same key are rejected. Validation: 16–128 [A-Za-z0-9_-].","pattern":"^[A-Za-z0-9_-]{16,128}$","minLength":16,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"number","description":"Requested contribution or withdrawal amount in the existing campaign/account currency; the server validates financial authority and final terms. Validation: positive server-validated.","exclusiveMinimum":0},"bank_name":{"type":"string","description":"Approved withdrawal destination details, kept server-side and checked by the existing financial service. Validation: <=120.","maxLength":120},"bank_code":{"type":"string","description":"Approved withdrawal destination details, kept server-side and checked by the existing financial service. Validation: <=40.","maxLength":40},"account_number":{"type":"string","description":"Approved withdrawal destination details, kept server-side and checked by the existing financial service. Validation: <=40.","maxLength":40},"account_name":{"type":"string","description":"Approved withdrawal destination details, kept server-side and checked by the existing financial service. Validation: <=120.","maxLength":120},"metadata":{"type":"object","description":"Additional JSON metadata accepted by the documented schema; it never overrides authorization, prices or account ownership. Validation: JSON object."}},"required":["amount","bank_name","bank_code","account_number","account_name"]},"example":{"amount":10,"bank_name":"<APPROVED_BANK>","bank_code":"<BANK_CODE>","account_number":"<ACCOUNT_NUMBER>","account_name":"Example organization"}}}},"responses":{"201":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{},"requestId":{"type":"string"}},"required":["success","data","requestId"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"},"requestId":"wlapi_example"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"403":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>","requestId":"wlapi_example"}}}}},"x-required-permissions":["withdrawals:write + withdrawal_enabled"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/organization/organization-post-withdrawals","x-source-evidence":["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"],"x-language-metadata":{"en":{"title":"Capability-gated withdrawal","description":"Creates or reuses a server-validated withdrawal only for a private key with explicit withdrawal capability and a stable idempotency key."},"fr":{"title":"Retrait sous capacité explicite","description":"Crée ou réutilise un retrait validé uniquement avec clé privée, capacité explicite et idempotence stable."},"es":{"title":"Retiro con permiso explícito","description":"Crea o reutiliza retiro validado solo con clave privada, capacidad explícita e idempotencia estable."},"pt":{"title":"Levantamento com permissão explícita","description":"Cria ou reutiliza levantamento validado só com chave privada, capacidade explícita e idempotência estável."},"ar":{"title":"سحب بصلاحية صريحة","description":"ينشئ سحبًا متحققًا أو يستعيده لمفتاح خاص بصلاحية سحب صريحة ومفتاح عدم تكرار ثابت فقط."}}}},"/api/white-label/portal/reseller":{"get":{"operationId":"reseller-get-console","tags":["reseller"],"summary":"Reseller account console","description":"Loads the signed-in reseller account console, actor, member relationships and review context after membership checks.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nUse the creator-team member workflow. Reseller access never grants unrestricted database or administrator access.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"ResellerSession":[]}],"parameters":[{"name":"Authorization","in":"header","required":true,"description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token.","schema":{"type":"string","description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token."}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"actor":{"accountId":"11111111-1111-4111-8111-111111111111"},"profile":{"status":"enabled"},"members":[]}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":["settings:read","members:read"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/reseller/reseller-get-console","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/white-label.ts","server/src/white-label/reseller-service.ts","server/src/white-label/schemas.ts"],"x-language-metadata":{"en":{"title":"Reseller account console","description":"Loads the signed-in reseller account console, actor, member relationships and review context after membership checks."},"fr":{"title":"Console du compte revendeur","description":"Charge la console revendeur, acteur, relations de membres et contexte de révision après contrôle d’appartenance."},"es":{"title":"Consola de cuenta revendedora","description":"Carga consola, actor, relaciones de miembros y revisiones tras comprobar pertenencia."},"pt":{"title":"Consola da conta de revenda","description":"Carrega consola, ator, relações de membros e revisões após verificar associação."},"ar":{"title":"وحدة حساب الموزع","description":"يحمّل وحدة حساب الموزع والعامل وعلاقات الأعضاء وسياق المراجعة بعد فحص العضوية."}}}},"/api/white-label/portal/reseller/profile":{"patch":{"operationId":"reseller-patch-profile","tags":["reseller"],"summary":"Update reseller profile","description":"Updates the authorized reseller profile policy, including approval requirements and permitted public signup settings.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nUse the creator-team member workflow. Reseller access never grants unrestricted database or administrator access.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"ResellerSession":[]}],"parameters":[{"name":"Authorization","in":"header","required":true,"description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token.","schema":{"type":"string","description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"Requested supported lifecycle state; account and campaign approval rules still control publication and access. Validation: draft | enabled | suspended | disabled.","enum":["draft","enabled","suspended","disabled"]},"riskLevel":{"type":"string","description":"Authorized reseller policy configuration; SparkGlim oversight and the caller’s capabilities remain enforced. Validation: standard | elevated | restricted.","enum":["standard","elevated","restricted"]},"settlementMode":{"type":"string","description":"Authorized reseller policy configuration; SparkGlim oversight and the caller’s capabilities remain enforced. Validation: sparkglim_supervised | reseller_review_then_sparkglim | sparkglim_only.","enum":["sparkglim_supervised","reseller_review_then_sparkglim","sparkglim_only"]},"requireSubCreatorApproval":{"type":"boolean","description":"Authorized reseller policy configuration; SparkGlim oversight and the caller’s capabilities remain enforced. Validation: server policy."},"requireCampaignApproval":{"type":"boolean","description":"Authorized reseller policy configuration; SparkGlim oversight and the caller’s capabilities remain enforced. Validation: server policy."},"requireWithdrawalApproval":{"type":"boolean","description":"Authorized reseller policy configuration; SparkGlim oversight and the caller’s capabilities remain enforced. Validation: server policy."},"requirePaymentMethodApproval":{"type":"boolean","description":"Authorized reseller policy configuration; SparkGlim oversight and the caller’s capabilities remain enforced. Validation: server policy."},"allowPublicSignup":{"type":"boolean","description":"Authorized reseller policy configuration; SparkGlim oversight and the caller’s capabilities remain enforced. Validation: server policy."},"settings":{"type":"object","description":"Authorized reseller policy configuration; SparkGlim oversight and the caller’s capabilities remain enforced. Validation: JSON settings."}}},"example":{"allowPublicSignup":false}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":["settings:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/reseller/reseller-patch-profile","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/white-label.ts","server/src/white-label/reseller-service.ts","server/src/white-label/schemas.ts"],"x-language-metadata":{"en":{"title":"Update reseller profile","description":"Updates the authorized reseller profile policy, including approval requirements and permitted public signup settings."},"fr":{"title":"Modifier le profil revendeur","description":"Modifie la politique du profil revendeur, dont exigences d’approbation et paramètres d’inscription permis."},"es":{"title":"Actualizar perfil revendedor","description":"Actualiza política del perfil, requisitos de aprobación y registro público permitido."},"pt":{"title":"Atualizar perfil de revenda","description":"Atualiza política do perfil, requisitos de aprovação e registo público permitido."},"ar":{"title":"تحديث ملف الموزع","description":"يحدّث سياسة ملف الموزع المصرح به ومتطلبات الموافقة وإعدادات التسجيل العام المسموحة."}}}},"/api/white-label/portal/reseller/members":{"post":{"operationId":"reseller-post-members","tags":["reseller"],"summary":"Add creator-team member","description":"Adds a member through the existing creator-team workflow and stores the reseller relationship; the member completes normal organizer onboarding.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nUse the creator-team member workflow. Reseller access never grants unrestricted database or administrator access.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"ResellerSession":[]}],"parameters":[{"name":"Authorization","in":"header","required":true,"description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token.","schema":{"type":"string","description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"anyOf":[{"type":"string","description":"Optional existing user association; this operation does not create an unrestricted creator account. Validation: UUID existing user only.","format":"uuid"},{"type":"null","description":"Optional existing user association; this operation does not create an unrestricted creator account. Validation: UUID existing user only."}],"description":"Optional existing user association; this operation does not create an unrestricted creator account. Validation: UUID existing user only."},"creatorId":{"anyOf":[{"type":"string","description":"Authorized creator-team owner for the reseller relationship; defaults to the reseller owner where configured. Validation: UUID authorized owner; defaults reseller creator.","format":"uuid"},{"type":"null","description":"Authorized creator-team owner for the reseller relationship; defaults to the reseller owner where configured. Validation: UUID authorized owner; defaults reseller creator."}],"description":"Authorized creator-team owner for the reseller relationship; defaults to the reseller owner where configured. Validation: UUID authorized owner; defaults reseller creator."},"memberType":{"type":"string","description":"Reseller relationship role; assigned capabilities and creator-team permissions remain separately enforced. Validation: owner | operator | finance | support | sub_creator.","enum":["owner","operator","finance","support","sub_creator"]},"status":{"type":"string","description":"Requested supported lifecycle state; account and campaign approval rules still control publication and access. Validation: invited | pending | active | suspended | revoked.","enum":["invited","pending","active","suspended","revoked"]},"displayName":{"anyOf":[{"type":"string","description":"Public display label for the member or contributor; it does not change account ownership. Validation: 2–160.","minLength":2,"maxLength":160},{"type":"null","description":"Public display label for the member or contributor; it does not change account ownership. Validation: 2–160."}],"description":"Public display label for the member or contributor; it does not change account ownership. Validation: 2–160."},"email":{"anyOf":[{"type":"string","description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email.","format":"email"},{"type":"null","description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email."}],"description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email."},"phone":{"anyOf":[{"type":"string","description":"Member or applicant contact phone used by the existing account workflow. Validation: 8–40.","minLength":8,"maxLength":40},{"type":"null","description":"Member or applicant contact phone used by the existing account workflow. Validation: 8–40."}],"description":"Member or applicant contact phone used by the existing account workflow. Validation: 8–40."},"roles":{"type":"array","description":"Reseller role assignments accepted by the member schema, separately limited by server permissions. Validation: supported reseller roles.","items":{"type":"string"}},"permissions":{"type":"array","description":"Requested supported capabilities, limited by the account policy and caller’s authorization. Validation: supported reseller capabilities.","items":{"type":"string"}},"otpRequired":{"type":"boolean","description":"Controls the supported verification requirement for the resource; it does not bypass server eligibility checks. Validation: default true."},"kycStatus":{"type":"string","description":"Account review state recorded for this reseller relationship; it does not independently authorize payments. Validation: not_required | pending | verified | rejected.","enum":["not_required","pending","verified","rejected"]},"metadata":{"type":"object","description":"Additional JSON metadata accepted by the documented schema; it never overrides authorization, prices or account ownership. Validation: JSON object."}}},"example":{"displayName":"Example member","email":"member@example.com","memberType":"sub_creator","roles":["sub_creator"],"permissions":[]}}}},"responses":{"201":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":["members:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/reseller/reseller-post-members","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/white-label.ts","server/src/white-label/reseller-service.ts","server/src/white-label/schemas.ts"],"x-language-metadata":{"en":{"title":"Add creator-team member","description":"Adds a member through the existing creator-team workflow and stores the reseller relationship; the member completes normal organizer onboarding."},"fr":{"title":"Ajouter un membre d’équipe Créateur","description":"Ajoute un membre via l’équipe Créateur et conserve la relation revendeur ; le membre suit l’intégration organisateur habituelle."},"es":{"title":"Añadir miembro al equipo creador","description":"Añade miembro mediante equipo creador y guarda relación revendedora; completa alta normal de organizador."},"pt":{"title":"Adicionar membro à equipa Criador","description":"Adiciona membro pela equipa Criador e guarda relação de revenda; completa registo normal do organizador."},"ar":{"title":"إضافة عضو فريق منشئ","description":"يضيف عضوًا عبر مسار فريق المنشئ ويحفظ علاقة الموزع؛ ويكمل العضو انضمام المنظم المعتاد."}}}},"/api/white-label/portal/reseller/members/{memberId}":{"patch":{"operationId":"reseller-patch-members-memberId","tags":["reseller"],"summary":"Update member relationship","description":"Updates the reseller relationship and synchronizes the linked authorized creator-team member where present.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nUse the creator-team member workflow. Reseller access never grants unrestricted database or administrator access.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"ResellerSession":[]}],"parameters":[{"name":"Authorization","in":"header","required":true,"description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token.","schema":{"type":"string","description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token."}},{"name":"memberId","in":"path","required":true,"description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID or documented resource identifier.","schema":{"type":"string","description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID or documented resource identifier.","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"anyOf":[{"type":"string","description":"Optional existing user association; this operation does not create an unrestricted creator account. Validation: UUID existing user only.","format":"uuid"},{"type":"null","description":"Optional existing user association; this operation does not create an unrestricted creator account. Validation: UUID existing user only."}],"description":"Optional existing user association; this operation does not create an unrestricted creator account. Validation: UUID existing user only."},"creatorId":{"anyOf":[{"type":"string","description":"Authorized creator-team owner for the reseller relationship; defaults to the reseller owner where configured. Validation: UUID authorized owner; defaults reseller creator.","format":"uuid"},{"type":"null","description":"Authorized creator-team owner for the reseller relationship; defaults to the reseller owner where configured. Validation: UUID authorized owner; defaults reseller creator."}],"description":"Authorized creator-team owner for the reseller relationship; defaults to the reseller owner where configured. Validation: UUID authorized owner; defaults reseller creator."},"memberType":{"type":"string","description":"Reseller relationship role; assigned capabilities and creator-team permissions remain separately enforced. Validation: owner | operator | finance | support | sub_creator.","enum":["owner","operator","finance","support","sub_creator"]},"status":{"type":"string","description":"Requested supported lifecycle state; account and campaign approval rules still control publication and access. Validation: invited | pending | active | suspended | revoked.","enum":["invited","pending","active","suspended","revoked"]},"displayName":{"anyOf":[{"type":"string","description":"Public display label for the member or contributor; it does not change account ownership. Validation: 2–160.","minLength":2,"maxLength":160},{"type":"null","description":"Public display label for the member or contributor; it does not change account ownership. Validation: 2–160."}],"description":"Public display label for the member or contributor; it does not change account ownership. Validation: 2–160."},"email":{"anyOf":[{"type":"string","description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email.","format":"email"},{"type":"null","description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email."}],"description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email."},"phone":{"anyOf":[{"type":"string","description":"Member or applicant contact phone used by the existing account workflow. Validation: 8–40.","minLength":8,"maxLength":40},{"type":"null","description":"Member or applicant contact phone used by the existing account workflow. Validation: 8–40."}],"description":"Member or applicant contact phone used by the existing account workflow. Validation: 8–40."},"roles":{"type":"array","description":"Reseller role assignments accepted by the member schema, separately limited by server permissions. Validation: supported reseller roles.","items":{"type":"string"}},"permissions":{"type":"array","description":"Requested supported capabilities, limited by the account policy and caller’s authorization. Validation: supported reseller capabilities.","items":{"type":"string"}},"otpRequired":{"type":"boolean","description":"Controls the supported verification requirement for the resource; it does not bypass server eligibility checks. Validation: default true."},"kycStatus":{"type":"string","description":"Account review state recorded for this reseller relationship; it does not independently authorize payments. Validation: not_required | pending | verified | rejected.","enum":["not_required","pending","verified","rejected"]},"metadata":{"type":"object","description":"Additional JSON metadata accepted by the documented schema; it never overrides authorization, prices or account ownership. Validation: JSON object."}}},"example":{"displayName":"Example member"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":["members:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/reseller/reseller-patch-members-memberId","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/white-label.ts","server/src/white-label/reseller-service.ts","server/src/white-label/schemas.ts"],"x-language-metadata":{"en":{"title":"Update member relationship","description":"Updates the reseller relationship and synchronizes the linked authorized creator-team member where present."},"fr":{"title":"Modifier la relation du membre","description":"Modifie la relation revendeur et synchronise le membre d’équipe lié lorsqu’il existe."},"es":{"title":"Actualizar relación del miembro","description":"Actualiza relación revendedora y sincroniza miembro autorizado vinculado cuando existe."},"pt":{"title":"Atualizar relação do membro","description":"Atualiza relação de revenda e sincroniza membro autorizado associado quando existe."},"ar":{"title":"تحديث علاقة العضو","description":"يحدّث علاقة الموزع ويزامن عضو فريق المنشئ المصرح والمرتبط عند وجوده."}}}},"/api/white-label/portal/reseller/approval-requests":{"post":{"operationId":"reseller-post-approval-requests","tags":["reseller"],"summary":"Request approval","description":"Records a review request for a supported account resource; escalation and account oversight policy determine the next reviewer.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nUse the creator-team member workflow. Reseller access never grants unrestricted database or administrator access.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"ResellerSession":[]}],"parameters":[{"name":"Authorization","in":"header","required":true,"description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token.","schema":{"type":"string","description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"entityType":{"type":"string","description":"Review-resource classification or supporting evidence retained for the account approval and oversight process. Validation: member | campaign | withdrawal | payout | payment_method | ussd | provider | setting.","enum":["member","campaign","withdrawal","payout","payment_method","ussd","provider","setting"]},"entityId":{"anyOf":[{"type":"string","description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: <=160.","maxLength":160},{"type":"null","description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: <=160."}],"description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: <=160."},"sparkglimReviewRequired":{"type":"boolean","description":"Review-resource classification or supporting evidence retained for the account approval and oversight process. Validation: default false."},"riskScore":{"type":"integer","description":"Review-resource classification or supporting evidence retained for the account approval and oversight process. Validation: 0–100.","minimum":0,"maximum":100},"reason":{"anyOf":[{"type":"string","description":"Explanation retained with the account’s approval or review record. Validation: <=2000.","maxLength":2000},{"type":"null","description":"Explanation retained with the account’s approval or review record. Validation: <=2000."}],"description":"Explanation retained with the account’s approval or review record. Validation: <=2000."},"requestPayload":{"type":"object","description":"Review-resource classification or supporting evidence retained for the account approval and oversight process. Validation: JSON object."},"metadata":{"type":"object","description":"Additional JSON metadata accepted by the documented schema; it never overrides authorization, prices or account ownership. Validation: JSON object."}},"required":["entityType"]},"example":{"entityType":"campaign","reason":"Example approval request","requestPayload":{}}}}},"responses":{"201":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":["oversight:escalate"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/reseller/reseller-post-approval-requests","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/white-label.ts","server/src/white-label/reseller-service.ts","server/src/white-label/schemas.ts"],"x-language-metadata":{"en":{"title":"Request approval","description":"Records a review request for a supported account resource; escalation and account oversight policy determine the next reviewer."},"fr":{"title":"Demander une approbation","description":"Enregistre une demande de révision d’une ressource prise en charge ; la politique détermine le réviseur."},"es":{"title":"Solicitar aprobación","description":"Registra solicitud de revisión de recurso admitido; la política determina el siguiente revisor."},"pt":{"title":"Pedir aprovação","description":"Regista pedido de revisão de recurso suportado; a política determina o revisor seguinte."},"ar":{"title":"طلب موافقة","description":"يسجل طلب مراجعة لمورد حساب مدعوم؛ وتحدد سياسة التصعيد والإشراف المراجع التالي."}}}},"/api/white-label/portal/reseller/approval-requests/{requestId}/decision":{"post":{"operationId":"reseller-post-approval-requests-requestId-decision","tags":["reseller"],"summary":"Record authorized decision","description":"Records an authorized decision on an existing reseller approval request without bypassing SparkGlim oversight.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nUse the creator-team member workflow. Reseller access never grants unrestricted database or administrator access.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"ResellerSession":[]}],"parameters":[{"name":"Authorization","in":"header","required":true,"description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token.","schema":{"type":"string","description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token."}},{"name":"requestId","in":"path","required":true,"description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID or documented resource identifier.","schema":{"type":"string","description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID or documented resource identifier.","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"Requested supported lifecycle state; account and campaign approval rules still control publication and access. Validation: approved | rejected | changes_requested | escalated | cancelled.","enum":["approved","rejected","changes_requested","escalated","cancelled"]},"reason":{"anyOf":[{"type":"string","description":"Explanation retained with the account’s approval or review record. Validation: <=2000.","maxLength":2000},{"type":"null","description":"Explanation retained with the account’s approval or review record. Validation: <=2000."}],"description":"Explanation retained with the account’s approval or review record. Validation: <=2000."},"decisionPayload":{"type":"object","description":"Review-resource classification or supporting evidence retained for the account approval and oversight process. Validation: JSON object."}},"required":["status"]},"example":{"status":"changes_requested","reason":"Example review comment"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":["campaigns:approve"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/reseller/reseller-post-approval-requests-requestId-decision","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/white-label.ts","server/src/white-label/reseller-service.ts","server/src/white-label/schemas.ts"],"x-language-metadata":{"en":{"title":"Record authorized decision","description":"Records an authorized decision on an existing reseller approval request without bypassing SparkGlim oversight."},"fr":{"title":"Enregistrer une décision autorisée","description":"Enregistre une décision autorisée sur une demande existante sans contourner la supervision SparkGlim."},"es":{"title":"Registrar decisión autorizada","description":"Registra decisión autorizada sobre solicitud existente sin eludir supervisión SparkGlim."},"pt":{"title":"Registar decisão autorizada","description":"Regista decisão autorizada sobre pedido existente sem contornar supervisão SparkGlim."},"ar":{"title":"تسجيل قرار مصرح","description":"يسجل قرارًا مصرحًا على طلب موافقة قائم دون تجاوز إشراف SparkGlim."}}}},"/api/white-label/portal/reseller/payment-methods":{"post":{"operationId":"reseller-post-payment-methods","tags":["reseller"],"summary":"Configure approved payment method","description":"Creates a reseller payment-method configuration under the assigned payment permission and approval policy; it does not enable arbitrary providers.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nUse the creator-team member workflow. Reseller access never grants unrestricted database or administrator access.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"ResellerSession":[]}],"parameters":[{"name":"Authorization","in":"header","required":true,"description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token.","schema":{"type":"string","description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"providerType":{"type":"string","description":"Approved reseller payment-method configuration; sensitive provider details remain protected by the server. Validation: paystack | expresspay | hubtel | manual.","enum":["paystack","expresspay","hubtel","manual"]},"methodType":{"type":"string","description":"Approved reseller payment-method configuration; sensitive provider details remain protected by the server. Validation: bank | mobile_money | card | wallet.","enum":["bank","mobile_money","card","wallet"]},"ownerMemberId":{"anyOf":[{"type":"string","description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID.","format":"uuid"},{"type":"null","description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID."}],"description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID."},"ownerCreatorId":{"anyOf":[{"type":"string","description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID.","format":"uuid"},{"type":"null","description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID."}],"description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID."},"label":{"anyOf":[{"type":"string","description":"Approved reseller payment-method configuration; sensitive provider details remain protected by the server. Validation: <=120.","maxLength":120},{"type":"null","description":"Approved reseller payment-method configuration; sensitive provider details remain protected by the server. Validation: <=120."}],"description":"Approved reseller payment-method configuration; sensitive provider details remain protected by the server. Validation: <=120."},"publicDetails":{"type":"object","description":"Approved reseller payment-method configuration; sensitive provider details remain protected by the server. Validation: JSON object."},"encryptedDetails":{"type":"object","description":"Approved reseller payment-method configuration; sensitive provider details remain protected by the server. Validation: server-protected configuration; never publish credentials."},"metadata":{"type":"object","description":"Additional JSON metadata accepted by the documented schema; it never overrides authorization, prices or account ownership. Validation: JSON object."}},"required":["providerType","methodType"]},"example":{"providerType":"manual","methodType":"bank","label":"Example approved method"}}}},"responses":{"201":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":["payments:write"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/reseller/reseller-post-payment-methods","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/white-label.ts","server/src/white-label/reseller-service.ts","server/src/white-label/schemas.ts"],"x-language-metadata":{"en":{"title":"Configure approved payment method","description":"Creates a reseller payment-method configuration under the assigned payment permission and approval policy; it does not enable arbitrary providers."},"fr":{"title":"Configurer un moyen de paiement approuvé","description":"Crée une configuration de paiement sous permission et politique d’approbation ; n’active pas de prestataires arbitraires."},"es":{"title":"Configurar método de pago aprobado","description":"Crea configuración de pago con permisos y aprobación; no habilita proveedores arbitrarios."},"pt":{"title":"Configurar método de pagamento aprovado","description":"Cria configuração de pagamento com permissões e aprovação; não ativa prestadores arbitrários."},"ar":{"title":"تهيئة وسيلة دفع معتمدة","description":"ينشئ تهيئة وسيلة دفع للموزع ضمن الصلاحية وسياسة الموافقة؛ ولا يفعّل مزودين عشوائيين."}}}},"/api/white-label/portal/reseller/payout-rules":{"post":{"operationId":"reseller-post-payout-rules","tags":["reseller"],"summary":"Configure payout rule","description":"Creates or updates an account-scoped payout rule after withdrawals:approve authorization and the existing financial policy checks.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nUse the creator-team member workflow. Reseller access never grants unrestricted database or administrator access.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"ResellerSession":[]}],"parameters":[{"name":"Authorization","in":"header","required":true,"description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token.","schema":{"type":"string","description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ownerMemberId":{"anyOf":[{"type":"string","description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID.","format":"uuid"},{"type":"null","description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID."}],"description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID."},"ownerCreatorId":{"anyOf":[{"type":"string","description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID.","format":"uuid"},{"type":"null","description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID."}],"description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID."},"status":{"type":"string","description":"Requested supported lifecycle state; account and campaign approval rules still control publication and access. Validation: active | paused | revoked.","enum":["active","paused","revoked"]},"currency":{"type":"string","description":"Account-scoped payout policy value; the server retains authority over balances, fees, approvals and settlement. Validation: ISO3.","pattern":"^[A-Za-z]{3}$"},"resellerFeeRate":{"type":"number","description":"Account-scoped payout policy value; the server retains authority over balances, fees, approvals and settlement. Validation: >=0.","minimum":0},"sparkglimFeeRate":{"type":"number","description":"Account-scoped payout policy value; the server retains authority over balances, fees, approvals and settlement. Validation: >=0.","minimum":0},"payoutHoldHours":{"type":"integer","description":"Account-scoped payout policy value; the server retains authority over balances, fees, approvals and settlement. Validation: >=0.","minimum":0},"minWithdrawalAmount":{"type":"number","description":"Account-scoped payout policy value; the server retains authority over balances, fees, approvals and settlement. Validation: >=0.","minimum":0},"maxWithdrawalAmount":{"anyOf":[{"type":"number","description":"Account-scoped payout policy value; the server retains authority over balances, fees, approvals and settlement. Validation: >=0.","minimum":0},{"type":"null","description":"Account-scoped payout policy value; the server retains authority over balances, fees, approvals and settlement. Validation: >=0."}],"description":"Account-scoped payout policy value; the server retains authority over balances, fees, approvals and settlement. Validation: >=0."},"autoEscalateAboveAmount":{"anyOf":[{"type":"number","description":"Account-scoped payout policy value; the server retains authority over balances, fees, approvals and settlement. Validation: >=0.","minimum":0},{"type":"null","description":"Account-scoped payout policy value; the server retains authority over balances, fees, approvals and settlement. Validation: >=0."}],"description":"Account-scoped payout policy value; the server retains authority over balances, fees, approvals and settlement. Validation: >=0."},"metadata":{"type":"object","description":"Additional JSON metadata accepted by the documented schema; it never overrides authorization, prices or account ownership. Validation: JSON object."}}},"example":{"currency":"GHS","payoutHoldHours":24,"minWithdrawalAmount":0}}}},"responses":{"201":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":["withdrawals:approve"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/reseller/reseller-post-payout-rules","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/white-label.ts","server/src/white-label/reseller-service.ts","server/src/white-label/schemas.ts"],"x-language-metadata":{"en":{"title":"Configure payout rule","description":"Creates or updates an account-scoped payout rule after withdrawals:approve authorization and the existing financial policy checks."},"fr":{"title":"Configurer une règle de versement","description":"Crée ou modifie une règle de versement après autorisation withdrawals:approve et contrôles financiers existants."},"es":{"title":"Configurar regla de desembolso","description":"Crea o actualiza regla de desembolso tras permiso withdrawals:approve y controles financieros existentes."},"pt":{"title":"Configurar regra de pagamento","description":"Cria ou atualiza regra de pagamento após permissão withdrawals:approve e controlos financeiros existentes."},"ar":{"title":"تهيئة قاعدة صرف","description":"ينشئ قاعدة صرف للحساب أو يحدّثها بعد صلاحية withdrawals:approve وضوابط السياسة المالية."}}}},"/api/white-label/portal/reseller/otp/send":{"post":{"operationId":"reseller-post-otp-send","tags":["reseller"],"summary":"Request configured OTP","description":"Starts an account-scoped verification challenge using an enabled delivery channel and records its expiry and delivery state.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nUse the creator-team member workflow. Reseller access never grants unrestricted database or administrator access.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"ResellerSession":[]}],"parameters":[{"name":"Authorization","in":"header","required":true,"description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token.","schema":{"type":"string","description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"channel":{"type":"string","description":"Delivery or integration channel supported by this operation and the account’s enabled configuration. Validation: sms | email | whatsapp.","enum":["sms","email","whatsapp"]},"recipient":{"type":"string","description":"Destination contact for the requested permitted notification or verification challenge. Validation: 3–255.","minLength":3,"maxLength":255},"purpose":{"type":"string","description":"Supported verification purpose, bound to the requesting account and OTP challenge. Validation: login | signup | withdrawal_approval | payment_method_verification | campaign_approval.","enum":["login","signup","withdrawal_approval","payment_method_verification","campaign_approval"]},"memberId":{"anyOf":[{"type":"string","description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID.","format":"uuid"},{"type":"null","description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID."}],"description":"Existing account-scoped relationship or review record; ownership and required capabilities are checked on the server. Validation: UUID."},"metadata":{"type":"object","description":"Additional JSON metadata accepted by the documented schema; it never overrides authorization, prices or account ownership. Validation: JSON object."}},"required":["channel","recipient","purpose"]},"example":{"channel":"email","recipient":"member@example.com","purpose":"login"}}}},"responses":{"201":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending","expiresAt":"2030-01-01T00:10:00.000Z","source":"sms_verification_codes"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":["otp:send"],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/reseller/reseller-post-otp-send","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/white-label.ts","server/src/white-label/reseller-service.ts","server/src/white-label/schemas.ts"],"x-language-metadata":{"en":{"title":"Request configured OTP","description":"Starts an account-scoped verification challenge using an enabled delivery channel and records its expiry and delivery state."},"fr":{"title":"Demander un code configuré","description":"Démarre un défi de vérification du compte avec un canal activé et enregistre expiration et livraison."},"es":{"title":"Solicitar OTP configurado","description":"Inicia desafío de cuenta con canal habilitado y registra caducidad y entrega."},"pt":{"title":"Pedir OTP configurado","description":"Inicia desafio de conta com canal ativo e regista validade e entrega."},"ar":{"title":"طلب رمز تحقق مهيأ","description":"يبدأ تحدي تحقق خاصًا بالحساب عبر قناة مفعلة ويسجل انتهاءه وحالة تسليمه."}}}},"/api/white-label/portal/reseller/otp/{challengeId}/verify":{"post":{"operationId":"reseller-post-otp-challengeId-verify","tags":["reseller"],"summary":"Verify OTP challenge","description":"Validates an unexpired challenge belonging to the authorized reseller account, marking only that challenge verified.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nUse the creator-team member workflow. Reseller access never grants unrestricted database or administrator access.","servers":[{"url":"https://api.sparkglim.net"}],"security":[{"ResellerSession":[]}],"parameters":[{"name":"Authorization","in":"header","required":true,"description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token.","schema":{"type":"string","description":"Existing SparkGlim bearer session; server account membership and assigned capabilities still authorize each operation. Validation: Bearer existing authenticated session token."}},{"name":"challengeId","in":"path","required":true,"description":"Identifier returned by the matching OTP request; it is bound to that contact, website and campaign. Validation: UUID or documented resource identifier.","schema":{"type":"string","description":"Identifier returned by the matching OTP request; it is bound to that contact, website and campaign. Validation: UUID or documented resource identifier.","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"The existing resource credential or verification code required by this endpoint; never publish a real OTP or ticket secret. Validation: 4–12 digits.","pattern":"^\\d{4,12}$","minLength":4,"maxLength":12}},"required":["code"]},"example":{"code":"000000"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"verified","source":"sms_verification_codes"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"401":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/reseller/reseller-post-otp-challengeId-verify","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/white-label.ts","server/src/white-label/reseller-service.ts","server/src/white-label/schemas.ts"],"x-language-metadata":{"en":{"title":"Verify OTP challenge","description":"Validates an unexpired challenge belonging to the authorized reseller account, marking only that challenge verified."},"fr":{"title":"Vérifier le code","description":"Valide un défi non expiré appartenant au compte autorisé et marque seulement ce défi comme vérifié."},"es":{"title":"Verificar desafío OTP","description":"Valida desafío vigente de la cuenta autorizada y verifica solo ese desafío."},"pt":{"title":"Verificar desafio OTP","description":"Valida desafio válido da conta autorizada e verifica só esse desafio."},"ar":{"title":"التحقق من تحدي الرمز","description":"يتحقق من تحدٍّ غير منتهٍ تابع لحساب الموزع المصرح ويؤشر ذلك التحدي وحده كموثق."}}}},"/api/public/tickets/purchase":{"post":{"operationId":"public-post-api-public-tickets-purchase","tags":["public"],"summary":"Start ticket purchase","description":"Validates campaign ticket, quantity, required buyer details and browser protection, then returns the existing server checkout or free-ticket result.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nOpen the returned checkout URL. SparkGlim Server owns prices, methods, payment verification and fulfillment; browser returns are navigation only.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"ticket_id":{"type":"string","description":"The selected ticket type belonging to the specified campaign; server checks status, capacity and price. Validation: UUID.","format":"uuid"},"quantity":{"type":"integer","description":"Number of tickets requested; inventory and per-person purchase limits remain server-enforced. Validation: 1–100.","minimum":1,"maximum":100},"phone_number":{"type":"string","description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: nonempty valid phone.","minLength":1},"email":{"type":"string","description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email.","format":"email"},"discount_code":{"type":"string","description":"Existing campaign-specific discount or invitation credential, revalidated by the server before purchasing. Validation: trimmed nonempty."},"invite_code":{"type":"string","description":"Existing campaign-specific discount or invitation credential, revalidated by the server before purchasing. Validation: trimmed nonempty."},"luggage_quantity":{"type":"integer","description":"Quantity of luggage in an event that actually supports the configured luggage option. Validation: >=0.","minimum":0},"attendee_information":{"type":"object","description":"Answers matching the actual campaign-specific fields, required values and supported options. Validation: string values matching configured fields."},"payment_channel":{"type":"string","description":"Optional channel preference; only methods enabled for the real selling country, currency and merchant may be used. Validation: card | mobile_money | apple_pay | bank_transfer | crypto; availability is server-controlled.","enum":["card","mobile_money","apple_pay","bank_transfer","crypto"]},"network_code":{"type":"string","description":"Configured mobile network selection where the chosen payment channel requires it. Validation: configured network."},"is_app":{"type":"boolean","description":"Existing caller context used to select Web or User App configuration; it grants no extra permissions. Validation: client context."},"web_abuse_context":{"type":"object","description":"Existing browser/device protection payload required before public checkout initialization; not a replacement for server authorization. Validation: strict object; device_details JSON <=12000 characters.","properties":{"device_id":{"type":"string","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160.","minLength":12,"maxLength":160},"device_fingerprint":{"type":"string","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160.","minLength":12,"maxLength":160},"browser_signature":{"anyOf":[{"type":"string","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160.","minLength":12,"maxLength":160},{"type":"null","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160."}],"description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160."},"hardware_signature":{"anyOf":[{"type":"string","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160.","minLength":12,"maxLength":160},{"type":"null","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160."}],"description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160."},"device_details":{"type":"object","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: JSON object."},"client_pattern_detected":{"type":"boolean","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: existing device protection."}},"required":["device_id","device_fingerprint"],"additionalProperties":false},"client_attempt_id":{"type":"string","description":"Stable client operation identifier used to reuse an existing attempt and reject mismatched retries. Validation: stable normalized operation identity."},"return_path":{"type":"string","description":"Relative return destination on the verified current website after centralized checkout. Validation: same-origin relative path; no // or backslash."}},"required":["campaign_id","ticket_id","quantity","phone_number","web_abuse_context"]},"example":{"campaign_id":"11111111-1111-4111-8111-111111111111","ticket_id":"22222222-2222-4222-8222-222222222222","quantity":1,"phone_number":"+233200000000","web_abuse_context":{"device_id":"<EXISTING_DEVICE_ID>","device_fingerprint":"<EXISTING_DEVICE_FINGERPRINT>"},"client_attempt_id":"example_stable_attempt_0001"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"409":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"502":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-post-api-public-tickets-purchase","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/public.ts"],"x-language-metadata":{"en":{"title":"Start ticket purchase","description":"Validates campaign ticket, quantity, required buyer details and browser protection, then returns the existing server checkout or free-ticket result."},"fr":{"title":"Démarrer un achat de billets","description":"Valide billet, quantité, acheteur et protection navigateur, puis retourne le paiement serveur ou résultat gratuit existant."},"es":{"title":"Iniciar compra de entradas","description":"Valida entrada, cantidad, comprador y protección del navegador; devuelve pago del servidor o resultado gratuito."},"pt":{"title":"Iniciar compra de bilhetes","description":"Valida bilhete, quantidade, comprador e proteção do navegador; devolve pagamento do servidor ou resultado gratuito."},"ar":{"title":"بدء شراء التذاكر","description":"يتحقق من التذكرة والعدد والمشتري وحماية المتصفح ثم يعيد دفع الخادم القائم أو نتيجة التذكرة المجانية."}}}},"/api/public/vote":{"post":{"operationId":"public-post-api-public-vote","tags":["public"],"summary":"Start public vote","description":"Validates a public voting campaign, eligible nominee, supported vote quantity and browser protection before starting centralized checkout.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nOpen the returned checkout URL. SparkGlim Server owns prices, methods, payment verification and fulfillment; browser returns are navigation only.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"participant_id":{"type":"string","description":"The nominee selected within this campaign; approval and campaign rules are checked by the server. Validation: UUID.","format":"uuid"},"vote_count":{"type":"integer","description":"Number of votes requested for the selected nominee; SparkGlim Server determines the valid price and records completed votes. Validation: 1–100.","minimum":1,"maximum":100},"phone_number":{"type":"string","description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: nonempty.","minLength":1},"email":{"type":"string","description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email.","format":"email"},"payment_channel":{"type":"string","description":"Optional channel preference; only methods enabled for the real selling country, currency and merchant may be used. Validation: configured method only."},"network_code":{"type":"string","description":"Configured mobile network selection where the chosen payment channel requires it. Validation: configured network."},"is_app":{"type":"boolean","description":"Existing caller context used to select Web or User App configuration; it grants no extra permissions. Validation: client context."},"web_abuse_context":{"type":"object","description":"Existing browser/device protection payload required before public checkout initialization; not a replacement for server authorization. Validation: strict object; device_details JSON <=12000 characters.","properties":{"device_id":{"type":"string","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160.","minLength":12,"maxLength":160},"device_fingerprint":{"type":"string","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160.","minLength":12,"maxLength":160},"browser_signature":{"anyOf":[{"type":"string","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160.","minLength":12,"maxLength":160},{"type":"null","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160."}],"description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160."},"hardware_signature":{"anyOf":[{"type":"string","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160.","minLength":12,"maxLength":160},{"type":"null","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160."}],"description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160."},"device_details":{"type":"object","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: JSON object."},"client_pattern_detected":{"type":"boolean","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: existing device protection."}},"required":["device_id","device_fingerprint"],"additionalProperties":false},"client_attempt_id":{"type":"string","description":"Stable client operation identifier used to reuse an existing attempt and reject mismatched retries. Validation: stable normalized operation identity."},"return_path":{"type":"string","description":"Relative return destination on the verified current website after centralized checkout. Validation: same-origin relative path; no // or backslash."}},"required":["campaign_id","participant_id","vote_count","phone_number","web_abuse_context"]},"example":{"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"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"409":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"502":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-post-api-public-vote","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/public.ts"],"x-language-metadata":{"en":{"title":"Start public vote","description":"Validates a public voting campaign, eligible nominee, supported vote quantity and browser protection before starting centralized checkout."},"fr":{"title":"Démarrer un vote public","description":"Valide campagne publique, candidat admissible, quantité et protection navigateur avant le paiement centralisé."},"es":{"title":"Iniciar voto público","description":"Valida campaña pública, candidato permitido, cantidad y protección antes del pago centralizado."},"pt":{"title":"Iniciar voto público","description":"Valida campanha pública, nomeado elegível, quantidade e proteção antes do pagamento central."},"ar":{"title":"بدء تصويت عام","description":"يتحقق من حملة التصويت العامة والمرشح المؤهل والعدد والحماية قبل بدء الدفع المركزي."}}}},"/api/public/donate":{"post":{"operationId":"public-post-api-public-donate","tags":["public"],"summary":"Start public donation","description":"Starts a donation for the selected fundraiser after validating requested amount, campaign rules and browser protection; this is not a completed contribution.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nOpen the returned checkout URL. SparkGlim Server owns prices, methods, payment verification and fulfillment; browser returns are navigation only.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaign_id":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID.","format":"uuid"},"amount":{"type":"number","description":"Requested contribution or withdrawal amount in the existing campaign/account currency; the server validates financial authority and final terms. Validation: 1–1000000; increments 0.01 in campaign currency.","minimum":1,"maximum":1000000,"multipleOf":0.01},"donor_country_code":{"type":"string","description":"Donor country context, separate from the fundraiser’s selling country and currency. Validation: uppercase ISO2.","pattern":"^[A-Z]{2}$"},"email":{"type":"string","description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email.","format":"email"},"phone_number":{"type":"string","description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: valid phone when channel requires."},"donor_name":{"type":"string","description":"Public display label for the member or contributor; it does not change account ownership. Validation: trimmed."},"anonymous":{"type":"boolean","description":"Requests the existing anonymous-contribution behavior; conflicting anonymity fields must not be sent. Validation: do not conflict with is_anonymous."},"is_anonymous":{"type":"boolean","description":"Requests the existing anonymous-contribution behavior; conflicting anonymity fields must not be sent. Validation: do not conflict with anonymous."},"custom_data":{"type":"object","description":"Answers matching the actual campaign-specific fields, required values and supported options. Validation: configured custom fields."},"payment_channel":{"type":"string","description":"Optional channel preference; only methods enabled for the real selling country, currency and merchant may be used. Validation: configured method only."},"network_code":{"type":"string","description":"Configured mobile network selection where the chosen payment channel requires it. Validation: configured network."},"is_app":{"type":"boolean","description":"Existing caller context used to select Web or User App configuration; it grants no extra permissions. Validation: client context."},"web_abuse_context":{"type":"object","description":"Existing browser/device protection payload required before public checkout initialization; not a replacement for server authorization. Validation: strict object; device_details JSON <=12000 characters.","properties":{"device_id":{"type":"string","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160.","minLength":12,"maxLength":160},"device_fingerprint":{"type":"string","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160.","minLength":12,"maxLength":160},"browser_signature":{"anyOf":[{"type":"string","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160.","minLength":12,"maxLength":160},{"type":"null","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160."}],"description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160."},"hardware_signature":{"anyOf":[{"type":"string","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160.","minLength":12,"maxLength":160},{"type":"null","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160."}],"description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: 12–160."},"device_details":{"type":"object","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: JSON object."},"client_pattern_detected":{"type":"boolean","description":"Existing browser/device protection signal accepted by the current public checkout protection schema. Validation: existing device protection."}},"required":["device_id","device_fingerprint"],"additionalProperties":false},"client_attempt_id":{"type":"string","description":"Stable client operation identifier used to reuse an existing attempt and reject mismatched retries. Validation: stable normalized operation identity."},"return_path":{"type":"string","description":"Relative return destination on the verified current website after centralized checkout. Validation: same-origin relative path; no // or backslash."}},"required":["campaign_id","amount","web_abuse_context"]},"example":{"campaign_id":"11111111-1111-4111-8111-111111111111","amount":10,"anonymous":true,"web_abuse_context":{"device_id":"<EXISTING_DEVICE_ID>","device_fingerprint":"<EXISTING_DEVICE_FINGERPRINT>"},"client_attempt_id":"example_stable_attempt_0001"}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"id":"11111111-1111-4111-8111-111111111111","status":"pending"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"409":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"502":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-post-api-public-donate","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/public.ts"],"x-language-metadata":{"en":{"title":"Start public donation","description":"Starts a donation for the selected fundraiser after validating requested amount, campaign rules and browser protection; this is not a completed contribution."},"fr":{"title":"Démarrer un don public","description":"Démarre un don après validation du montant, des règles et de la protection ; ce n’est pas une contribution achevée."},"es":{"title":"Iniciar donativo público","description":"Inicia donativo tras validar importe, reglas y protección; no es contribución completada."},"pt":{"title":"Iniciar donativo público","description":"Inicia donativo após validar montante, regras e proteção; não é contribuição concluída."},"ar":{"title":"بدء تبرع عام","description":"يبدأ تبرعًا بعد التحقق من المبلغ والقواعد والحماية؛ ولا يمثل مساهمة مكتملة."}}}},"/api/public/payment-methods/{campaignId}":{"get":{"operationId":"public-get-api-public-payment-methods-campaignId","tags":["public"],"summary":"Campaign payment options","description":"Lists enabled checkout method names for an approved campaign’s selling country, currency and client context without exposing provider secrets.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nOpen the returned checkout URL. SparkGlim Server owns prices, methods, payment verification and fulfillment; browser returns are navigation only.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[{"name":"campaignId","in":"path","required":true,"description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID or documented resource identifier.","schema":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID or documented resource identifier.","format":"uuid"}},{"name":"app_type","in":"query","required":false,"description":"Existing caller context used to select Web or User App configuration; it grants no extra permissions. Validation: user selects user_app; otherwise web.","schema":{"type":"string","description":"Existing caller context used to select Web or User App configuration; it grants no extra permissions. Validation: user selects user_app; otherwise web."}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"methods":[],"currency":"GHS","country":"GH"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"502":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-get-api-public-payment-methods-campaignId","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/public.ts"],"x-language-metadata":{"en":{"title":"Campaign payment options","description":"Lists enabled checkout method names for an approved campaign’s selling country, currency and client context without exposing provider secrets."},"fr":{"title":"Options de paiement de la campagne","description":"Liste les moyens activés pour pays vendeur, devise et client de la campagne approuvée, sans secrets."},"es":{"title":"Opciones de pago de campaña","description":"Lista métodos activos para país vendedor, moneda y cliente de campaña aprobada sin secretos."},"pt":{"title":"Opções de pagamento da campanha","description":"Lista métodos ativos para país de venda, moeda e cliente de campanha aprovada sem segredos."},"ar":{"title":"خيارات دفع الحملة","description":"يسرد أسماء وسائل الدفع المفعلة لبلد بيع الحملة المعتمدة وعملتها وسياق العميل دون أسرار المزودين."}}}},"/api/public/tickets/public-verify":{"get":{"operationId":"public-get-api-public-tickets-public-verify","tags":["public"],"summary":"Public ticket verification","description":"Forwards bearer ticket-credential verification to the Web ticket reader and preserves its status and payload; it does not perform admission.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nOpen the returned checkout URL. SparkGlim Server owns prices, methods, payment verification and fulfillment; browser returns are navigation only.\n\nTreat ticket codes as bearer credentials. Current handler can reveal attendee details after check-in; public verification never authorizes check-in.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[{"name":"code","in":"query","required":true,"description":"The existing resource credential or verification code required by this endpoint; never publish a real OTP or ticket secret. Validation: valid ticket credential.","schema":{"type":"string","description":"The existing resource credential or verification code required by this endpoint; never publish a real OTP or ticket secret. Validation: valid ticket credential."}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"ticket_code":"<TICKET_CODE>","checked_in":false,"checked_in_at":null,"details_revealed":false,"campaign":{"title":"Example event","slug":"example-event","venue":"Example venue"},"ticket_name":"Example ticket"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"502":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-get-api-public-tickets-public-verify","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/public.ts"],"x-language-metadata":{"en":{"title":"Public ticket verification","description":"Forwards bearer ticket-credential verification to the Web ticket reader and preserves its status and payload; it does not perform admission."},"fr":{"title":"Vérification publique des billets","description":"Transmet la vérification du billet au lecteur Web et conserve statut et résultat ; n’effectue pas l’entrée."},"es":{"title":"Verificación pública de entradas","description":"Reenvía verificación de credencial al lector web y conserva estado y resultado; no registra admisión."},"pt":{"title":"Verificação pública de bilhetes","description":"Encaminha verificação da credencial ao leitor Web e mantém estado e resultado; não regista admissão."},"ar":{"title":"التحقق العام من التذاكر","description":"يمرر التحقق من اعتماد التذكرة إلى قارئ الويب ويحفظ الحالة والبيانات؛ ولا يسجل الدخول."}}}},"/api/public/blog":{"get":{"operationId":"public-get-api-public-blog","tags":["public"],"summary":"Published articles","description":"Lists published articles with search, category, featured, limit and offset filters, returning the exact total and list pagination.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nOpen the returned checkout URL. SparkGlim Server owns prices, methods, payment verification and fulfillment; browser returns are navigation only.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[{"name":"category","in":"query","required":false,"description":"Configured campaign category or approved settings category, depending on the resource. Validation: category slug.","schema":{"type":"string","description":"Configured campaign category or approved settings category, depending on the resource. Validation: category slug."}},{"name":"search","in":"query","required":false,"description":"Text filter applied to the existing published records selected by this endpoint. Validation: search text.","schema":{"type":"string","description":"Text filter applied to the existing published records selected by this endpoint. Validation: search text."}},{"name":"featured","in":"query","required":false,"description":"Requests the existing featured-article filter when its value is true. Validation: true.","schema":{"type":"string","description":"Requests the existing featured-article filter when its value is true. Validation: true."}},{"name":"limit","in":"query","required":false,"description":"Maximum records returned in this page; the endpoint’s fixed bound applies. Validation: 1–30 default10.","schema":{"type":"number","description":"Maximum records returned in this page; the endpoint’s fixed bound applies. Validation: 1–30 default10.","minimum":1,"maximum":30}},{"name":"offset","in":"query","required":false,"description":"Zero-based number of published article records to skip before the requested page. Validation: >=0 default0.","schema":{"type":"number","description":"Zero-based number of published article records to skip before the requested page. Validation: >=0 default0.","minimum":0}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":[],"count":0,"limit":10,"offset":0}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"502":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-get-api-public-blog","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/public.ts"],"x-language-metadata":{"en":{"title":"Published articles","description":"Lists published articles with search, category, featured, limit and offset filters, returning the exact total and list pagination."},"fr":{"title":"Articles publiés","description":"Liste les articles publiés avec filtres de recherche, catégorie, mise en avant et pagination exacte."},"es":{"title":"Artículos publicados","description":"Lista artículos publicados con búsqueda, categoría, destacados y paginación exacta."},"pt":{"title":"Artigos publicados","description":"Lista artigos publicados com pesquisa, categoria, destaques e paginação exata."},"ar":{"title":"المقالات المنشورة","description":"يسرد المقالات المنشورة مع البحث والفئة والتمييز وحد الصفحة والإزاحة وإجمالي دقيق."}}}},"/api/public/blog/categories":{"get":{"operationId":"public-get-api-public-blog-categories","tags":["public"],"summary":"Article categories","description":"Lists active article categories ordered by configured position and post count.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nOpen the returned checkout URL. SparkGlim Server owns prices, methods, payment verification and fulfillment; browser returns are navigation only.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":[]}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"502":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-get-api-public-blog-categories","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/public.ts"],"x-language-metadata":{"en":{"title":"Article categories","description":"Lists active article categories ordered by configured position and post count."},"fr":{"title":"Catégories des articles","description":"Liste les catégories actives par position configurée puis nombre d’articles."},"es":{"title":"Categorías de artículos","description":"Lista categorías activas por posición configurada y número de artículos."},"pt":{"title":"Categorias de artigos","description":"Lista categorias ativas por posição configurada e número de artigos."},"ar":{"title":"فئات المقالات","description":"يسرد فئات المقالات النشطة مرتبة بالموضع المهيأ وعدد المقالات."}}}},"/api/public/blog/{slug}":{"get":{"operationId":"public-get-api-public-blog-slug","tags":["public"],"summary":"Published article detail","description":"Returns a published article and up to four related published posts, and increments the article view counter.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nOpen the returned checkout URL. SparkGlim Server owns prices, methods, payment verification and fulfillment; browser returns are navigation only.\n\nReading an article increments its view counter. This GET is not a mutation-free inspection probe.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[{"name":"slug","in":"path","required":true,"description":"URL-friendly identifier for the existing campaign or published article. Validation: public slug.","schema":{"type":"string","description":"URL-friendly identifier for the existing campaign or published article. Validation: public slug."}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"post":{"id":"11111111-1111-4111-8111-111111111111","slug":"example-article","title":"Example article","status":"published"},"relatedPosts":[]}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"502":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-get-api-public-blog-slug","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/public.ts"],"x-language-metadata":{"en":{"title":"Published article detail","description":"Returns a published article and up to four related published posts, and increments the article view counter."},"fr":{"title":"Détail d’un article publié","description":"Retourne un article publié et jusqu’à quatre articles liés, et augmente son compteur de vues."},"es":{"title":"Detalle de artículo publicado","description":"Devuelve artículo publicado y hasta cuatro relacionados, e incrementa su contador de vistas."},"pt":{"title":"Detalhe de artigo publicado","description":"Devolve artigo publicado e até quatro relacionados, e incrementa visualizações."},"ar":{"title":"تفاصيل المقال المنشور","description":"يعيد مقالًا منشورًا وحتى أربعة مقالات ذات صلة ويزيد عداد مشاهداته."}}}},"/api/public/homepage/discovery":{"get":{"operationId":"public-get-api-public-homepage-discovery","tags":["public"],"summary":"Public campaign discovery","description":"Searches the strict public campaign index with product, country, lifecycle, location and date filters, returning exact pagination and disclosure-gated facts.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nReturn only the records permitted by account, campaign and visibility settings.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[{"name":"q","in":"query","required":false,"description":"Search text matched against public campaign title, description, organizer and applicable location or beneficiary fields. Validation: <=100.","schema":{"type":"string","description":"Search text matched against public campaign title, description, organizer and applicable location or beneficiary fields. Validation: <=100.","maxLength":100}},{"name":"country","in":"query","required":false,"description":"Filter by the campaign’s configured country; this does not enable payment methods or convert currency. Validation: ISO2.","schema":{"type":"string","description":"Filter by the campaign’s configured country; this does not enable payment methods or convert currency. Validation: ISO2.","pattern":"^[A-Za-z]{2}$"}},{"name":"location","in":"query","required":false,"description":"Public campaign location or discovery location filter; separate from the financial selling country. Validation: <=100.","schema":{"type":"string","description":"Public campaign location or discovery location filter; separate from the financial selling country. Validation: <=100.","maxLength":100}},{"name":"type","in":"query","required":false,"description":"Supported resource kind, reaction kind or discovery campaign filter specified by this endpoint. Validation: all | ticketing | voting | donation.","schema":{"type":"string","description":"Supported resource kind, reaction kind or discovery campaign filter specified by this endpoint. Validation: all | ticketing | voting | donation.","enum":["all","ticketing","voting","donation"]}},{"name":"status","in":"query","required":false,"description":"Requested supported lifecycle state; account and campaign approval rules still control publication and access. Validation: all | active | upcoming | ended | postponed.","schema":{"type":"string","description":"Requested supported lifecycle state; account and campaign approval rules still control publication and access. Validation: all | active | upcoming | ended | postponed.","enum":["all","active","upcoming","ended","postponed"]}},{"name":"sort","in":"query","required":false,"description":"Selects the server’s supported featured, latest or closing-date ordering. Validation: featured | latest | ending.","schema":{"type":"string","description":"Selects the server’s supported featured, latest or closing-date ordering. Validation: featured | latest | ending.","enum":["featured","latest","ending"]}},{"name":"date","in":"query","required":false,"description":"Restricts discovery to the documented event/campaign date window in the existing server filter. Validation: all | today | tomorrow | weekend | month.","schema":{"type":"string","description":"Restricts discovery to the documented event/campaign date window in the existing server filter. Validation: all | today | tomorrow | weekend | month.","enum":["all","today","tomorrow","weekend","month"]}},{"name":"page","in":"query","required":false,"description":"Requested result page within the endpoint’s documented numbering; retain server pagination metadata. Validation: 1–1000000.","schema":{"type":"integer","description":"Requested result page within the endpoint’s documented numbering; retain server pagination metadata. Validation: 1–1000000.","minimum":1,"maximum":1000000}},{"name":"limit","in":"query","required":false,"description":"Maximum records returned in this page; the endpoint’s fixed bound applies. Validation: 1–24 default12.","schema":{"type":"integer","description":"Maximum records returned in this page; the endpoint’s fixed bound applies. Validation: 1–24 default12.","minimum":1,"maximum":24}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"entries":[],"countries":[],"locations":[],"pagination":{"page":1,"limit":12,"total":0,"pages":0,"hasMore":false},"available":true}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-get-api-public-homepage-discovery","x-source-evidence":["server/src/api/routes/public-homepage.ts"],"x-language-metadata":{"en":{"title":"Public campaign discovery","description":"Searches the strict public campaign index with product, country, lifecycle, location and date filters, returning exact pagination and disclosure-gated facts."},"fr":{"title":"Découverte des campagnes publiques","description":"Recherche l’index public strict avec produit, pays, période, lieu et dates, puis retourne pagination exacte et données autorisées."},"es":{"title":"Descubrimiento de campañas públicas","description":"Busca índice público estricto por producto, país, período, lugar y fecha; devuelve paginación exacta y datos permitidos."},"pt":{"title":"Descoberta de campanhas públicas","description":"Pesquisa índice público estrito por produto, país, período, local e data; devolve paginação exata e dados permitidos."},"ar":{"title":"اكتشاف الحملات العامة","description":"يبحث فهرس الحملات العامة الصارم بالمنتج والبلد والحالة والمكان والتاريخ ويعيد التقسيم والحقائق المسموح نشرها."}}}},"/api/public/homepage/campaigns":{"get":{"operationId":"public-get-api-public-homepage-campaigns","tags":["public"],"summary":"Homepage campaign feed","description":"Returns a curated active public campaign feed of up to72 records for an optional country; it is not a paginated full index.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nActive public campaigns only, at most72; no pagination.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[{"name":"country","in":"query","required":false,"description":"Filter by the campaign’s configured country; this does not enable payment methods or convert currency. Validation: ISO2.","schema":{"type":"string","description":"Filter by the campaign’s configured country; this does not enable payment methods or convert currency. Validation: ISO2.","pattern":"^[A-Za-z]{2}$"}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"campaigns":[],"countries":[],"available":true}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-get-api-public-homepage-campaigns","x-source-evidence":["server/src/api/routes/public-homepage.ts"],"x-language-metadata":{"en":{"title":"Homepage campaign feed","description":"Returns a curated active public campaign feed of up to72 records for an optional country; it is not a paginated full index."},"fr":{"title":"Campagnes de la page d’accueil","description":"Retourne jusqu’à72 campagnes publiques actives pour un pays éventuel ; ce n’est pas un index complet paginé."},"es":{"title":"Campañas de inicio","description":"Devuelve hasta72 campañas públicas activas de un país opcional; no es índice completo paginado."},"pt":{"title":"Campanhas da página inicial","description":"Devolve até72 campanhas públicas ativas de país opcional; não é índice completo paginado."},"ar":{"title":"حملات الصفحة الرئيسية","description":"يعيد حتى72 حملة عامة نشطة لبلد اختياري؛ وليس فهرسًا كاملًا مقسمًا لصفحات."}}}},"/api/public/homepage/awards":{"get":{"operationId":"public-get-api-public-homepage-awards","tags":["public"],"summary":"Public awards feed","description":"Returns up to200 public voting campaigns in approved, ended or postponed states, ordered by featured status and creation date.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nVoting campaigns only, at most200; no pagination.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[{"name":"country","in":"query","required":false,"description":"Filter by the campaign’s configured country; this does not enable payment methods or convert currency. Validation: ISO2.","schema":{"type":"string","description":"Filter by the campaign’s configured country; this does not enable payment methods or convert currency. Validation: ISO2.","pattern":"^[A-Za-z]{2}$"}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"campaigns":[],"countries":[],"available":true}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-get-api-public-homepage-awards","x-source-evidence":["server/src/api/routes/public-homepage.ts"],"x-language-metadata":{"en":{"title":"Public awards feed","description":"Returns up to200 public voting campaigns in approved, ended or postponed states, ordered by featured status and creation date."},"fr":{"title":"Campagnes publiques de récompenses","description":"Retourne jusqu’à200 votes publics approuvés, terminés ou reportés, par mise en avant et date de création."},"es":{"title":"Campañas públicas de premios","description":"Devuelve hasta200 campañas públicas aprobadas, terminadas o aplazadas, por destacado y creación."},"pt":{"title":"Campanhas públicas de prémios","description":"Devolve até200 campanhas públicas aprovadas, terminadas ou adiadas, por destaque e criação."},"ar":{"title":"حملات الجوائز العامة","description":"يعيد حتى200 حملة تصويت عامة معتمدة أو منتهية أو مؤجلة مرتبة بالتمييز وتاريخ الإنشاء."}}}},"/api/public/countries":{"get":{"operationId":"public-get-api-public-countries","tags":["public"],"summary":"Active country catalog","description":"Returns the active admin-managed country catalog and default currencies; this is not a list of enabled payment corridors.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nCatalog presence does not activate payments or country domains.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":[{"code":"GH","name":"Ghana","phoneCode":"233","isDefault":true,"currency":{"code":"GHS","name":"Ghanaian cedi","symbol":"GH₵","decimal_precision":2}}]}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-get-api-public-countries","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/public.ts"],"x-language-metadata":{"en":{"title":"Active country catalog","description":"Returns the active admin-managed country catalog and default currencies; this is not a list of enabled payment corridors."},"fr":{"title":"Catalogue des pays actifs","description":"Retourne le catalogue actif des pays et devises par défaut ; ce n’est pas la liste des circuits de paiement activés."},"es":{"title":"Catálogo de países activos","description":"Devuelve catálogo activo de países y monedas predeterminadas; no lista corredores de pago habilitados."},"pt":{"title":"Catálogo de países ativos","description":"Devolve catálogo ativo de países e moedas padrão; não lista corredores de pagamento ativos."},"ar":{"title":"دليل البلدان النشطة","description":"يعيد دليل البلدان النشطة وعملاتها الافتراضية؛ وليس قائمة ممرات الدفع المفعلة."}}}},"/api/public/blog/{slug}/reactions":{"get":{"operationId":"public-get-api-public-blog-slug-reactions","tags":["public"],"summary":"Read article reactions","description":"Counts the supported reactions on a published article and identifies the current visitor’s selections without returning other visitor identities.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[{"name":"slug","in":"path","required":true,"description":"URL-friendly identifier for the existing campaign or published article. Validation: public slug.","schema":{"type":"string","description":"URL-friendly identifier for the existing campaign or published article. Validation: public slug."}},{"name":"visitorId","in":"query","required":false,"description":"Existing visitor identity used to retrieve or toggle that visitor’s article reaction. Validation: visitor identity.","schema":{"type":"string","description":"Existing visitor identity used to retrieve or toggle that visitor’s article reaction. Validation: visitor identity."}},{"name":"profileToken","in":"query","required":false,"description":"Token of an existing verified community profile; this endpoint does not create that identity. Validation: existing verified community profile.","schema":{"type":"string","description":"Token of an existing verified community profile; this endpoint does not create that identity. Validation: existing verified community profile."}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"counts":{"like":0,"love":0,"insightful":0,"celebrate":0,"clap":0},"mine":[]}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"502":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-get-api-public-blog-slug-reactions","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/public.ts"],"x-language-metadata":{"en":{"title":"Read article reactions","description":"Counts the supported reactions on a published article and identifies the current visitor’s selections without returning other visitor identities."},"fr":{"title":"Lire les réactions","description":"Compte les réactions d’un article publié et les choix du visiteur sans retourner les identités des autres."},"es":{"title":"Leer reacciones","description":"Cuenta reacciones del artículo publicado y selecciones actuales sin devolver identidades ajenas."},"pt":{"title":"Ler reações","description":"Conta reações do artigo publicado e escolhas atuais sem devolver identidades alheias."},"ar":{"title":"قراءة التفاعلات","description":"يحصي تفاعلات مقال منشور ويحدد اختيارات الزائر الحالي دون إعادة هويات الآخرين."}}},"post":{"operationId":"public-post-api-public-blog-slug-reactions","tags":["public"],"summary":"Toggle article reaction","description":"Toggles or changes one reaction for the supplied existing visitor or verified community profile on a published article.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[{"name":"slug","in":"path","required":true,"description":"URL-friendly identifier for the existing campaign or published article. Validation: public slug.","schema":{"type":"string","description":"URL-friendly identifier for the existing campaign or published article. Validation: public slug."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Supported resource kind, reaction kind or discovery campaign filter specified by this endpoint. Validation: like | love | insightful | celebrate | clap.","enum":["like","love","insightful","celebrate","clap"]},"visitorId":{"type":"string","description":"Existing visitor identity used to retrieve or toggle that visitor’s article reaction. Validation: 6–80.","minLength":6,"maxLength":80},"profileToken":{"type":"string","description":"Token of an existing verified community profile; this endpoint does not create that identity. Validation: existing verified community profile."}},"required":["type","visitorId"]}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true}},"required":["success"]},"example":{"success":true,"reacted":true}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"502":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-post-api-public-blog-slug-reactions","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/public.ts"],"x-language-metadata":{"en":{"title":"Toggle article reaction","description":"Toggles or changes one reaction for the supplied existing visitor or verified community profile on a published article."},"fr":{"title":"Modifier une réaction","description":"Bascule ou change une réaction du visiteur ou profil vérifié sur un article publié."},"es":{"title":"Alternar reacción","description":"Alterna o cambia reacción del visitante o perfil verificado en artículo publicado."},"pt":{"title":"Alternar reação","description":"Alterna ou muda reação do visitante ou perfil verificado no artigo publicado."},"ar":{"title":"تبديل التفاعل","description":"يبدّل تفاعلًا واحدًا أو يغيّره للزائر أو ملف المجتمع الموثق على مقال منشور."}}}},"/api/public/blog/{slug}/comments":{"get":{"operationId":"public-get-api-public-blog-slug-comments","tags":["public"],"summary":"Approved article comments","description":"Lists up to500 approved comments on a published article in ascending creation order; private author contact is not returned.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nUp to500 approved comments, oldest first; no pagination.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[{"name":"slug","in":"path","required":true,"description":"URL-friendly identifier for the existing campaign or published article. Validation: public slug.","schema":{"type":"string","description":"URL-friendly identifier for the existing campaign or published article. Validation: public slug."}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":[]}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"502":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-get-api-public-blog-slug-comments","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/public.ts"],"x-language-metadata":{"en":{"title":"Approved article comments","description":"Lists up to500 approved comments on a published article in ascending creation order; private author contact is not returned."},"fr":{"title":"Commentaires approuvés","description":"Liste jusqu’à500 commentaires approuvés du plus ancien au récent, sans contact privé de l’auteur."},"es":{"title":"Comentarios aprobados","description":"Lista hasta500 comentarios aprobados de antiguos a nuevos sin contacto privado del autor."},"pt":{"title":"Comentários aprovados","description":"Lista até500 comentários aprovados de antigos a novos sem contacto privado do autor."},"ar":{"title":"التعليقات المعتمدة","description":"يسرد حتى500 تعليق معتمد على مقال منشور بالأقدم أولًا دون معلومات تواصل المؤلف الخاصة."}}},"post":{"operationId":"public-post-api-public-blog-slug-comments","tags":["public"],"summary":"Submit moderated comment","description":"Submits a comment from an existing verified community profile, respecting article comments settings and moderation policy.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nExisting verified profile required; comments may remain pending. No public identity-creation API is implied.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[{"name":"slug","in":"path","required":true,"description":"URL-friendly identifier for the existing campaign or published article. Validation: public slug.","schema":{"type":"string","description":"URL-friendly identifier for the existing campaign or published article. Validation: public slug."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","description":"Article comment text submitted by an existing verified community profile; moderation still applies. Validation: 2–4000.","minLength":2,"maxLength":4000},"profileToken":{"type":"string","description":"Token of an existing verified community profile; this endpoint does not create that identity. Validation: existing verified community profile required by handler."}},"required":["content","profileToken"]}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true}},"required":["success"]},"example":{"success":true,"moderated":true,"message":"Your comment is awaiting moderation."}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"502":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-post-api-public-blog-slug-comments","x-source-evidence":["server/src/api/router.ts","server/src/api/routes/public.ts"],"x-language-metadata":{"en":{"title":"Submit moderated comment","description":"Submits a comment from an existing verified community profile, respecting article comments settings and moderation policy."},"fr":{"title":"Envoyer un commentaire modéré","description":"Envoie un commentaire d’un profil vérifié selon les réglages de l’article et la modération."},"es":{"title":"Enviar comentario moderado","description":"Envía comentario de perfil verificado según ajustes del artículo y moderación."},"pt":{"title":"Enviar comentário moderado","description":"Envia comentário de perfil verificado segundo definições do artigo e moderação."},"ar":{"title":"إرسال تعليق للمراجعة","description":"يرسل تعليقًا من ملف مجتمع موثق قائم وفق إعدادات المقال وسياسة المراجعة."}}}},"/api/public/discounts/validate":{"post":{"operationId":"public-post-api-public-discounts-validate","tags":["public"],"summary":"Validate campaign discount","description":"Validates an existing campaign discount through the shared database contract; purchase still validates the final price and eligibility.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nOpen the returned checkout URL. SparkGlim Server owns prices, methods, payment verification and fulfillment; browser returns are navigation only.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"The existing resource credential or verification code required by this endpoint; never publish a real OTP or ticket secret. Validation: existing campaign discount."},"campaign_id":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: campaign identifier."},"phone_number":{"type":"string","description":"Participant contact phone; required payment channels and campaign rules may require a valid international number. Validation: customer phone."},"email":{"type":"string","description":"Contact email used by the configured campaign or account workflow; never a credential granting access by itself. Validation: email.","format":"email"}},"required":["code","campaign_id"]}}}},"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true}},"required":["success"]},"example":{"success":true,"discount":{"id":"11111111-1111-4111-8111-111111111111","code":"<EXISTING_DISCOUNT>","name":"Example discount","discount_percent":10,"campaign_id":"11111111-1111-4111-8111-111111111111"}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"502":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-post-api-public-discounts-validate","x-source-evidence":["server/src/api/routes/public.ts","app/api/discounts/validate/route.ts"],"x-language-metadata":{"en":{"title":"Validate campaign discount","description":"Validates an existing campaign discount through the shared database contract; purchase still validates the final price and eligibility."},"fr":{"title":"Valider une réduction","description":"Valide une réduction existante via le contrat partagé ; l’achat vérifie encore prix final et admissibilité."},"es":{"title":"Validar descuento","description":"Valida descuento existente mediante contrato compartido; compra verifica precio final y elegibilidad."},"pt":{"title":"Validar desconto","description":"Valida desconto existente pelo contrato partilhado; compra verifica preço final e elegibilidade."},"ar":{"title":"التحقق من الخصم","description":"يتحقق من خصم حملة قائم عبر العقد المشترك؛ ويعيد الشراء التحقق من السعر النهائي والأهلية."}}}},"/api/public/qr/ticket/{code}":{"get":{"operationId":"public-get-api-public-qr-ticket-code","tags":["public"],"summary":"Ticket QR image","description":"Returns a branded binary PNG for the supplied ticket credential at a bounded image size; rendering does not grant ticket ownership.\n\nDefault Server limit: 100 requests per IP per 60 seconds. Resource-specific controls also apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nBinary PNG response, not JSON. Possessing or rendering a code does not authorize check-in.","servers":[{"url":"https://api.sparkglim.net"}],"security":[],"parameters":[{"name":"code","in":"path","required":true,"description":"The existing resource credential or verification code required by this endpoint; never publish a real OTP or ticket secret. Validation: UUID or documented resource identifier.","schema":{"type":"string","description":"The existing resource credential or verification code required by this endpoint; never publish a real OTP or ticket secret. Validation: UUID or documented resource identifier.","format":"uuid"}},{"name":"size","in":"query","required":false,"description":"Requested output QR image width bounded by the existing renderer. Validation: 128–1024 default512.","schema":{"type":"integer","description":"Requested output QR image width bounded by the existing renderer. Validation: 128–1024 default512.","minimum":128,"maximum":1024}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"image/png":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"429":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","headers":{"Retry-After":{"description":"Provided by resource-specific controls where implemented.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}},"502":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false,"error":"<ERROR_MESSAGE>"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-get-api-public-qr-ticket-code","x-source-evidence":["server/src/api/routes/public.ts","app/api/qr/ticket/[code]/route.ts"],"x-language-metadata":{"en":{"title":"Ticket QR image","description":"Returns a branded binary PNG for the supplied ticket credential at a bounded image size; rendering does not grant ticket ownership."},"fr":{"title":"Image QR du billet","description":"Retourne un PNG de marque de taille limitée pour le code ; le rendu ne donne pas propriété du billet."},"es":{"title":"Imagen QR de entrada","description":"Devuelve PNG de marca de tamaño limitado para credencial; renderizar no concede propiedad."},"pt":{"title":"Imagem QR do bilhete","description":"Devolve PNG de marca de tamanho limitado para credencial; gerar não concede propriedade."},"ar":{"title":"صورة QR للتذكرة","description":"يعيد صورة PNG ذات علامة بحجم محدود لاعتماد التذكرة؛ ولا يمنح عرضها ملكية التذكرة."}}}},"/api/participants/search":{"get":{"operationId":"public-get-api-participants-search","tags":["public"],"summary":"Public nominee or campaign code lookup","description":"Finds an approved nominee or public voting campaign by code or slug using the current public visibility and active-category boundary.\n\nThis Web handler has no dedicated limiter in its source; upstream controls may apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nReturn only the records permitted by account, campaign and visibility settings.","servers":[{"url":"https://sparkglim.net"}],"security":[],"parameters":[{"name":"code","in":"query","required":true,"description":"The existing resource credential or verification code required by this endpoint; never publish a real OTP or ticket secret. Validation: nominee/participant/campaign code or campaign slug; q accepted as alias.","schema":{"type":"string","description":"The existing resource credential or verification code required by this endpoint; never publish a real OTP or ticket secret. Validation: nominee/participant/campaign code or campaign slug; q accepted as alias."}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true}},"required":["success"]},"example":{"success":true,"resultType":"nominee","participant":{"id":"11111111-1111-4111-8111-111111111111","name":"Example nominee","bio":null,"category":null,"vote_count":null,"show_vote_count":false,"participant_code":"EXAMPLE","nominee_code":null,"image_url":null},"campaign":{"id":"11111111-1111-4111-8111-111111111111","title":"Example awards","slug":"example-awards","status":"approved","campaign_type":"voting","vote_price":1,"image_url":null,"banner_url":null}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"error":"No nominee or digital voting campaign found for this code"}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"error":"No nominee or digital voting campaign found for this code"}}}},"500":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"error":"No nominee or digital voting campaign found for this code"}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-get-api-participants-search","x-source-evidence":["app/api/participants/search/route.ts"],"x-language-metadata":{"en":{"title":"Public nominee or campaign code lookup","description":"Finds an approved nominee or public voting campaign by code or slug using the current public visibility and active-category boundary."},"fr":{"title":"Recherche publique par code","description":"Trouve un candidat approuvé ou vote public par code ou slug selon la visibilité et les catégories actives."},"es":{"title":"Búsqueda pública por código","description":"Busca candidato aprobado o campaña pública por código o slug según visibilidad y categoría activa."},"pt":{"title":"Pesquisa pública por código","description":"Procura nomeado aprovado ou campanha pública por código ou slug conforme visibilidade e categoria ativa."},"ar":{"title":"البحث العام بالرمز","description":"يعثر على مرشح معتمد أو حملة تصويت عامة برمز أو رابط وفق حدود الظهور والفئات النشطة الحالية."}}}},"/api/public/voting-counts/{campaignId}":{"get":{"operationId":"public-get-api-public-voting-counts-campaignId","tags":["public"],"summary":"Visibility-gated public vote counts","description":"Returns completed vote totals only for a publicly visible voting campaign, approved nominees and active categories when counts are explicitly public.\n\nThis Web handler has no dedicated limiter in its source; upstream controls may apply.\n\nAvailability is verified from source, not a live production guarantee.\n\nReturn only the records permitted by account, campaign and visibility settings.","servers":[{"url":"https://sparkglim.net"}],"security":[],"parameters":[{"name":"campaignId","in":"path","required":true,"description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID or documented resource identifier.","schema":{"type":"string","description":"Existing campaign record within the caller’s account and any narrower campaign credential. Validation: UUID or documented resource identifier.","format":"uuid"}}],"responses":{"200":{"description":"Successful response. Sample data values are illustrative, not live account or transaction records.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{}},"required":["success","data"]},"example":{"success":true,"data":{"visible":false,"voteCounts":{}}}}}},"400":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false}}}},"404":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false}}}},"503":{"description":"Validation, permissions, unavailable records and temporary service failures use the handler’s HTTP status and error payload. Exact messages and response envelopes depend on the failing validation or middleware.","content":{"application/json":{"schema":{"type":"object"},"example":{"success":false}}}}},"x-required-permissions":[],"x-source-availability":"implemented","x-production-availability":"not-inferred-from-source","x-documentation-url":"https://developer.sparkglim.net/reference/public/public-get-api-public-voting-counts-campaignId","x-source-evidence":["app/api/public/voting-counts/[campaignId]/route.ts"],"x-language-metadata":{"en":{"title":"Visibility-gated public vote counts","description":"Returns completed vote totals only for a publicly visible voting campaign, approved nominees and active categories when counts are explicitly public."},"fr":{"title":"Totaux publics selon visibilité","description":"Retourne les votes terminés uniquement pour campagne publique, candidats approuvés et catégories actives lorsque les totaux sont publics."},"es":{"title":"Totales públicos según visibilidad","description":"Devuelve votos completados solo para campaña pública, candidatos aprobados y categorías activas con totales públicos explícitos."},"pt":{"title":"Totais públicos conforme visibilidade","description":"Devolve votos concluídos só para campanha pública, nomeados aprovados e categorias ativas com totais públicos explícitos."},"ar":{"title":"أعداد أصوات عامة حسب الظهور","description":"يعيد مجاميع الأصوات المكتملة لحملة عامة ومرشحين معتمدين وفئات نشطة عند السماح الصريح بنشر الأعداد."}}}}},"components":{"securitySchemes":{"OrganizationDomain":{"type":"apiKey","in":"header","name":"x-white-label-domain","description":"Verified organization hostname bound to the request and account."},"OrganizationPublicKey":{"type":"apiKey","in":"header","name":"x-white-label-key","description":"Complete issued Public or Campaign Key for an explicitly permitted safe read."},"OrganizationKeyId":{"type":"apiKey","in":"header","name":"x-white-label-key-id","description":"Identifier extracted from the single Private Key; the secret stays on your server."},"OrganizationSignatureVersion":{"type":"apiKey","in":"header","name":"x-white-label-signature-version","description":"The literal value 2, selecting domain-bound HMAC signing for API Version 1."},"OrganizationTimestamp":{"type":"apiKey","in":"header","name":"x-white-label-timestamp","description":"Fresh 13-digit millisecond timestamp within the server five-minute tolerance."},"OrganizationNonce":{"type":"apiKey","in":"header","name":"x-white-label-nonce","description":"Fresh nonce of 16–128 letters, digits, underscores or hyphens. Never reuse on a signing retry."},"OrganizationSignature":{"type":"apiKey","in":"header","name":"x-white-label-signature","description":"Server-generated lowercase hexadecimal HMAC-SHA256 of the exact canonical request."},"ResellerSession":{"type":"http","scheme":"bearer","description":"Existing SparkGlim user session. Server-enforced account membership and permissions are additionally required."}}},"externalDocs":{"description":"Official SparkGlim Developer Platform","url":"https://developer.sparkglim.net"},"x-excluded-contracts":[{"method":"GET","path":"/api/public/donation-summary/:campaignId","reason":"Availability is verified from source, not a live production guarantee. Legacy aggregate lacks the full current public visibility boundary. Not recommended for new integrations."},{"method":"GET","path":"/api/public/vote-counts/:campaignId","reason":"Availability is verified from source, not a live production guarantee. Legacy aggregate lacks the full current public visibility boundary. Not recommended for new integrations."}]}