openapi: 3.1.0 info: title: Cellulant Tingg Checkout Acknowledgement Engagement API description: 'Tingg Checkout 3.0 — accept payments across 25+ African markets through a single integration. Supports Express Checkout (hosted/modal) and Custom Checkout (host-to-host) for mobile money, cards, and direct bank transfer. ' version: 3.0.0 contact: name: Cellulant Developer Support url: https://developer.tingg.africa email: developer@cellulant.io license: name: Cellulant Terms of Service url: https://www.cellulant.io/terms servers: - url: https://api.tingg.africa description: Production - url: https://api-approval.tingg.africa description: Sandbox security: - BearerAuth: [] ApiKeyAuth: [] tags: - name: Engagement description: Outbound SMS notifications and OTPs. paths: /api/v2/engagement: post: summary: Send Engagement Message description: Queue an SMS notification (OTP, transactional, or standard). Delivery status is reported via callback to the supplied callbackUrl. operationId: sendEngagement tags: - Engagement requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EngagementRequest' examples: SmsEngagementExample: $ref: '#/components/examples/SmsEngagementExample' responses: '200': description: Message queued content: application/json: schema: $ref: '#/components/schemas/EngagementResponse' examples: EngagementResponseExample: $ref: '#/components/examples/EngagementResponseExample' 4XX: $ref: '#/components/responses/ErrorResponse' components: examples: EngagementResponseExample: summary: Message queued value: transactionID: 8f6b2c80-43f7-4f78-b1d2-7a3a5d6c1e0a statusCode: 200 message: Message queued successfully. SmsEngagementExample: summary: Send a templated OTP value: notificationType: OTP channels: - SMS referenceID: ref-cas-123 callbackUrl: https://merchant.example.co.ke/sms/callback smsDto: msisdn: - '254712345678' message: Your Tingg OTP is ${code}. Valid for 5 minutes. params: code: '648291' senderID: TINGG schemas: SmsDto: type: object required: - msisdn - message properties: msisdn: type: array items: type: string description: One or more recipient phone numbers in E.164 format. message: type: string description: Message body; supports `${placeholder}` substitution. params: type: object additionalProperties: type: string senderID: type: string Error: type: object properties: statusCode: type: integer message: type: string EngagementRequest: type: object required: - notificationType - channels - referenceID - smsDto properties: notificationType: type: string enum: - OTP - TRX - STANDARD - SMS_TEST channels: type: array items: type: string enum: - SMS referenceID: type: string callbackUrl: type: string format: uri smsDto: $ref: '#/components/schemas/SmsDto' EngagementResponse: type: object properties: transactionID: type: string format: uuid statusCode: type: integer example: 200 message: type: string responses: ErrorResponse: description: Error response content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: JWT ApiKeyAuth: type: apiKey in: header name: apikey description: Merchant apiKey issued in the Tingg integration dashboard.