openapi: 3.1.0 info: title: Cellulant Tingg Engage API description: | Tingg Engage — single global entry point for transactional alerts. Send SMS (OTP, transactional, standard) to customers with templated parameters and delivery status callbacks. version: "2.0.0" contact: name: Cellulant Developer Support url: https://developer.tingg.africa email: developer@cellulant.io servers: - url: https://api.tingg.africa description: Production - url: https://api-test.tingg.africa description: Sandbox security: - BearerAuth: [] 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: securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: JWT responses: ErrorResponse: description: Error response content: application/json: schema: $ref: '#/components/schemas/Error' schemas: 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' 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 EngagementResponse: type: object properties: transactionID: type: string format: uuid statusCode: type: integer example: 200 message: type: string Error: type: object properties: statusCode: type: integer message: type: string examples: 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 EngagementResponseExample: summary: Message queued value: transactionID: 8f6b2c80-43f7-4f78-b1d2-7a3a5d6c1e0a statusCode: 200 message: Message queued successfully.