swagger: "2.0" info: version: "v1.0" title: MTN Customer Management API description: An API to register MoMo on Tier 0 for BSS. Please refer to the reference guides https://developers.mtn.com/API-Reference-Guides and Response and Error Codes documents https://developers.mtn.com/ResponseCodes schemes: - https host: "api.mtn.com" basePath: "/v1/customerManagement" consumes: - "application/json" produces: - "application/json" securityDefinitions: ApiKeyAuth: type: "apiKey" name: "X-API-Key" in: "header" paths: /momo/tier0/registration: post: description: "Registers customer on MoMo Tier 0." summary: "MoMo Tier 0 Registration" tags: - "MoMo" parameters: - in: header type: string name: X-Authorization description: "An authorization key" - in: query name: allowDuplicate required: false type: string - in: header name: targetSystem required: false type: string - in: "body" name: "body" description: "Registration Request to be initiated on GSM Account" required: true schema: $ref: '#/definitions/RegistrationRequestBody' responses: 200: description: "Registration Response. For a successful request, it will contain the transaction id and status of Registration." schema: $ref: "#/definitions/MomoRegistrationResponse" 400: description: "Bad Request" schema: $ref: "#/definitions/APIError" 409: description: "Conflict. ID already exists as a subscriber" schema: $ref: "#/definitions/APIError" /momo/tier0/{id}/link/account: post: description: "Link a newly created account to an existing one" summary: "Link a newly created wallet to an existing extended account holder data" produces: - "application/json" tags: - "Link Accounts" parameters: - name: X-Authorization in: header type: string description: An authorization key to be provided - name: id in: path required: true type: string description: ID of an already existing extended account holder. ie. MSISDN - name: transactionId in: header type: string x-example: "xxxxxxx" - name: targetSystem in: header x-example: "ECW" type: string required: false - name: body in: body schema: $ref: "#/definitions/LinkAccountData" responses: 200: description: "Registration Response. For a successful request, it will contain the transaction id and status of Registration." schema: $ref: "#/definitions/MomoRegistrationResponse" 400: description: "Bad Request" schema: $ref: "#/definitions/APIError" 409: description: "Conflict. ID already exists as a subscriber" schema: $ref: "#/definitions/APIError" definitions: LinkAccountData: type: object required: - registrationDetails properties: registrationDetails: type: object description: Information of the account holder's secondary account to be created and linked to an existing account $ref: "#/definitions/AccountHolderRegistrationData" languageCode: type: string description: An optional valid language code quoteId: type: string description: ID of the quote to use additionInformationList: type: array items: $ref: "#/definitions/AdditionalInformationListData" docReferenceInformationList: type: array description: Contains reference information about a KYC document stored on an external document system items: $ref: "#/definitions/DocumentReferenceInformationListData" AccountHolderRegistrationData: type: object required: - msisdn - username - email properties: accountHolderId: type: string description: A uniquie identifier or an account number of the accounts to be linked example: '0100002009300' profileName: type: string description: A description of the account to be registered and linked, profile details timeout: type: number description: A timeout in seconds default: 30 bankDomainName: type: string description: Name of the bank eg. EcoBank example: "EcoBank, AccessBank" AdditionalInformationListData: type: object description: Any other information of the account holder properties: firstName: type: string lastName: type: string contactNumber: type: string otherName: type: string description: Other name of the account holder residentialAddress: type: string RegistrationRequestBody: type: "object" required: - "relatedParty" - "individualIndentification" - "contactMedium" - "accountHolder" properties: relatedParty: $ref: "#/definitions/RelatedParty" individualIndentification: $ref: '#/definitions/IndividualIdentification' # companyInformation: # $ref: "#/definitions/CompanyInformation" # guardianInformation: # $ref: "#/definitions/AdditionalInformationListData" # nextOfKinInformation: # $ref: "#/definitions/AdditionalInformationListData" contactMedium: $ref: '#/definitions/ContactMedium' partyCharacteristic: $ref: '#/definitions/Characteristic' # additionalInformationList: # type: array # items: # $ref: "#/definitions/AdditionalInformationListData" # documentReferenceInformationList: # type: array # items: # $ref: "#/definitions/DocumentReferenceInformationListData" DocumentReferenceInformationListData: type: object properties: documentReferenceNumber: type: string documentName: type: string RelatedParty: required: - customerMsisdn type: object properties: customerMsisdn: type: string description: Unique msisdn to be registered for the customer. example: 233559999781 msisdnVerificationCode: type: string maxLength: 64 description: An optional msisdn verification code for validating the account holder's msisdn description: Related Entity reference. A related party defines party or party role linked to a specific entity. CompanyInformation: type: object description: All details associated with the company of the account holder properties: companyName: type: string description: Name of a company companyAddress: type: string description: Address companyType: type: string description: What the company does eg. SOFTWARE etc. Characteristic: required: - name - value type: object properties: username: type: string description: a valid unique username of the account holder email: type: string description: A valid unique email address of the account holder emailVerificationCode: type: string maxLength: 64 description: OTP to validate the email address languageCode: type: string description: An optional valid language code alias: type: string description: An alias for the account holder acceptedTCVersion: type: string quoteId: type: string description: Quote ID to use parentAccountHolderId: type: string description: A valid identity associatd with a parent account holder mlngInd: type: string regnAdrInd: type: "boolean" example: true mnrInd: type: "boolean" example: true profession: type: string clearingNumber: type: string securityQuestion: type: string securityQuestionAnswer: type: string bankAccountNumber: type: string description: A bank account number bankDomainName: type: string profileName: type: string description: "The profile to be created for the customer during registration" example: "MTNGH Minimum KYC Subscriber Profile" externalId: type: string givenName: type: string description: First name of the individual example: John middleName: type: string description: Middles name or initial example: K. familyName: type: string description: Contains the non-chosen or inherited name. Also known as last name in the Western context example: Doe fullName: type: string description: Full name flatten (first, middle, and last names) example: John Doe gender: type: string description: Gender example: "MALE" enum: - "MALE" - "FEMALE" countryOfBirth: type: string description: Country where the individual was born example: GH cityOfBirth: type: string description: City where the individual was born example: Accra birthDate: type: string description: Birth date using format YYYY-MM-DD format: date-time example: "1987-01-14" nationality: type: string description: Nationality example: GH familyNameSuffix: type: string title: type: string example: Mr postalAddressName: type: string taxNumber: type: string taxRegion: type: string timeout: type: string example: "30" description: Describes a given characteristic of an object xor entity through a name/value pair. IndividualIdentification: type: object properties: individualId: type: string description: Unique alphanumeric string for the document used to identify the individual example: G7888777 indentificationType: type: string enum: ['PASS','CPFA','SRSA','NRIN','OTHR','DRLC','SOCS','AREG','IDCD'] description: Identification type (passport, national identity card, drivers license, social security number, birth certificate) issuingAuthority: type: string issuingDate: type: string description: Date of the format yyyy-MM-dd example: "2019-05-15" expiryDate: type: string description: Date of the format yyyy-MM-dd example: "2019-05-15" ContactMedium: type: object properties: mediumType: type: string description: Contact Medium Type example: Postal characteristic: $ref: '#/definitions/ContactMediumCharacteristic' description: Indicates the contact medium that could be used to contact the party. ContactMediumCharacteristic: type: object properties: city: type: string description: City stateOrProvince: type: string description: State or province country: type: string description: Contact country example: 'GH' contactType: type: string description: 'Type of address' enum: ['HOME','BIZZ'] name: type: string description: Address Name town: type: string description: Town Name street: type: string description: Street Name postalCode: type: string description: Zip Code example: 00233 addressLines: type: array description: First Address Line items: type: string description: Indicates the contact medium that could be used to contact the party. MomoRegistrationResponse: type: "object" required: - "accountHolderIdentity" - "accountHolderIdentityType" - "statusCode" - "transactionId" properties: accountHolderIdentity: type: "string" description: "The ID of resource created" example: "9230088" accountHolderIdentityType: type: "string" description: "The type of ID for the resource created" example: "ID" statusCode: type: "string" description: "The status code for operation" example: "0000" transactionId: type: string description: "The transaction Id created for the request" example: "A3344098765456" APIError: type: object required: - "statusMessage" - "supportMessage" - "transactionId" - "timestamp" - "path" - "method" properties: statusMessage: type: string supportMessage: type: string transactionId: type: string timestamp: type: string example: "2020-08-19 09:09:09" path: type: string description: "endpoint path used to make request" method: type: string description: "HTTP Method used to make request" example: GET