Documentation
Documentation
https://developers.mtn.com/products/customer-promotion
APIReference
https://developers.mtn.com/products/customer-promotion
swagger: '2.0'
info:
title: Customer Promotion Placeholder
description: API Documentation
version: '0.1'
host: za.api.mtn.com
basePath: /customerPromotion/v1
schemes:
- https
consumes:
- application/json;charset=utf-8
produces:
- application/json;charset=utf-8
securityDefinitions:
ApiKeyAuth:
type: apiKey
name: X-API-Key
in: header
OAuth2:
type: oauth2
flow: application
tokenUrl: 'https://api.mtn.com/v1/oauth/access_token'
security:
- ApiKeyAuth: []
- OAuth2: []
paths:
/tbd/promo:
get:
summary: some function here
description: promotion description
tags:
- Customer Promotion
responses:
'200':
description: Success
/eligibilityCheck/{msisdn}:
get:
tags:
- Customer Promotion
summary: ELigibility check of customer.
description: ELigibility check for recharge and Win campaign. This API is used to retreive customer profile.
operationId: getUserProfile
parameters:
- name: transactionId
in: header
description: Unique ID for the transaction.
required: true
type: string
- name: sourceIdentifier
in: query
description: This field denotes the channel that is initiating request to SOA like USSD, MyMTNApp
required: true
type: string
- name: msisdn
in: path
description: MSISDN of the customer whose eligibility check needs to be done
required: true
type: string
responses:
'200':
description: Eligibility check success Response
schema:
$ref: '#/definitions/eligibilityCheckResponse'
'400':
description: Bad Request
schema:
$ref: '#/definitions/Error400'
'401':
description: Unauthorised
schema:
$ref: '#/definitions/Error401'
'404':
description: Not Found
schema:
$ref: '#/definitions/Error404'
'415':
description: Unsupported Media Type
schema:
$ref: '#/definitions/Error415'
'500':
description: Internal Server Error
schema:
$ref: '#/definitions/Error500'
/optin:
post:
summary: This API is used to optin users on campaigns
tags:
- Customer Promotion
parameters:
- name: transactionId
in: header
description: Unique ID for the transaction.
required: true
type: string
- name: sourceIdentifier
in: query
description: This field denotes the channel that is initiating request to SOA like USSD, MyMTNApp
required: false
type: string
- name: OptIn
description: Request parameters for customer Opt-In
required: true
schema:
$ref: '#/definitions/optinRequest'
in: body
responses:
'200':
description: Success response for optin
schema:
$ref: '#/definitions/optinResponse'
'400':
description: Bad Request
schema:
$ref: '#/definitions/Error400'
'401':
description: Unauthorized
schema:
$ref: '#/definitions/Error401'
'404':
description: Not Found
schema:
$ref: '#/definitions/Error404'
'415':
description: Unsupported Media Type
schema:
$ref: '#/definitions/Error415'
'500':
description: Internal Server Error
schema:
$ref: '#/definitions/Error500'
definitions:
eligibilityCheckResponse:
type: object
properties:
statusCode:
type: string
description: This is the MADAPI Canonical Error Code (it is 4 characters long and it is not the HTTP Status Code which is 3 characters long). Back-end system errors are mapped to specific canonical error codes which are returned. More information on these mappings can be found on the MADAPI Confluence Page 'Response Codes',
example: '0000'
maxLength: 30
statusMessage:
type: string
description: More details and corrective actions related to the error which can be shown to a client. Success for 200.
supportMessage:
type: string
description: Internal message meant for consumers of the API to troubleshoot the error (could possible include the back-end system error code in the message if it would be useful)
transactionId:
type: string
description: Unique reference number
example: "100000172429605"
balances:
type: array
items:
$ref: "#/definitions/balanceType"
description: >-
'The amount of plays the user has available per game type. Balances expire daily at 12AM (midnight)
The balance is redeemed by using the play endpoint to win a prize. Plays are not transferable between MSISDNs or game types'
wallet:
type: array
items:
$ref: "#/definitions/category1"
description: |
The user's rewards wallet that contains a collection of awarded prizes/gifts by category (redeemed and non-redeemed).
These rewards may come from various sources, e.g. playing one of the games, gift campaigns or prizes won in the live draw
Rewards are not transferable between MSISDNs.
Ordered by awardedAt in descending order.
draws:
type: array
items:
$ref: "#/definitions/Draw"
description: |
A breakdown of draws, past and present that shows the number of entries a customer has aquired per draw.
If the user has won a prize in one of the respective draws, the details pertaining to the prize awarded are included
A maximum of three draws will be shown, ordered by entriesOpenAt in descending order.
history:
$ref: "#/definitions/History"
rechargeOptions:
$ref: "#/definitions/RechargeOptions"
recharges:
type: array
items:
$ref: "#/definitions/Recharges"
description: |
A breakdown of draws, past and present that shows the number of entries a customer has aquired per draw.
If the user has won a prize in one of the respective draws, the details pertaining to the prize awarded are included
A maximum of three draws will be shown, ordered by entriesOpenAt in descending order.
optinRequest:
allOf:
- required:
- msisdn
properties:
optin:
type: boolean
description: this is true or false for user optin.
example: true
campaign:
type: string
description: Identifies the campaign you would like to optin or optout to.
example: 'RECHARGE_AND_WIN'
msisdn:
description: MSISDN of the customer who wants to redeem their reward. This will be cross-checked against the play id as pre provision safety measure
type: string
example: 27605220405
optinResponse:
allOf:
- required:
- statusCode
- statusMessage
- transactionId
- supportMessage
properties:
statusCode:
type: string
description: This is the MADAPI Canonical Error Code (it is 4 characters long and it is not the HTTP Status Code which is 3 characters long). Back-end system errors are mapped to specific canonical error codes which are returned. More information on these mappings can be found on the MADAPI Confluence Page 'Response Codes'
example: '0000'
maxLength: 30
statusMessage:
type: string
description: More details and corrective actions related to the error which can be shown to a client. Success for 200.
supportMessage:
type: string
description: Internal message meant for consumers of the API to troubleshoot the error (could possible include the back-end system error code in the message if it would be useful)
transactionId:
type: string
description: Unique reference number
example: "100000172429605"
balanceType:
required:
- type
- balance
properties:
type:
type: string
enum: ['DAILY', 'LOYALTY_SPEND_1', 'LOYALTY_SPEND_2', 'LOYALTY_SPEND_3', 'LIVE_DRAW']
description: >-
Type of the balance that the customer is having in their profile
balance:
type: integer
description: >-
The amount of plays available
description: >
status:
* `DAILY` - Daily plays awarded
* `LOYALTY_SPEND_1` - plays awarded for loyalty points redeptions of less than 50 points
* `LOYALTY_SPEND_2` - plays awarded for loyalty points redeptions of less than 250 points
* `LOYALTY_SPEND_3` - plays awarded for loyalty points redeptions of more than 250 points
* `LIVE_DRAW` - Plays awarded for visiting the draw announcement page during the live announcement window
category1:
$ref: "#/definitions/reward1"
Draw:
required:
- entries
- drawStatus
- entriesOpenAt
- entriesCloseAt
- announcementStartAt
- announcementEndAt
properties:
entries:
type: integer
format: int32
description : |
The number of entries that have been awarded to the customer in question (Only applicalbe to draws shown in customer profile)
winner:
type: boolean
description : |
Whether the customer in question has won a pize in the draw (Only applicalbe to draws shown in customer profile)
drawStatus:
type: string
enum: ['OPEN', 'CLOSED', 'LIVE']
entriesOpenAt:
type: string
format: date-time
description : This field defines the time when the draws open for entries
entriesCloseAt:
type: string
format: date-time
description : When the draw no longer accepts entries
announcementStartAt:
type: string
format: date-time
description : When the live draw starts
announcementEndAt:
type: string
format: date-time
description : When the live draw ends
prizes:
type: array
description : |
A list of prizes that pertain to the draw
Draws shown in customer profile will only show prizes that pertain to the customer in question
items:
required:
- msisdn
- reward
properties:
msisdn:
type: string
description : The msisdn of the winner of the prize. The value will be in international format i.e., 27867583465 [MQ] - Is the msisdn of the customer querying the service or the prize winner? [SOA] This is the winner
reward:
$ref: "#/definitions/reward"
description: >
drawStatus:
* `OPEN` - The draw is accepting entries
* `CLOSED` - The draw is no longer accepting entries
* `LIVE` - The draw winners are being announced
History:
required:
- anniversary
- lastRecharges
- firstRecharge
- log
properties:
anniversary:
type: string
format: date-time
lastRecharges:
type: string
format: date-time
firstRecharge:
type: string
format: date-time
log :
type: array
items:
$ref: "#/definitions/LogHistory"
Recharges:
required:
- SOID
- price
- location
- date
properties:
SOID:
type: string
example: '1234'
price:
type: string
example: '49'
location:
type: string
example: "Randburg"
date:
type: string
format: date-time
RechargeOptions:
required:
- optin
- nextRechargeBefore
properties:
optin:
type: boolean
example: true
nextRechargeBefore:
format: date-time
reward1:
properties:
redeemId:
type: string
example: "922625"
description: The redeem id of the reward
pool:
type: string
example: "UNCONDITIONAL_GIFT"
description: The pool of the reward
category:
type: string
example: "Grocery"
description: The category of the reward
subCategory:
type: string
example: "Checkers"
description: The subcategory of the reward
shortDescription:
type: string
example: ""
description: The short description of the reward
description:
type: string
example: "R5000 CHECKERS VOUCHER"
description: The description of the reward
properties:
type: object
properties:
type:
type: string
example: "VOUCHERCHECKERS"
description: The type of the reward
value:
type: integer
example: 5000
description: The value of the reward
valueUnit:
type: string
example: "R"
description: The unit of the reward value
validity:
type: integer
example: 60
description: The validity of the reward
validityUnit:
type: string
example: "Days"
description: The unit of the reward validity
valueCents:
type: integer
example: 0
description: The cost of redeeming the reward in cents
valueFormatted:
type: string
example: "R0"
description: The formatted cost of redeeming the reward
discount:
type: string
example: "100%"
description: The discount applied to the reward
awardedAt:
type: string
format: date-time
example: "2023-11-07T07:00:23.559Z"
description: The time when the reward was awarded
redeemed:
type: boolean
example: false
description: Whether the reward has been redeemed or not
redeemedAt:
type: string
format: date-time
example: ""
description: The time when the reward was redeemed
expired:
type: boolean
example: true
description: Whether the reward has expired or not
expiresAt:
type: string
format: date-time
example: "2023-11-07T07:00:40.339Z"
description: The time when the reward expires
source:
type: string
example: "GIFT"
description: The source of the reward
description: >
source:
* `DAILY` - A prize won when playing the game using daily plays
* `LOYALTY_SPEND_1` - A prize won when playing the game using low value loyalty spend plays
* `LOYALTY_SPEND_2` - A prize won when playing the game using medium value loyalty spend plays
* `LOYALTY_SPEND_3` - A prize won when playing the game using high value loyalty spend plays
* `LIVE_DRAW` - A prize won when playing the game made available during the announcement window
* `GIFT` - A reward gifted to the user via the gigting endpoint
* `DRAW` - A prize in the weekly/monthly draw
reward:
properties:
redeemId:
type: string
example: "922625"
description: The redeem id of the reward
pool:
type: string
example: "UNCONDITIONAL_GIFT"
description: The pool of the reward
category:
type: string
example: "Grocery"
description: The category of the reward
subCategory:
type: string
example: "Checkers"
description: The subcategory of the reward
shortDescription:
type: string
example: ""
description: The short description of the reward
description:
type: string
example: "R5000 CHECKERS VOUCHER"
description: The description of the reward
properties:
type: object
properties:
type:
type: string
example: "VOUCHERCHECKERS"
description: The type of the reward
value:
type: integer
example: 5000
description: The value of the reward
valueUnit:
type: string
example: "R"
description: The unit of the reward value
validity:
type: integer
example: 60
description: The validity of the reward
validityUnit:
type: string
example: "Days"
description: The unit of the reward validity
valueCents:
type: integer
example: 0
description: The cost of redeeming the reward in cents
valueFormatted:
type: string
example: "R0"
description: The formatted cost of redeeming the reward
discount:
type: string
example: "100%"
description: The discount applied to the reward
awardedAt:
type: string
format: date-time
example: "2023-11-07T07:00:23.559Z"
description: The time when the reward was awarded
redeemed:
type: boolean
example: false
description: Whether the reward has been redeemed or not
redeemedAt:
type: string
format: date-time
example: ""
description: The time when the reward was redeemed
expired:
type: boolean
example: true
description: Whether the reward has expired or not
expiresAt:
type: string
format: date-time
example: "2023-11-07T07:00:40.339Z"
description: The time when the reward expires
source:
type: string
example: "GIFT"
description: The source of the reward
description: >
source:
* `DAILY` - A prize won when playing the game using daily plays
* `LOYALTY_SPEND_1` - A prize won when playing the game using low value loyalty spend plays
* `LOYALTY_SPEND_2` - A prize won when playing the game using medium value loyalty spend plays
* `LOYALTY_SPEND_3` - A prize won when playing the game using high value loyalty spend plays
* `LIVE_DRAW` - A prize won when playing the game made available during the announcement window
* `GIFT` - A reward gifted to the user via the gigting endpoint
* `DRAW` - A prize in the weekly/monthly draw
LogHistory:
properties:
recharge:
type: string
description : The time of recharge transaction
format: date-time
bundle:
type: string
example: 'BUY-1-500MB-1D-R500'
value:
type: integer
format: int32
description : The value will be returned cents from Infinity and will be convered to Rand
example: 500
valueUom:
type: string
format: Rand
description : The unit of measure of the value
example: Rand
Error400:
properties:
statusCode:
type: "integer"
description: Status code from target system to indicate transaction status
example: 5000
statusMessage:
type: "string"
description: Status message from target system to indicate transaction status.
supportMessage:
type: "string"
description: detail message from target system to indicate transaction status.
transactionId:
type: string
description: This is the same transactionId that is sent in the request
example: "0d1e1b18-1b6d-4792-8417-72d337f42a1c"
Error401:
properties:
statusCode:
type: "integer"
description: Status code from target system to indicate transaction status
example: 4000
statusMessage:
type: "string"
description: Status message from target system to indicate transaction status.
example: Unauthorised
supportMessage:
type: "string"
description: detail message from target system to indicate transaction status.
example: Please verify token environment and key
faultMessage1:
type: "string"
description: ""
faultMessage2:
type: "string"
description: fault message
Error404:
properties:
timestamp:
type: string
format: date-time
description: Timestamp that the error occurred
example: '2021-07-21T17:32:28Z'
status:
type: "integer"
description: Status code from target system to indicate transaction status
example: 404
error:
type: "string"
description: error message
example: Not found
message:
type: string
description: details
path:
type: string
description: The path that caused the error
Error405:
properties:
timestamp:
type: string
format: date-time
description: Timestamp that the error occurred
example: '2021-07-21T17:32:28Z'
status:
type: "integer"
description: Status code from target system to indicate transaction status
example: 405
error:
type: "string"
description: error message
example: Method Not Allowed
message:
type: string
description: details
path:
type: string
description: The path that caused the error
Error415:
properties:
timestamp:
type: string
format: date-time
description: Timestamp that the error occurred
example: '2021-07-21T17:32:28Z'
status:
type: "integer"
description: Status code from target system to indicate transaction status
example: 415
error:
type: "string"
description: error message
example: Unsupported Media Type
message:
type: string
description: details
path:
type: string
description: The path that caused the error
Error500:
properties:
timestamp:
type: string
format: date-time
description: Timestamp that the error occurred
example: '2021-07-21T17:32:28Z'
status:
type: string
description: status code from backend
example: '500'
error:
type: string
description: Type of error
example: "Internal Server Error"
message:
type: string
description: More details and corrective actions related to the error which can be shown to a client
example: 'Internal Server Error'
path:
type: string
description: The path that caused the error