MTN Customer Pin Management v2

To facilitate the capability for customer to create/validate/change Pin Information.

OpenAPI Specification

mtn-group-customer-pin-management-v2.yml Raw ↑
swagger: '2.0'
info:
  description: To facilitate the capability for customer to create/validate/change Pin Information.
  version: 1.0.2
  title: Customer PIN Management API

schemes:
  - https
host: api.mtn.com
basePath: /customerPinManagement/v2
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/accesstoken?grant_type=client_credentials"

security:
  - ApiKeyAuth: []
  - OAuth2: []

paths:
  /customer/{customerId}/pin:
    post:
      tags:
        - PIN
      summary: To create Pin customer will provide mandatory(customerId, secret, alternateNumber, securityQuestion, tncDetails,channel,transId) attributes. Also will provide emailID as optional input
      description: >- 
        create Pin Details, user must enter the MSISDN/Service Number of Customer, the PIN number, alternate mobile Number , Answer for the Security Question and valid channel id. Finally the user will enter the Unique Trans ID as per below format yyyymmddhhmmss<UniqueSequenceNumber> i.e 20200711123459103
      operationId: createCutomerPin
      parameters:
        - name: "transactionId"
          in: header
          description: 'Client generated Id to include for tracing requests.'
          type: string
          required: false
          x-example: '6f0bece6-7df3-4da4-af02-5e7f16e5e6fc'
        - name: customerId
          in: path
          required : true
          type: "string"
          description: "Customer id will be act as serviceNumber and it can Customer's msisdn, serviceId, accountId, or invoiceId."
        - name: countryCode
          in: header
          description: "Country ISO code. Must be ISO 3166-1 alpha-3 codes (It is a 3 character string)"
          required: false
          type: string
          enum:
            - NGA
            - UGA
            - ZAF
            - RWA
        - name: "secret"
          in: header
          description: 'PIN number to be set'
          type: string
          format: base64
          required: true
          x-example: 'MTIzNDU2Nzg5MTA='
        - name: "repeatedSecret"
          in: header 
          description: "A repeated secret to validate the provided  secret"
          type: string 
          required: false
          x-example: "1234455"  
        - name: "emailID"
          in: header
          description: 'Customer’s Email ID'
          type: string
          required: false
          x-example: 'sharma.anuj@tecnotree.com'
        - name: "alternateNumber"
          in: header
          description: 'An alternative identifier associated with the customer, ie. a mobile number, a repeat of secret etc.'
          type: string
          required: false
          x-example: '12345678910'
      
        - name: "tncDetails"
          in: header
          description: 'Terms & Condition should be “1.0” or as configured for the channel, not required if target system is EWP for PSB IVR'
          type: string
          required: false
          x-example: '1.0'
        - name: "channel"
          in: header
          description: 'Name of the channel, can be a channel information, a credential type depending on the backend system'
          type: string
          x-example: "CONVIVA"
          required: true
        - name: targetSystem
          type: string
          in: query
          enum: [EWP]
          description: The backend system expected to fulfil the request
        - name: X-Authorization
          type: string
          in: header
          description: Client credentials to be authenticated by EWP or ECW
        - name: description   
          in: header 
          description: A request info, can be a bank domain name etc.
          type: string 
          x-example: "TESTYDFS"
        - name: currency 
          in: query 
          description: A currency
          type: string 
          x-example: "NGN"  
        - name: invitationCode 
          in: query 
          description: "An invitation code associated with the PIN creation"
          type: string 
          x-example: "12345"  
        - name: segment
          type: string
          in: query
          required: false
          description: This is the type of customer doing the transaction. This can be customer, agent or admin
        - name: idType
          type: string
          in: query
          required: false
          description: Type of the customerId in the path.
          enum: [MSISDN, USER]
        - name: body
          in: body
          description: "Security Question and Answer Details, not required when target system is EWP for PSB IVR"
          required: false
          schema:
            $ref: "#/definitions/SecurityQuestionAnswers"

      responses:
        '200':
          description: 'Success'
          schema:
            $ref: "#/definitions/CreatePinResponse"
        '400':
          description: "Bad Request"
          schema:
            $ref: "#/definitions/Error"
        '401':
          description: "Unauthorized"
          schema:
            $ref: "#/definitions/Error"
        '403':
          description: "Forbidden"
          schema:
            $ref: "#/definitions/Error"
        '404':
          description: "Customer not found"
          schema:
            $ref: "#/definitions/Error"
          examples:
            The services object/envelope will be null: >
              {
                "services": null
              }
        '405':
          description: "Method Not allowed"
          schema:
            $ref: "#/definitions/Error"
        '500':
          description: "Internal Server Error"
          schema:
            $ref: "#/definitions/Error"


    get:
      tags:
        - PIN
      summary: To validate Pin  Details  user will enter (customerId, secret, channel, transId) Attributes
      description: >-
        To validate Pin Details, user must enter the MSISDN/Service Number of Customer, the PIN number, channel id. Finally the user will enter the Unique Trans ID as per below format yyyymmddhhmmss<UniqueSequenceNumber> i.e 20200711123459104
      operationId: validateCutomerPin
      parameters:
        - name: "transactionId"
          in: header
          description: 'Client generated Id to include for tracing requests.'
          type: string
          required: false
          x-example: '6f0bece6-7df3-4da4-af02-5e7f16e5e6fc'
        - name: customerId
          in: path
          required : true
          type: "string"
          description: "Customer id will be act as serviceNumber and it can Customer's msisdn, serviceId, accountId, or invoiceId."
        - name: countryCode
          in: header
          description: "Country ISO code. Must be ISO 3166-1 alpha-3 codes (It is a 3 character string)"
          required: false
          type: string
          enum:
            - NGA
            - UGA
            - ZAF
            - RWA
        - name: "secret"
          in: header
          description: 'PIN number to be set'
          type: string
          format: base64
          required: true
          x-example: 'MTIzNDU2Nzg5MTA='
        - name: "channel"
          in: header
          description: 'channel'
          type: string
          required: true
          x-example: '12345678910'


      responses:
        '200':
          description: 'Success'
          schema:
            $ref: "#/definitions/ValidatePinResponse"
        '400':
          description: "Bad Request"
          schema:
            $ref: "#/definitions/Error"
        '401':
          description: "Unauthorized"
          schema:
            $ref: "#/definitions/Error"
        '403':
          description: "Forbidden"
          schema:
            $ref: "#/definitions/Error"
        '404':
          description: "Customer not found"
          schema:
            $ref: "#/definitions/Error"
          examples:
            The services object/envelope will be null: >
              {
                "services": null
              }
        '405':
          description: "Method Not allowed"
          schema:
            $ref: "#/definitions/Error"
        '500':
          description: "Internal Server Error"
          schema:
            $ref: "#/definitions/Error"


    put:
      tags:
        - PIN
      summary: To change Pin  Details user will enter (customerId, operationType, currentSecret, newSecret,channel,transId) Attributes
      description: >-
        To change Pin Details, user must enter the 'MSISDN/Service Number of Customer'. User has to enter the 'current Secret/PIN' and 'New Secret/PIN'. User will enter Security Answer selected during first time Secret/PIN Creation. Finally the user will enter the 'channel id' & 'Unique Trans ID as per below format yyyymmddhhmmss<UniqueSequenceNumber> i.e 20200711123459105
      operationId: changeCutomerPin
      parameters:
        - name: "transactionId"
          in: header
          description: 'Client generated Id to include for tracing requests.'
          type: string
          required: false
          x-example: '6f0bece6-7df3-4da4-af02-5e7f16e5e6fc'
        - name: customerId
          in: path
          required : true
          type: "string"
          description: "Customer id will be act as serviceNumber and it can Customer's msisdn, serviceId, accountId, or invoiceId."
        - name: countryCode
          in: header
          description: "Country ISO code. Must be ISO 3166-1 alpha-3 codes (It is a 3 character string)"
          required: false
          type: string
          enum:
            - NGA
            - UGA
            - ZAF
            - RWA
        - name: "currentSecret"
          in: header
          description: 'Customers current secret/pin'
          type: string
          format: base64
          required: false
          x-example: 'MTIzNDU2Nzg5MTA='
        - name: "repeatedSecret"
          in: header
          description: 'Customers repeated password'
          type: string
          required: false
          x-example: '1234'
        - name: "newSecret"
          in: header
          description: 'Customers new secret/pin'
          type: string
          format: base64
          required: true
          x-example: 'MTIzNDU2Nzg5MTA='
        - name: "securityAnswer"
          in: header
          description: 'Give secured answer'
          type: string
          required: false
          x-example: 'BMW'
        - name: "channel"
          in: header
          description: 'channel'
          type: string
          required: false
          x-example: '12345678910'
        - name: targetSystem
          in: query
          type: string
          required: false
          enum: [CIS,EWP]
          description: The backend system expected to fulfil the request
        - name: X-Authorization
          type: string
          in: header
          description: Client credentials to be authenticated by EWP or ECW
        - name: segment
          type: string
          in: query
          required: false
          description: This is the type of customer doing the transaction. This can be customer, agent or admin
        - name: idType
          type: string
          in: query
          required: false
          description: Type of the customerId in the path.
          enum: [MSISDN, USER]
        - name: requestType
          type: string
          in: query
          description: The type of operation being performed in the change
          enum: [CHANGE_PIN, RESET_PIN]


      responses:
        '200':
          description: 'Success'
          schema:
            $ref: "#/definitions/ChangePinResponse"
        '400':
          description: "Bad Request"
          schema:
            $ref: "#/definitions/Error"
        '401':
          description: "Unauthorized"
          schema:
            $ref: "#/definitions/Error"
        '403':
          description: "Forbidden"
          schema:
            $ref: "#/definitions/Error"
        '404':
          description: "Customer not found"
          schema:
            $ref: "#/definitions/Error"
          examples:
            The services object/envelope will be null: >
              {
                "services": null
              }
        '405':
          description: "Method Not allowed"
          schema:
            $ref: "#/definitions/Error"
        '500':
          description: "Internal Server Error"
          schema:
            $ref: "#/definitions/Error"

    patch:
      tags:
        - PIN
      summary: To reset Pin  Details user will enter (customerId, operationType, validateAnswers, motherName,dateOfBirth,stateOfOrigin,channel,transId) Attributes
      description: >- 
         To reset Pin Details, user must enter the 'MSISDN/Service Number of Customer'. User has to enter the Y-indicates validate security answer,
         N-indicates no validation for Validate Answers'. User will enter Mothers maiden name also will enter the Date of Birth in format YYYY-MM-DD and State of Origin code.
         Finally the user will enter the 'channel id' & 'Unique Trans ID as per below format yyyymmddhhmmss<UniqueSequenceNumber> i.e 20200711123459105
      operationId: resetCutomerPin
      parameters:
        - name: "transactionId"
          in: header
          description: 'Client generated Id to include for tracing requests.'
          type: string
          required: false
          x-example: '6f0bece6-7df3-4da4-af02-5e7f16e5e6fc'
        - name: customerId
          in: path
          required : true
          type: "string"
          description: "Customer id will be act as serviceNumber and it can Customer's msisdn, serviceId, accountId, or invoiceId."
        - name: countryCode
          in: header
          description: "Country ISO code. Must be ISO 3166-1 alpha-3 codes (It is a 3 character string)"
          required: false
          type: string
          enum:
            - NGA
            - UGA
            - ZAF
            - RWA
        - name: "validateAnswers"
          in: header
          description: 'Y-indicates validate security answer, N-indicates no validation'
          type: string
          required: false
          x-example: 'Y'
        - name: "motherName"
          in: query
          description: 'Mothers maiden name'
          type: string
          required: false
          x-example: 'abcd'
        - name: "dateOfBirth"
          in: query
          description: 'Date of Birth in format YYYY-MM-DD'
          type: string
          required: false
          x-example: '2020-10-13'
        - name: "stateOfOrigin"
          in: query
          description: 'State of Origin code'
          type: string
          required: false
          x-example: '+91'
        - name: "channel"
          in: header
          description: 'channel'
          type: string
          required: true
          x-example: '12345678910'
        - name: "idNumber"
          in: query
          description: 'Customer ID'
          type: string
          required: false
          x-example: '12345678910'
        - name: description
          in: query
          type: string
          required: false
        - name: targetSystem
          in: query
          type: string
          required: false
          enum: [CIS]
      responses:
        '200':
          description: 'Success'
          schema:
            $ref: "#/definitions/resetPinResponse"
        '400':
          description: "Bad Request"
          schema:
            $ref: "#/definitions/Error"
        '401':
          description: "Unauthorized"
          schema:
            $ref: "#/definitions/Error"
        '403':
          description: "Forbidden"
          schema:
            $ref: "#/definitions/Error"
        '404':
          description: "Customer not found"
          schema:
            $ref: "#/definitions/Error"
          examples:
            The services object/envelope will be null: >
              {
                "services": null
              }
        '405':
          description: "Method Not allowed"
          schema:
            $ref: "#/definitions/Error"
        '500':
          description: "Internal Server Error"
          schema:
            $ref: "#/definitions/Error"

  /customer/{customerId}/pinProfile:
    put:
      tags:
        - PIN
      summary: To change Pin  Details user will enter (customerId, operationType,securityQuestion,securityAnswer,channel,emailID,tncDetails) Attributes
      description: >-
         To change Pin Details, user must enter the 'MSISDN/Service Number of Customer'. User will enter Security Answer to be updated. Finally the user will enter the 'channel id'
      operationId: chanageSecurityQnACutomerPin
      parameters:
        - name: "transactionId"
          in: header
          description: 'Client generated Id to include for tracing requests.'
          type: string
          required: false
          x-example: '6f0bece6-7df3-4da4-af02-5e7f16e5e6fc'
        - name: customerId
          in: path
          required : true
          type: "string"
          description: "Customer id will be act as serviceNumber and it can Customer's msisdn, serviceId, accountId, or invoiceId."
        - name: countryCode
          in: header
          description: "Country ISO code. Must be ISO 3166-1 alpha-3 codes (It is a 3 character string)"
          required: false
          type: string
          enum:
            - NGA
            - UGA
            - ZAF
            - RWA
        - name: "channel"
          in: query
          description: 'channel'
          type: string
          required: false
          x-example: '12345678910'
        - name: "operationType"
          in: query
          description: "Specify the operation of the request"
          type: string
          enum:
            - UpdateQA
            - UpdateEmailID
            - UpdateTNC
          required: true
          x-example: "updateQA"
        - name: "emailID"
          in: header
          description: 'Customer’s Email ID'
          type: string
          required: false
        - name: "tncDetails"
          in: header
          description: 'Terms & Condition should be “1.0” or as configured for the channel'
          type: string
          required: false
        - name: body
          in: body
          description: "Security Question and Answer Details"
          required: false
          schema:
            $ref: "#/definitions/SecurityQuestionAnswers"

      responses:
        '200':
          description: 'Success'
          schema:
            $ref: "#/definitions/ValidateSecurityAnswerResponse"
        '400':
          description: "Bad Request"
          schema:
            $ref: "#/definitions/Error"
        '401':
          description: "Unauthorized"
          schema:
            $ref: "#/definitions/Error"
        '403':
          description: "Forbidden"
          schema:
            $ref: "#/definitions/Error"
        '404':
          description: "Customer not found"
          schema:
            $ref: "#/definitions/Error"
          examples:
            The services object/envelope will be null: >
              {
                "services": null
              }
        '405':
          description: "Method Not allowed"
          schema:
            $ref: "#/definitions/Error"
        '500':
          description: "Internal Server Error"
          schema:
            $ref: "#/definitions/Error"
    get:
      tags:
        - PIN
      summary: To get Pin profile Details user will enter (customerId, operationType,securityQuestion,securityAnswer,channel) Attributes
      description: >-
        To get Pin Details, user must enter the 'MSISDN/Service Number of Customer'. User will enter Security Answer to be updated. Finally the user will enter the 'channel id'
      operationId: getProfileDetails
      parameters:
        - name: "transactionId"
          in: header
          description: 'Client generated Id to include for tracing requests.'
          type: string
          required: false
          x-example: '6f0bece6-7df3-4da4-af02-5e7f16e5e6fc'
        - name: customerId
          in: path
          required : true
          type: "string"
          description: "Customer id will be act as serviceNumber and it can Customer's msisdn, serviceId, accountId, or invoiceId."
        - name: countryCode
          in: header
          description: "Country ISO code. Must be ISO 3166-1 alpha-3 codes (It is a 3 character string)"
          required: false
          type: string
          enum:
            - NGA
            - UGA
            - ZAF
            - RWA
        - name: "channel"
          in: query
          description: 'channel'
          type: string
          required: false
          x-example: '12345678910'
        - name: "operationType"
          in: query
          description: "Specify the operation of the request"
          type: string
          enum:
            - QueryProfile
            - QueryTNC
          required: true
          x-example: "QueryTNC"

      responses:
        '200':
          description: 'Success'
          schema:
            $ref: "#/definitions/GetProfileDetailsResponse"
        '400':
          description: "Bad Request"
          schema:
            $ref: "#/definitions/Error"
        '401':
          description: "Unauthorized"
          schema:
            $ref: "#/definitions/Error"
        '403':
          description: "Forbidden"
          schema:
            $ref: "#/definitions/Error"
        '404':
          description: "Customer not found"
          schema:
            $ref: "#/definitions/Error"
          examples:
            The services object/envelope will be null: >
              {
                "services": null
              }
        '405':
          description: "Method Not allowed"
          schema:
            $ref: "#/definitions/Error"
        '500':
          description: "Internal Server Error"
          schema:
            $ref: "#/definitions/Error"
definitions:

  SecurityQuestionAnswers:
    type: array
    items:
      type:  object
      properties:
        SecurityQuestionAnswer:
          $ref: "#/definitions/securityquestionAnswer"


  securityquestionAnswer:
    type: object
    required:
      - name
    properties:
      securityQuestion:
        type: string
        example: string
        description: "user will enter security question"
      securityAnswer:
        type: string
        example: string
        description: "user will enter answer for security question"


  ValidatePinResponse:
    type: object
    required:
      - name
    properties:
      statusCode:
        type: string
        example: "0000"
        description: "Success API code. '0000' in case of success"
      statusMessage:
        type: string
        example: "String"
      transactionId:
        type: string
        example: "String"
      data:
        type: object
        $ref: "#/definitions/ValidatePinResponseData"
  ValidatePinResponseData:
    type: "object"
    title: "ValidatePinResponseData"
    properties:
      message:
        type: "string"
        example: "Subscriber secret authenticated successfully"
        description: "API Success Message. i.e. Subscriber secret authenticated successfully"
      forcePasswordChange:
        type: string
        example: "false"
        description: "true/false"
      securityQuestionAvailable:
        type: string
        example: "true"
      emailID:
        type: string
        example: "sharma.anuj@tecnotree.com"
      tncAccepted:
        type: array
        items:
          type: string
        example:
          - Version: "2.0"
            AcceptedDate: "2020-07-11T13:43:30.830Z"
      tncLastUpdtdate:
        type: string
        example: "2020-07-01T10:10:11.830Z"
      tncLastUpdtversion:
        type: string
        example: "2.0"
  ChangePinResponse:
    type: object
    required:
      - name
    properties:
      statusCode:
        type: string
        example: "0000"
        description: "Success API code. '0000' in case of success"
      statusMessage:
        type: string
        example: "String"
      transactionId:
        type: string
        example: "String"
      customerId:
        type: string
        example: "String"
      data:
        type: object
        $ref: "#/definitions/ChangePinResponseData"
  ChangePinResponseData:
    type: "object"
    title: "ChangePinResponseData"
    properties:
      message:
        type: "string"
        example: "Subscriber secret has been changed and SMS sent successfully"
        description: "API Success Message.i.e. Subscriber secret has been changed and SMS sent successfully"
      amountCharged:
        type: object
        properties:
          value:
            type: number
          unit:
            type: string

  resetPinResponse:
    type: object
    required:
      - name
    properties:
      statusCode:
        type: string
        example: "0000"
        description: "Success API code. '0000' in case of success"
      statusMessage:
        type: string
        example: "String"
      transactionId:
        type: string
        example: "String"
      data:
        type: object
        $ref: "#/definitions/ResetPinResponseData"
  ResetPinResponseData:
    type: "object"
    title: "ResetPinResponseData"
    properties:
      message:
        type: "string"
        example: "pin changed and SMS sent to customer Successfully"
        description: "API Success Message.i.e. Pin changed and SMS sent to customer Successfully"
      amountCharged:
        type: object
        properties:
          value:
            type: number
          unit:
            type: string
  ValidateSecurityAnswerResponse:
    type: object
    required:
      - name
    properties:
      statusCode:
        type: string
        example: "0000"
        description: "Success API code. '0000' in case of success"
      statusMessage:
        type: string
        example: "String"
      transactionId:
        type: string
        example: "String"
      data:
        type: object
        $ref: "#/definitions/ValidateSecurityAnswerResponseData"
  ValidateSecurityAnswerResponseData:
    type: "object"
    title: "ValidateSecurityAnswerResponseData"
    properties:
      message:
        type: "string"
        example: "Subscriber answer validated successfully"
        description: "API Success Message.i.e. Subscriber answer validated successfully"

  GetProfileDetailsResponse:
    type: object
    required:
      - name
    properties:
      statusCode:
        type: string
        example: "0000"
        description: "Success API code. '0000' in case of success"
      statusMessage:
        type: string
        example: "String"
      transactionId:
        type: string
        example: "String"
      data:
        type: object
        $ref: "#/definitions/GetProfileDetailsResponseData"
  GetProfileDetailsResponseData:
    type: "object"
    title: "GetProfileDetailsResponseData"
    properties:
      message:
        type: "string"
        example: "Terms & Conditions retreived Successfully"
        description: "API Success Message. i.e. This is Smartapp Terms & Conditions"
  chanageSecurityQnAResponse:
    type: object
    required:
      - name
    properties:
      statusCode:
        type: string
        example: "0000"
        description: "Success API code. '0000' in case of success"
      statusMessage:
        type: string
        example: "String"
      transactionId:
        type: string
        example: "String"
      data:
        type: object
        $ref: '#/definitions/chanageSecurityQnAData'
  chanageSecurityQnAData:
    type: "object"
    title: "chanageSecurityQnAData"
    properties:
      message:
        type: "string"
        example: "QA Updated Successfully"
        description: "API Success Message.i.e. QA Updated Successfully"
  CreatePinResponse:
    type: object
    required:
      - name
    properties:
      statusCode:
        type: string
        example: "0000"
        description: "Success API code. '0000' in case of success"
      statusMessage:
        type: string
        example: "String"
      transactionId:
        type: string
        example: "String"
      data:
        type: object
        $ref: "#/definitions/CreatePinResponseData"
  CreatePinResponseData:
    type: "object"
    title: "CreatePinResponseData"
    properties:
      message:
        type: "string"
        example: "Subscriber secret created successfully"
        description: "API Success Message. i.e. Subscriber secret created successfully"
  Error:
    type: object
    required:
      - "statusCode"
      - "statusMessage"
    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: '1000'
      statusMessage:
        type: string
        description: More details and corrective actions related to the error which can be shown to a client
      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: This is the same transactionId that is sent in the request
        example: 'cdfa7bc3-cbcd-473b-a743-4fc90dcc91e4'
      timestamp:
        type: string
        format: date-time
        description: Timestamp that the error occurred
        example: '2020-08-01T12:34'
      path:
        type: string
        description: The path that caused the error
        example: '/customers/234805738473/pin'
      method:
        type: string
        description: The HTTP method type that was used
        example: 'GET'