openapi: 3.0.1 info: title: Loan V2 description: "This API facilitates loan-in-advance services for MTN customers (i.e.,\ \ checking eligible loan bundles and provisioning loan bundles)." license: name: MADAPI url: https://developers.mtn.com/ version: 3.0.0 - Last updated date:2026-09-21 11:08:15 servers: - url: https://api.mtn.com/v1 description: Production Server security: - OAuth2: [] tags: - name: Loan paths: /customers/{customerId}/loans/advance: post: tags: - Loan summary: Gets a loan advance. description: This operation enables the capability of Getting a loan advance for an MTN customer using customer id(unique identifier). operationId: Loan_post_getLoanAdvance_customerscustomerIdl parameters: - name: allowPoll in: query required: false schema: type: boolean - name: bearer in: header required: false schema: type: string - name: bundleValue in: query required: false schema: type: string - name: channelId in: header required: false schema: type: string - name: customerId in: path required: true schema: type: string - name: prefLanguage in: query required: false schema: type: string - name: serviceId in: query required: false schema: type: string - name: targetSystem in: header required: false schema: type: string - name: transactionId in: header required: false schema: type: string - name: x-channel-id in: header required: false schema: type: string - name: x-country-code in: header required: false schema: type: string - name: x-loan-key in: header required: false schema: type: string - name: x-origin-channelid in: header required: false schema: type: string requestBody: content: application/json: schema: title: BundleRequest type: object properties: bundleName: type: string bundleValue: type: string prefLang: type: string repay: type: string fee: type: string amount: type: string bundleType: type: string correlationId: type: string currency: type: string serviceType: type: string loanProviderId: type: string loanProviderFRI: type: string customerAccountFRI: type: string callbackURL: type: string isBundlePurchase: type: boolean checkCreditRecord: type: boolean customerId: type: string loanTransactionDetails: $ref: '#/components/schemas/za_co_mtn_aggregator_model_eligibility_LoanTransactionDetails' bundleId: type: string sourceRequestId: type: string required: true responses: "200": description: HTTP 200 indicating the request succeeded; the response body follows the documented schema for this operation and includes correlation identifiers where applicable for traceability across MTN MADAPI loan v2 flows. content: application/json: schema: title: LoanResponse type: object properties: statusMessage: type: string customerId: type: string loanDetails: $ref: '#/components/schemas/za_co_mtn_aggregator_model_eligibility_Bundle' sequenceNo: type: string channelId: type: string statusCode: type: string transactionId: type: string supportMessage: type: string timeStamp: type: string path: type: string data: type: string "400": description: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "400" statusMessage: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "401": description: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "401" statusMessage: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "403": description: Forbidden. Access denied. The request is valid but the server refuses to perform it. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "403" statusMessage: Forbidden. Access denied. The request is valid but the server refuses to perform it. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "404": description: Not found. The requested resource was not found or does not exist. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "404" statusMessage: Not found. The requested resource was not found or does not exist. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "500": description: "Internal server error. Unexpected system failure, database\ \ connectivity issues, or external service integration problems." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "500" statusMessage: "Internal server error. Unexpected system failure,\ \ database connectivity issues, or external service integration\ \ problems." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "502": description: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "502" statusMessage: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "503": description: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "503" statusMessage: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z deprecated: false /customers/{customerId}/loans/advance/status: get: tags: - Loan summary: Gets loan advance status. description: This operation enables the capability of getting a loan advance status for an MTN customer using customer id(unique identifier). operationId: Loan_get_checkLoanStatus_customerscustomerIdl parameters: - name: channelId in: header required: false schema: type: string - name: customerId in: path required: true schema: type: string - name: internalLoanId in: header required: false schema: type: string - name: targetSystem in: header required: false schema: type: string - name: transactionId in: header required: true schema: type: string - name: x-country-code in: header required: false schema: type: string - name: x-loan-key in: header required: false schema: type: string - name: x-origin-channelid in: header required: false schema: type: string responses: "200": description: HTTP 200 indicating the request succeeded; the response body follows the documented schema for this operation and includes correlation identifiers where applicable for traceability across MTN MADAPI loan v2 flows. content: application/json: schema: title: LoanStatusResponse type: object properties: statusMessage: type: string data: title: DataDetails type: object properties: status: type: string timestamp: type: string loanInfo: title: LoanInfo type: object properties: loan: title: Loan type: object properties: loanId: type: string internalLoanId: type: string externalLoanId: type: string loanTimeStamp: type: string loanState: type: string loanReason: type: string loanReasonDetails: type: array items: title: LoanReasonDetails type: object properties: userApp: type: string loanOffer: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_eligibility_LoanOffer' due: type: boolean dueStartTimestamp: type: string report: title: Report type: object properties: repayment: title: Repayment type: object properties: repaymentsCount: type: integer format: int64 gross: type: integer format: int64 principal: type: integer format: int64 setupFees: type: integer format: int64 interest: type: integer format: int64 interestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 chargesVAT: type: integer format: int64 charges: type: integer format: int64 outstanding: title: Outstanding type: object properties: currencyCode: type: string numOutstandingLoans: type: integer format: int64 totalGross: type: integer format: int64 totalPrincipal: type: integer format: int64 totalSetupFees: type: integer format: int64 totalInterest: type: integer format: int64 totalInterestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 totalPendingRecoveries: type: integer format: int64 plan: title: Plan type: object properties: currentPeriod: type: string daysLeftInPeriod: type: integer format: int64 nextPeriod: type: string events: type: array items: title: Event type: object properties: eventType: type: string eventTypeDetails: title: EventTypeDetails type: object properties: isPassiveAdvance: type: boolean pendingOperationId: type: integer format: int64 advanceFailedFailureType: type: string getAdvanceFailedNeStatus: type: string eventStatus: type: string eventTransactionId: type: string thirdPartyTransactionId: type: string eventReason: type: string eventReasonDetails: type: array items: title: EventReasonDetails type: object properties: userApp: type: string period: type: string periodIndex: type: integer format: int64 periodExpirationTimestamp: type: string principalAdjustment: type: string principalBefore: type: string principalAfter: type: string setupFeesAdjustment: type: string setupFeesBefore: type: string setupFeesAfter: type: string interestAdjustment: type: string interestAdjustmentVAT: type: string interestBefore: type: string interestAfter: type: string totalChargesAdjustment: type: string totalChargesAdjustmentVAT: type: string totalChargesBefore: type: string totalChargesAfter: type: string eventTimestamp: type: string receptionTimestamp: type: string processingTimestamp: type: string sourceRequestId: type: string offerName: type: string commodityType: type: string currencyCode: type: string principalAmount: type: string setupFees: type: string loanPlanId: type: integer format: int64 maturityDetails: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_eligibility_MaturityDetails' loanId: type: string internalLoanId: type: string externalLoanId: type: string loanTimestamp: type: string loanState: type: string loanReason: type: string loanReasonDetails: type: array items: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_loanstatus_LoanReasonDetails' report: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_loanstatus_Report' events: type: array items: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_loanstatus_Event' sequenceNo: type: string channelId: type: string customerId: type: string statusCode: type: string transactionId: type: string supportMessage: type: string timeStamp: type: string path: type: string "400": description: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "400" statusMessage: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "401": description: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "401" statusMessage: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "403": description: Forbidden. Access denied. The request is valid but the server refuses to perform it. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "403" statusMessage: Forbidden. Access denied. The request is valid but the server refuses to perform it. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "404": description: Not found. The requested resource was not found or does not exist. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "404" statusMessage: Not found. The requested resource was not found or does not exist. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "500": description: "Internal server error. Unexpected system failure, database\ \ connectivity issues, or external service integration problems." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "500" statusMessage: "Internal server error. Unexpected system failure,\ \ database connectivity issues, or external service integration\ \ problems." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "502": description: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "502" statusMessage: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "503": description: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "503" statusMessage: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z deprecated: false /customers/{customerId}/loans/availableBalance: get: tags: - Loan summary: Retrieves XtraTime Balance for an MTN customer . description: This operation enables the capability of retrieving XtraTime Balance for an MTN customer using customer id(unique identifier). operationId: Loan_get_getXtraTimeBalance_customerscustomerIdl parameters: - name: channelId in: header required: false schema: type: string - name: customerId in: path required: true schema: type: string - name: nodeId in: header required: false schema: type: string - name: serviceId in: header required: false schema: type: string - name: targetSystem in: header required: false schema: type: string - name: transactionId in: header required: false schema: type: string - name: type in: query required: false schema: type: string - name: x-loan-key in: header required: false schema: type: string - name: x-origin-channelid in: header required: false schema: type: string responses: "200": description: HTTP 200 indicating the request succeeded; the response body follows the documented schema for this operation and includes correlation identifiers where applicable for traceability across MTN MADAPI loan v2 flows. content: application/json: schema: title: XtraTimeBalanceResponse type: object properties: statusMessage: type: string data: title: Plan type: object properties: xtraTimeBalanceDetails: type: array items: title: XtraTimeBalanceDetail type: object properties: accountId: type: string accountName: type: string availableBalance: type: string availableBalanceUom: type: string sequenceNo: type: string loan-count: type: integer format: int32 total-loan-balance: type: number format: double statusCode: type: string transactionId: type: string supportMessage: type: string timeStamp: type: string path: type: string "400": description: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "400" statusMessage: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "401": description: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "401" statusMessage: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "403": description: Forbidden. Access denied. The request is valid but the server refuses to perform it. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "403" statusMessage: Forbidden. Access denied. The request is valid but the server refuses to perform it. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "404": description: Not found. The requested resource was not found or does not exist. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "404" statusMessage: Not found. The requested resource was not found or does not exist. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "500": description: "Internal server error. Unexpected system failure, database\ \ connectivity issues, or external service integration problems." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "500" statusMessage: "Internal server error. Unexpected system failure,\ \ database connectivity issues, or external service integration\ \ problems." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "502": description: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "502" statusMessage: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "503": description: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "503" statusMessage: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z deprecated: false /customers/{customerId}/loans/eligibility: get: tags: - Loan summary: Retrieves the list of eligibility loan. description: This operation enables the retrieving of a loan eligibility status of an MTN customerby using customer id(unique identifier). operationId: Loan_get_checkEligibilityOffer_customerscustomerIdl parameters: - name: amount in: query required: false schema: type: string - name: channelId in: header required: false schema: type: string - name: customerId in: path required: true schema: type: string - name: lookup3PP in: query required: false schema: type: boolean - name: targetSystem in: header required: false schema: type: string - name: transactionId in: header required: false schema: type: string - name: type in: query required: false schema: type: string - name: x-country-code in: header required: false schema: type: string - name: x-loan-key in: header required: false schema: type: string - name: x-origin-channelid in: header required: false schema: type: string responses: "200": description: HTTP 200 indicating the request succeeded; the response body follows the documented schema for this operation and includes correlation identifiers where applicable for traceability across MTN MADAPI loan v2 flows. content: application/json: schema: title: EligibilityOfferResponse type: object properties: code: type: string message: type: string identityValue: type: string identityType: type: string origSource: type: string receivedTimestamp: type: string offerSelector: type: string eligibilityStatus: title: EligibilityStatus type: object properties: isEligible: type: boolean eligibilityStatus: type: string eligibilityStatusByCommodity: type: array items: title: EligibilityStatusByCommodity type: object properties: eligibilityStatus: type: string commodityType: title: CommodityType type: object properties: name: type: string loanOffer: title: LoanOffer type: object properties: offerClass: type: string offerName: type: string advanceOfferId: type: string currencyCode: type: string principalAmount: type: string setupFees: type: string commodityType: $ref: '#/components/schemas/com_mtn_madapi_enums_CommodityType' commodityDetails: title: CommodityDetails type: object properties: validity: type: integer format: int64 validityPeriod: type: string dataAmount: type: string dataUnit: type: string allNetVoiceMinutes: type: string allNetUnit: type: string onNetAirtime: type: string onNetUnit: type: string loanPlanId: type: string loanPlanName: type: string loanProductGroup: type: string maturityDetails: title: MaturityDetails type: object properties: maturityDuration: type: integer format: int32 dueOffsetInDays: type: integer format: int32 principalFrom: type: string principalTo: type: string outstandingStatus: type: array items: title: OutstandingStatus type: object properties: currencyCode: type: string numOutstandingLoans: type: string totalGross: type: string totalPrincipal: type: string totalSetupFees: type: string totalInterest: type: string totalInterestVAT: type: string totalCharges: type: string totalChargesVAT: type: string dynamicCreditLimit: type: string totalPendingLoans: type: string totalPendingRecoveries: type: string availableCreditLimit: type: string transactionId: type: string lookUp3PP: type: boolean sequenceNo: type: string refundMethod: type: string countryCode: type: string serviceId: type: string targetSystem: type: string bearer: type: string onNetAirtime: type: string allNetVoiceMinutes: type: string advanceOfferId: type: string sourceRequestId: type: string filterWithEvents: type: string projectionsUpToPeriod: type: string msisdn: type: string endpoint: type: string eligibilityCheck: type: string bandGroup: type: string "400": description: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "400" statusMessage: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "401": description: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "401" statusMessage: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "403": description: Forbidden. Access denied. The request is valid but the server refuses to perform it. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "403" statusMessage: Forbidden. Access denied. The request is valid but the server refuses to perform it. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "404": description: Not found. The requested resource was not found or does not exist. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "404" statusMessage: Not found. The requested resource was not found or does not exist. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "500": description: "Internal server error. Unexpected system failure, database\ \ connectivity issues, or external service integration problems." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "500" statusMessage: "Internal server error. Unexpected system failure,\ \ database connectivity issues, or external service integration\ \ problems." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "502": description: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "502" statusMessage: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "503": description: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "503" statusMessage: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z deprecated: false /customers/{customerId}/loans/eligibleBundle: get: tags: - Loan summary: Retrieves the list of eligible loan bundles description: This operation enables the capability of retrieving loan eligibility status(eligible loan bundles) of an MTN customer by using customer id(unique identifier). operationId: Loan_get_checkEligibility_customerscustomerIdl parameters: - name: amount in: query required: false schema: type: string - name: channelId in: header required: false schema: type: string - name: customerId in: path required: true schema: type: string - name: idType in: query required: false schema: type: string - name: lookup3PP in: query required: false schema: type: boolean - name: prefLang in: query required: false schema: type: string - name: serviceId in: query required: false schema: type: string - name: targetSystem in: header required: false schema: type: string - name: transactionId in: header required: false schema: type: string - name: type in: query required: false schema: type: string - name: x-channel-id in: header required: false schema: type: string - name: x-country-code in: header required: false schema: type: string - name: x-loan-key in: header required: false schema: type: string - name: x-origin-channelid in: header required: false schema: type: string responses: "200": description: HTTP 200 indicating the request succeeded; the response body follows the documented schema for this operation and includes correlation identifiers where applicable for traceability across MTN MADAPI loan v2 flows. content: application/json: schema: title: EligibilityResponse type: object properties: statusMessage: type: string eligibilityStatus: type: string eligible: type: array items: title: Eligibility type: object properties: eligibilityType: type: string bundles: type: array items: title: Bundle type: object properties: bundleName: type: string bundleValue: type: string bandGroup: type: string bundleType: type: string maximumBalance: type: string amount: type: string correlationId: type: string currency: type: string serviceType: type: string loanProviderId: type: string loanProviderFRI: type: string customerAccountFRI: type: string validity: type: string serviceFee: type: string fee: type: string repay: type: string productid: type: string customerId: type: string bundleGroup: type: string bundleId: type: string creditServiceId: type: string quantity: type: string unit: type: string feePercentage: type: string totalAmount: type: string primaryLoanId: type: string internalLoanId: type: string offerName: type: string additionalInfo: type: array items: title: AdditionalInfo type: object properties: name: type: string value: type: string offerClass: type: string bandName: type: string maturityDuration: type: integer format: int32 bundleName: type: string bundleId: type: string currency: type: string totalAmount: type: string fee: type: string bundleType: type: string loanId: type: integer format: int32 bandGroup: type: string dueOffsetInDays: type: integer format: int32 commodityDetails: title: CommodityDetails type: object properties: validityPeriod: type: string dataAmount: type: integer format: int32 validity: type: integer format: int32 dataUnit: type: string commodityProvisioningDetails: title: CommodityProvisioningDetails type: object properties: subscriptionSystem: type: string productId: type: string subscriptionProductId: type: string DABenefit: type: string loanTransactionDetails: title: LoanTransactionDetails type: object properties: bearer: type: string feeAmount: type: string feeAmountLeft: type: string loanAmount: type: string loanAmountLeft: type: string loanTransactionType: type: string serviceType: type: string serviceId: type: string dateTime: type: string sequenceNo: type: string serviceq: type: number format: double _links: type: string amount: type: array items: type: number format: double qualifiedAmount: type: number format: double loanBalance: type: number format: double customerId: type: string eligibilityStatusByCommodity: type: array items: title: EligibilityStatusByCommodity type: object properties: commodityType: type: string eligibilityStatus: type: string lang: type: string statusCode: type: string transactionId: type: string supportMessage: type: string timeStamp: type: string path: type: string data: type: string "400": description: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "400" statusMessage: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "401": description: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "401" statusMessage: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "403": description: Forbidden. Access denied. The request is valid but the server refuses to perform it. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "403" statusMessage: Forbidden. Access denied. The request is valid but the server refuses to perform it. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "404": description: Not found. The requested resource was not found or does not exist. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "404" statusMessage: Not found. The requested resource was not found or does not exist. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "500": description: "Internal server error. Unexpected system failure, database\ \ connectivity issues, or external service integration problems." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "500" statusMessage: "Internal server error. Unexpected system failure,\ \ database connectivity issues, or external service integration\ \ problems." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "502": description: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "502" statusMessage: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "503": description: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "503" statusMessage: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z deprecated: false /customers/{customerId}/loans/history: get: tags: - Loan summary: Gets loan history. description: This operation enables the capability of retrieving loan history for an MTN customer using customer id(unique identifier). operationId: Loan_get_getHistory_customerscustomerIdl parameters: - name: bundleType in: query required: false schema: type: string - name: channelId in: query required: false schema: type: string - name: customerId in: path required: true schema: type: string - name: endDate in: query required: false schema: type: string - name: eventType in: query required: false schema: type: string - name: idType in: query required: false schema: type: string - name: identityType in: query required: false schema: type: string - name: limit in: query required: false schema: type: integer format: int32 - name: loanState in: query required: false schema: type: string - name: ordering in: query required: false schema: type: string - name: startDate in: query required: false schema: type: string - name: targetSystem in: header required: false schema: type: string - name: transactionId in: header required: false schema: type: string - name: x-country-code in: header required: false schema: type: string - name: x-loan-key in: header required: false schema: type: string - name: x-origin-channelid in: header required: false schema: type: string responses: "200": description: HTTP 200 indicating the request succeeded; the response body follows the documented schema for this operation and includes correlation identifiers where applicable for traceability across MTN MADAPI loan v2 flows. content: application/json: schema: title: LoanHistoryResponse type: object properties: statusCode: type: string statusMessage: type: string customerId: type: string idType: type: string channelId: type: string identityType: type: string receivedTimestamp: type: string timeStamp: type: string data: title: LoanHistoryResponseData type: object properties: operationList: type: array items: title: LoanHistory type: object properties: type: type: string eventTypeDetails: title: TypeDetails type: object properties: isPassiveAdvance: type: boolean pendingOperationId: type: integer format: int32 isCommodityProvisioned: type: boolean typeDetails: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_TypeDetails' operationStatus: type: string transactionId: type: string reason: type: string eventReasonDetails: type: array items: title: LoanReasonDetails type: object properties: userApp: type: string shortCode: type: string reasonDetails: type: array items: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_LoanReasonDetails' eventType: type: string period: type: string periodIndex: type: integer format: int32 transactionStatus: type: string expirationTimestamp: type: string periodExpirationTimestamp: type: string adjustedPrincipal: type: string principalBefore: type: string principalAfter: type: string adjustedSetupFees: type: string beforeSetupFees: type: string afterSetupFees: type: string eventTimestamp: type: string receptionTimestamp: type: string processingTimestamp: type: string channelId: type: string offerName: type: string commodityType: type: string currencyCode: type: string principalAmount: type: string setupFees: type: string loanPlanId: type: integer format: int32 loanPlanName: type: string maturityDuration: type: integer format: int32 loanReason: type: string loanReasonDetails: type: array items: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_LoanReasonDetails' projectSpecific: type: object additionalProperties: type: string loanId: type: string internalLoanId: type: string loanTimestamp: type: string loanState: type: string isDue: type: boolean dueStartTimestamp: type: string operationId: type: string feeAmount: type: string principalLeft: type: string principalAdjustment: type: string feeLeft: type: string feeAdjustment: type: string timestamp: type: string msisdn: type: string channel: type: string loanBand: title: LoanBand type: object properties: bandName: type: string bandGroup: type: integer format: int32 interestAdjustment: type: string interestAdjustmentVAT: type: string interestBefore: type: string interestAfter: type: string totalChargesAdjustment: type: string totalChargesAdjustmentVAT: type: string totalChargesBefore: type: string totalChargesAfter: type: string remoteRequestId: type: string remoteResponseId: type: string sourceRequestId: type: string loanProductGroup: type: string loanDetails: type: string externalLoanId: type: string sequenceNo: type: string transactionId: type: string supportMessage: type: string path: type: string "400": description: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "400" statusMessage: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "401": description: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "401" statusMessage: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "403": description: Forbidden. Access denied. The request is valid but the server refuses to perform it. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "403" statusMessage: Forbidden. Access denied. The request is valid but the server refuses to perform it. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "404": description: Not found. The requested resource was not found or does not exist. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "404" statusMessage: Not found. The requested resource was not found or does not exist. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "500": description: "Internal server error. Unexpected system failure, database\ \ connectivity issues, or external service integration problems." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "500" statusMessage: "Internal server error. Unexpected system failure,\ \ database connectivity issues, or external service integration\ \ problems." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "502": description: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "502" statusMessage: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "503": description: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "503" statusMessage: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z deprecated: false /customers/{customerId}/loans/open: get: tags: - Loan summary: Get a list of open loans and data. description: This operation enables the capability of retrieving Open Loans and data for an MTN customer using customer id(unique identifier). operationId: Loan_get_getOpenLoan_customerscustomerIdl parameters: - name: channelId in: header required: false schema: type: string - name: customerId in: path required: true schema: type: string - name: x-loan-key in: header required: false schema: type: string - name: x-origin-channelid in: header required: false schema: type: string responses: "200": description: HTTP 200 indicating the request succeeded; the response body follows the documented schema for this operation and includes correlation identifiers where applicable for traceability across MTN MADAPI loan v2 flows. content: application/json: schema: title: OpenLoanResponse type: object properties: statusMessage: type: string timestamp: type: string data: title: OpenLoanResponseData type: object properties: loanList: type: array items: title: LoanListItem type: object properties: feeAmount: type: number format: double loanBand: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_LoanBand' outstandingPrincipalAmount: type: number format: double loanId: type: string principalAmount: type: number format: double outstandingFeeAmount: type: number format: double lastLoanDate: type: integer format: int64 outstandingPerCurrency: type: array items: title: OutstandingPerCurrency type: object properties: currencyCode: type: string availableCreditLimit: type: string dynamicCreditLimit: type: string totalCreditLimit: type: integer format: int64 numOutstandingLoans: type: integer format: int32 totalGross: type: integer format: int64 totalPrincipal: type: integer format: int64 totalSetupFees: type: integer format: int64 totalInterest: type: integer format: int64 totalInterestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 totalPendingLoans: type: integer format: int64 totalPendingRecoveries: type: integer format: int64 thirdPartyData: type: array items: title: ThirdPartyData type: object properties: activationDate: type: string accounts: type: array items: title: Accounts type: object properties: accountType: type: string accountId: type: number format: double accountBalance: type: number format: double sequenceNo: type: string customerId: type: string channel: type: string statusCode: type: string transactionId: type: string supportMessage: type: string timeStamp: type: string path: type: string "400": description: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "400" statusMessage: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "401": description: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "401" statusMessage: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "403": description: Forbidden. Access denied. The request is valid but the server refuses to perform it. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "403" statusMessage: Forbidden. Access denied. The request is valid but the server refuses to perform it. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "404": description: Not found. The requested resource was not found or does not exist. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "404" statusMessage: Not found. The requested resource was not found or does not exist. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "500": description: "Internal server error. Unexpected system failure, database\ \ connectivity issues, or external service integration problems." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "500" statusMessage: "Internal server error. Unexpected system failure,\ \ database connectivity issues, or external service integration\ \ problems." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "502": description: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "502" statusMessage: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "503": description: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "503" statusMessage: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z deprecated: false /customers/{customerId}/loans/refund: post: tags: - Loan summary: Retrieves refund loan. description: This operation enables the capability of retrieving a loan refund status of an MTN customer by using customer id(unique identifier). operationId: Loan_post_getLoansRefund_customerscustomerIdl parameters: - name: channelId in: header required: false schema: type: string - name: customerId in: path required: true schema: type: string - name: targetSystem in: header required: false schema: type: string - name: transactionId in: header required: false schema: type: string - name: x-country-code in: header required: false schema: type: string - name: x-loan-key in: header required: false schema: type: string - name: x-origin-channelid in: header required: false schema: type: string requestBody: content: application/json: schema: title: RefundBody type: object properties: sequenceNo: type: string refundMethod: type: string required: true responses: "200": description: HTTP 200 indicating the request succeeded; the response body follows the documented schema for this operation and includes correlation identifiers where applicable for traceability across MTN MADAPI loan v2 flows. content: application/json: schema: title: LoanRefundResponse type: object properties: code: type: string message: type: string saae-code: type: string saae-msn: type: string identityValue: type: string identityType: type: string origSource: type: string sourceRequestId: type: string externalLoanId: type: string transactionId: type: string receivedTimestamp: type: string lookUp3PP: type: boolean sequenceNo: type: string refundMethod: type: string countryCode: type: string serviceId: type: string targetSystem: type: string bearer: type: string onNetAirtime: type: string allNetVoiceMinutes: type: string advanceOfferId: type: string filterWithEvents: type: string projectionsUpToPeriod: type: string msisdn: type: string endpoint: type: string eligibilityCheck: type: string bandGroup: type: string "400": description: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "400" statusMessage: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "401": description: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "401" statusMessage: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "403": description: Forbidden. Access denied. The request is valid but the server refuses to perform it. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "403" statusMessage: Forbidden. Access denied. The request is valid but the server refuses to perform it. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "404": description: Not found. The requested resource was not found or does not exist. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "404" statusMessage: Not found. The requested resource was not found or does not exist. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "500": description: "Internal server error. Unexpected system failure, database\ \ connectivity issues, or external service integration problems." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "500" statusMessage: "Internal server error. Unexpected system failure,\ \ database connectivity issues, or external service integration\ \ problems." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "502": description: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "502" statusMessage: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "503": description: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "503" statusMessage: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z deprecated: false /customers/{customerId}/loans/repayLoanAdvance: post: tags: - Loan summary: Repay the pre-existing loan before grace period. description: This operation enables the capability of repaying the pre-existing loan before grace period for an MTN customer using customer id. operationId: Loan_post_repayLoanAdvance_customerscustomerIdl parameters: - name: channelId in: header required: true schema: type: string - name: customerId in: path required: true schema: type: string - name: loanId in: query required: false schema: type: string - name: targetSystem in: header required: false schema: type: string - name: transactionId in: header required: true schema: type: string - name: x-loan-key in: header required: false schema: type: string - name: x-origin-channelid in: header required: false schema: type: string responses: "200": description: HTTP 200 indicating the request succeeded; the response body follows the documented schema for this operation and includes correlation identifiers where applicable for traceability across MTN MADAPI loan v2 flows. content: application/json: schema: title: RepayLoanAdvanceResponse type: object properties: statusMessage: type: string customerId: type: string supportMessage: type: string statusCode: type: string transactionId: type: string timeStamp: type: string path: type: string data: type: string "400": description: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "400" statusMessage: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "401": description: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "401" statusMessage: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "403": description: Forbidden. Access denied. The request is valid but the server refuses to perform it. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "403" statusMessage: Forbidden. Access denied. The request is valid but the server refuses to perform it. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "404": description: Not found. The requested resource was not found or does not exist. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "404" statusMessage: Not found. The requested resource was not found or does not exist. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "500": description: "Internal server error. Unexpected system failure, database\ \ connectivity issues, or external service integration problems." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "500" statusMessage: "Internal server error. Unexpected system failure,\ \ database connectivity issues, or external service integration\ \ problems." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "502": description: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "502" statusMessage: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "503": description: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "503" statusMessage: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z deprecated: false /customers/{customerId}/loans/serviceBands: get: tags: - Loan summary: Retrieves the list of service bands. description: This operation enables the capability of retrieving the list of service bands(bundle names available in the backend system). operationId: Loan_get_getServiceBands_customerscustomerIdl parameters: - name: channelId in: header required: false schema: type: string - name: customerId in: path required: true schema: type: string - name: responseType in: query required: false schema: type: string - name: transactionId in: header required: false schema: type: string - name: x-loan-key in: header required: false schema: type: string - name: x-origin-channelid in: header required: false schema: type: string responses: "200": description: HTTP 200 indicating the request succeeded; the response body follows the documented schema for this operation and includes correlation identifiers where applicable for traceability across MTN MADAPI loan v2 flows. content: application/json: schema: title: ServiceBandsResponse type: object properties: statusMessage: type: string timestamp: type: string bundles: type: array items: title: ExtendedBundle type: object properties: bundleName: type: string bandGroup: type: string bandFee: type: string bandAmount: type: string sequenceNo: type: string statusCode: type: string transactionId: type: string supportMessage: type: string timeStamp: type: string path: type: string data: type: string "400": description: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "400" statusMessage: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "401": description: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "401" statusMessage: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "403": description: Forbidden. Access denied. The request is valid but the server refuses to perform it. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "403" statusMessage: Forbidden. Access denied. The request is valid but the server refuses to perform it. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "404": description: Not found. The requested resource was not found or does not exist. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "404" statusMessage: Not found. The requested resource was not found or does not exist. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "500": description: "Internal server error. Unexpected system failure, database\ \ connectivity issues, or external service integration problems." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "500" statusMessage: "Internal server error. Unexpected system failure,\ \ database connectivity issues, or external service integration\ \ problems." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "502": description: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "502" statusMessage: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "503": description: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "503" statusMessage: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z deprecated: false /customers/{customerId}/loans/serviceExclude: put: tags: - Loan summary: Exclude services for user description: This operation enables the capability of excluding(blacklisting) services for a specific customer using customer id(unique identifier). operationId: Loan_put_excludeService_customerscustomerIdl parameters: - name: channelId in: header required: true schema: type: string - name: customerId in: path required: true schema: type: string - name: transactionId in: header required: true schema: type: string - name: x-loan-key in: header required: false schema: type: string - name: x-origin-channelid in: header required: false schema: type: string responses: "200": description: HTTP 200 indicating the request succeeded; the response body follows the documented schema for this operation and includes correlation identifiers where applicable for traceability across MTN MADAPI loan v2 flows. content: application/json: schema: $ref: '#/components/schemas/za_co_mtn_aggregator_model_response_loan_LoanStatusResponse' "400": description: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "400" statusMessage: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "401": description: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "401" statusMessage: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "403": description: Forbidden. Access denied. The request is valid but the server refuses to perform it. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "403" statusMessage: Forbidden. Access denied. The request is valid but the server refuses to perform it. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "404": description: Not found. The requested resource was not found or does not exist. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "404" statusMessage: Not found. The requested resource was not found or does not exist. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "500": description: "Internal server error. Unexpected system failure, database\ \ connectivity issues, or external service integration problems." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "500" statusMessage: "Internal server error. Unexpected system failure,\ \ database connectivity issues, or external service integration\ \ problems." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "502": description: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "502" statusMessage: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "503": description: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "503" statusMessage: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z deprecated: false /customers/{customerId}/loans/specialList: get: tags: - Loan summary: Check if user is on the special list description: This operation enables the capability of checking if a customer is on a special list using customer id(unique identifier). operationId: Loan_get_getSpecialList_customerscustomerIdl parameters: - name: channelId in: header required: false schema: type: string - name: customerId in: path required: true schema: type: string - name: specialListName in: query required: false schema: type: string - name: transactionId in: header required: false schema: type: string - name: x-loan-key in: header required: false schema: type: string - name: x-origin-channelid in: header required: false schema: type: string responses: "200": description: HTTP 200 indicating the request succeeded; the response body follows the documented schema for this operation and includes correlation identifiers where applicable for traceability across MTN MADAPI loan v2 flows. content: application/json: schema: $ref: '#/components/schemas/za_co_mtn_aggregator_model_response_loan_LoanSpecialListResponse' "400": description: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "400" statusMessage: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "401": description: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "401" statusMessage: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "403": description: Forbidden. Access denied. The request is valid but the server refuses to perform it. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "403" statusMessage: Forbidden. Access denied. The request is valid but the server refuses to perform it. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "404": description: Not found. The requested resource was not found or does not exist. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "404" statusMessage: Not found. The requested resource was not found or does not exist. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "500": description: "Internal server error. Unexpected system failure, database\ \ connectivity issues, or external service integration problems." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "500" statusMessage: "Internal server error. Unexpected system failure,\ \ database connectivity issues, or external service integration\ \ problems." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "502": description: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "502" statusMessage: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "503": description: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "503" statusMessage: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z deprecated: false put: tags: - Loan summary: Add a customer to a special list description: This operation enables the capability of adding an MTN customer to a special list using customer id(unique identifier). operationId: Loan_put_addCustomerToSpecialList_customerscustomerIdl parameters: - name: channelId in: header required: false schema: type: string - name: customerId in: path required: true schema: type: string - name: specialListName in: query required: false schema: type: string - name: transactionId in: header required: false schema: type: string - name: x-loan-key in: header required: false schema: type: string - name: x-origin-channelid in: header required: false schema: type: string responses: "200": description: HTTP 200 indicating the request succeeded; the response body follows the documented schema for this operation and includes correlation identifiers where applicable for traceability across MTN MADAPI loan v2 flows. content: application/json: schema: title: LoanSpecialListResponse type: object properties: statusCode: type: string statusMessage: type: string transactionId: type: string enable: type: string sequenceNo: type: string supportMessage: type: string timeStamp: type: string path: type: string data: type: string "400": description: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "400" statusMessage: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "401": description: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "401" statusMessage: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "403": description: Forbidden. Access denied. The request is valid but the server refuses to perform it. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "403" statusMessage: Forbidden. Access denied. The request is valid but the server refuses to perform it. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "404": description: Not found. The requested resource was not found or does not exist. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "404" statusMessage: Not found. The requested resource was not found or does not exist. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "500": description: "Internal server error. Unexpected system failure, database\ \ connectivity issues, or external service integration problems." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "500" statusMessage: "Internal server error. Unexpected system failure,\ \ database connectivity issues, or external service integration\ \ problems." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "502": description: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "502" statusMessage: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "503": description: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "503" statusMessage: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z deprecated: false delete: tags: - Loan summary: Delete a user from a special list description: This operation enables the capability of deleting an MTN customer from a special list using customer id(unique identifier). operationId: Loan_delete_deleteSpecialList_customerscustomerIdl parameters: - name: channelId in: header required: false schema: type: string - name: customerId in: path required: true schema: type: string - name: specialListName in: query required: false schema: type: string - name: transactionId in: header required: false schema: type: string - name: x-loan-key in: header required: false schema: type: string - name: x-origin-channelid in: header required: false schema: type: string responses: "200": description: HTTP 200 indicating the request succeeded; the response body follows the documented schema for this operation and includes correlation identifiers where applicable for traceability across MTN MADAPI loan v2 flows. content: application/json: schema: $ref: '#/components/schemas/za_co_mtn_aggregator_model_response_loan_LoanSpecialListResponse' "400": description: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "400" statusMessage: "Bad request. Invalid request parameters, missing required\ \ fields, or validation errors." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "401": description: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "401" statusMessage: "Unauthorized. Invalid or missing authorization credentials,\ \ insufficient permissions, or authentication failure." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "403": description: Forbidden. Access denied. The request is valid but the server refuses to perform it. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "403" statusMessage: Forbidden. Access denied. The request is valid but the server refuses to perform it. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "404": description: Not found. The requested resource was not found or does not exist. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "404" statusMessage: Not found. The requested resource was not found or does not exist. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "500": description: "Internal server error. Unexpected system failure, database\ \ connectivity issues, or external service integration problems." content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "500" statusMessage: "Internal server error. Unexpected system failure,\ \ database connectivity issues, or external service integration\ \ problems." supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "502": description: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "502" statusMessage: Bad gateway. The server acting as a gateway received an invalid response from an upstream server. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z "503": description: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. content: application/json: schema: $ref: '#/components/schemas/APIError' example: statusCode: "503" statusMessage: Service unavailable. The server is temporarily unable to handle the request due to maintenance or overload. supportMessage: API_ERROR transactionId: "1234567890" sequenceNo: "20250115120000001" timestamp: 2025-01-15T12:00:00Z deprecated: false components: schemas: com_mtn_madapi_models_optasia_loanstatus_Report: title: Report type: object properties: repayment: title: Repayment type: object properties: repaymentsCount: type: integer format: int64 gross: type: integer format: int64 principal: type: integer format: int64 setupFees: type: integer format: int64 interest: type: integer format: int64 interestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 chargesVAT: type: integer format: int64 charges: type: integer format: int64 outstanding: title: Outstanding type: object properties: currencyCode: type: string numOutstandingLoans: type: integer format: int64 totalGross: type: integer format: int64 totalPrincipal: type: integer format: int64 totalSetupFees: type: integer format: int64 totalInterest: type: integer format: int64 totalInterestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 totalPendingRecoveries: type: integer format: int64 plan: title: Plan type: object properties: currentPeriod: type: string daysLeftInPeriod: type: integer format: int64 nextPeriod: type: string za_co_mtn_aggregator_model_response_loan_XtraTimeBalanceDetail: title: XtraTimeBalanceDetail type: object properties: accountId: type: string accountName: type: string availableBalance: type: string availableBalanceUom: type: string com_mtn_madapi_models_optasia_loanstatus_LoanInfo: title: LoanInfo type: object properties: loan: title: Loan type: object properties: loanId: type: string internalLoanId: type: string externalLoanId: type: string loanTimeStamp: type: string loanState: type: string loanReason: type: string loanReasonDetails: type: array items: title: LoanReasonDetails type: object properties: userApp: type: string loanOffer: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_eligibility_LoanOffer' due: type: boolean dueStartTimestamp: type: string report: title: Report type: object properties: repayment: title: Repayment type: object properties: repaymentsCount: type: integer format: int64 gross: type: integer format: int64 principal: type: integer format: int64 setupFees: type: integer format: int64 interest: type: integer format: int64 interestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 chargesVAT: type: integer format: int64 charges: type: integer format: int64 outstanding: title: Outstanding type: object properties: currencyCode: type: string numOutstandingLoans: type: integer format: int64 totalGross: type: integer format: int64 totalPrincipal: type: integer format: int64 totalSetupFees: type: integer format: int64 totalInterest: type: integer format: int64 totalInterestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 totalPendingRecoveries: type: integer format: int64 plan: title: Plan type: object properties: currentPeriod: type: string daysLeftInPeriod: type: integer format: int64 nextPeriod: type: string events: type: array items: title: Event type: object properties: eventType: type: string eventTypeDetails: title: EventTypeDetails type: object properties: isPassiveAdvance: type: boolean pendingOperationId: type: integer format: int64 advanceFailedFailureType: type: string getAdvanceFailedNeStatus: type: string eventStatus: type: string eventTransactionId: type: string thirdPartyTransactionId: type: string eventReason: type: string eventReasonDetails: type: array items: title: EventReasonDetails type: object properties: userApp: type: string period: type: string periodIndex: type: integer format: int64 periodExpirationTimestamp: type: string principalAdjustment: type: string principalBefore: type: string principalAfter: type: string setupFeesAdjustment: type: string setupFeesBefore: type: string setupFeesAfter: type: string interestAdjustment: type: string interestAdjustmentVAT: type: string interestBefore: type: string interestAfter: type: string totalChargesAdjustment: type: string totalChargesAdjustmentVAT: type: string totalChargesBefore: type: string totalChargesAfter: type: string eventTimestamp: type: string receptionTimestamp: type: string processingTimestamp: type: string sourceRequestId: type: string offerName: type: string commodityType: type: string currencyCode: type: string principalAmount: type: string setupFees: type: string loanPlanId: type: integer format: int64 maturityDetails: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_eligibility_MaturityDetails' loanId: type: string internalLoanId: type: string externalLoanId: type: string loanTimestamp: type: string loanState: type: string loanReason: type: string loanReasonDetails: type: array items: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_loanstatus_LoanReasonDetails' za_co_mtn_aggregator_model_eligibility_LoanTransactionDetails: title: LoanTransactionDetails type: object properties: bearer: type: string feeAmount: type: string feeAmountLeft: type: string loanAmount: type: string loanAmountLeft: type: string loanTransactionType: type: string serviceType: type: string serviceId: type: string dateTime: type: string za_co_mtn_aggregator_model_eligibility_Bundle: title: Bundle type: object properties: bundleName: type: string bundleValue: type: string bandGroup: type: string bundleType: type: string maximumBalance: type: string amount: type: string correlationId: type: string currency: type: string serviceType: type: string loanProviderId: type: string loanProviderFRI: type: string customerAccountFRI: type: string validity: type: string serviceFee: type: string fee: type: string repay: type: string productid: type: string customerId: type: string bundleGroup: type: string bundleId: type: string creditServiceId: type: string quantity: type: string unit: type: string feePercentage: type: string totalAmount: type: string primaryLoanId: type: string internalLoanId: type: string offerName: type: string additionalInfo: type: array items: title: AdditionalInfo type: object properties: name: type: string value: type: string offerClass: type: string bandName: type: string maturityDuration: type: integer format: int32 bundleName: type: string bundleId: type: string currency: type: string totalAmount: type: string fee: type: string bundleType: type: string loanId: type: integer format: int32 bandGroup: type: string dueOffsetInDays: type: integer format: int32 commodityDetails: title: CommodityDetails type: object properties: validityPeriod: type: string dataAmount: type: integer format: int32 validity: type: integer format: int32 dataUnit: type: string commodityProvisioningDetails: title: CommodityProvisioningDetails type: object properties: subscriptionSystem: type: string productId: type: string subscriptionProductId: type: string DABenefit: type: string loanTransactionDetails: title: LoanTransactionDetails type: object properties: bearer: type: string feeAmount: type: string feeAmountLeft: type: string loanAmount: type: string loanAmountLeft: type: string loanTransactionType: type: string serviceType: type: string serviceId: type: string dateTime: type: string za_co_mtn_aggregator_model_loan_LoanBand: title: LoanBand type: object properties: bandName: type: string bandGroup: type: integer format: int32 com_mtn_madapi_models_optasia_loanopen_OutstandingPerCurrency: title: OutstandingPerCurrency type: object properties: currencyCode: type: string availableCreditLimit: type: string dynamicCreditLimit: type: string totalCreditLimit: type: integer format: int64 numOutstandingLoans: type: integer format: int32 totalGross: type: integer format: int64 totalPrincipal: type: integer format: int64 totalSetupFees: type: integer format: int64 totalInterest: type: integer format: int64 totalInterestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 totalPendingLoans: type: integer format: int64 totalPendingRecoveries: type: integer format: int64 com_mtn_madapi_models_optasia_loanopen_ThirdPartyData: title: ThirdPartyData type: object properties: activationDate: type: string accounts: type: array items: title: Accounts type: object properties: accountType: type: string accountId: type: number format: double accountBalance: type: number format: double com_mtn_madapi_models_optasia_eligibility_MaturityDetails: title: MaturityDetails type: object properties: maturityDuration: type: integer format: int32 dueOffsetInDays: type: integer format: int32 com_mtn_madapi_models_optasia_loanstatus_Loan: title: Loan type: object properties: loanId: type: string internalLoanId: type: string externalLoanId: type: string loanTimeStamp: type: string loanState: type: string loanReason: type: string loanReasonDetails: type: array items: title: LoanReasonDetails type: object properties: userApp: type: string loanOffer: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_eligibility_LoanOffer' due: type: boolean dueStartTimestamp: type: string za_co_mtn_aggregator_model_response_loan_LoanHistoryResponse: title: LoanHistoryResponse type: object properties: statusCode: type: string statusMessage: type: string customerId: type: string idType: type: string channelId: type: string identityType: type: string receivedTimestamp: type: string timeStamp: type: string data: title: LoanHistoryResponseData type: object properties: operationList: type: array items: title: LoanHistory type: object properties: type: type: string eventTypeDetails: title: TypeDetails type: object properties: isPassiveAdvance: type: boolean pendingOperationId: type: integer format: int32 isCommodityProvisioned: type: boolean typeDetails: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_TypeDetails' operationStatus: type: string transactionId: type: string reason: type: string eventReasonDetails: type: array items: title: LoanReasonDetails type: object properties: userApp: type: string shortCode: type: string reasonDetails: type: array items: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_LoanReasonDetails' eventType: type: string period: type: string periodIndex: type: integer format: int32 transactionStatus: type: string expirationTimestamp: type: string periodExpirationTimestamp: type: string adjustedPrincipal: type: string principalBefore: type: string principalAfter: type: string adjustedSetupFees: type: string beforeSetupFees: type: string afterSetupFees: type: string eventTimestamp: type: string receptionTimestamp: type: string processingTimestamp: type: string channelId: type: string offerName: type: string commodityType: type: string currencyCode: type: string principalAmount: type: string setupFees: type: string loanPlanId: type: integer format: int32 loanPlanName: type: string maturityDuration: type: integer format: int32 loanReason: type: string loanReasonDetails: type: array items: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_LoanReasonDetails' projectSpecific: type: object additionalProperties: type: string loanId: type: string internalLoanId: type: string loanTimestamp: type: string loanState: type: string isDue: type: boolean dueStartTimestamp: type: string operationId: type: string feeAmount: type: string principalLeft: type: string principalAdjustment: type: string feeLeft: type: string feeAdjustment: type: string timestamp: type: string msisdn: type: string channel: type: string loanBand: title: LoanBand type: object properties: bandName: type: string bandGroup: type: integer format: int32 interestAdjustment: type: string interestAdjustmentVAT: type: string interestBefore: type: string interestAfter: type: string totalChargesAdjustment: type: string totalChargesAdjustmentVAT: type: string totalChargesBefore: type: string totalChargesAfter: type: string remoteRequestId: type: string remoteResponseId: type: string sourceRequestId: type: string loanProductGroup: type: string loanDetails: type: string externalLoanId: type: string sequenceNo: type: string transactionId: type: string supportMessage: type: string path: type: string APIError: title: APIError required: - statusCode - statusMessage type: object properties: statusCode: type: string description: Error status code statusMessage: type: string description: Human-readable error message supportMessage: type: string description: Technical support message or error code for troubleshooting transactionId: type: string description: Transaction identifier for tracking and correlation sequenceNo: type: string description: Sequence number for request tracking timestamp: type: string description: Error timestamp in ISO 8601 format format: date-time path: type: string description: API endpoint path where the error occurred method: type: string description: HTTP method of the request that caused the error downstreamStatusCode: type: string description: Downstream service error code if applicable description: Generic MADAPI error response structure za_co_mtn_aggregator_model_response_loan_LoanSpecialListResponse: title: LoanSpecialListResponse type: object properties: statusCode: type: string statusMessage: type: string transactionId: type: string enable: type: string sequenceNo: type: string supportMessage: type: string timeStamp: type: string path: type: string data: type: string com_mtn_madapi_models_optasia_eligibility_EligibilityStatusByCommodity: title: EligibilityStatusByCommodity type: object properties: eligibilityStatus: type: string commodityType: title: CommodityType type: object properties: name: type: string com_mtn_madapi_models_optasia_loanstatus_EventTypeDetails: title: EventTypeDetails type: object properties: isPassiveAdvance: type: boolean pendingOperationId: type: integer format: int64 advanceFailedFailureType: type: string getAdvanceFailedNeStatus: type: string za_co_mtn_aggregator_model_response_eligibility_AdditionalInfo: title: AdditionalInfo type: object properties: name: type: string value: type: string offerClass: type: string bandName: type: string maturityDuration: type: integer format: int32 bundleName: type: string bundleId: type: string currency: type: string totalAmount: type: string fee: type: string bundleType: type: string loanId: type: integer format: int32 bandGroup: type: string dueOffsetInDays: type: integer format: int32 commodityDetails: title: CommodityDetails type: object properties: validityPeriod: type: string dataAmount: type: integer format: int32 validity: type: integer format: int32 dataUnit: type: string commodityProvisioningDetails: title: CommodityProvisioningDetails type: object properties: subscriptionSystem: type: string productId: type: string subscriptionProductId: type: string DABenefit: type: string za_co_mtn_aggregator_model_loan_DataDetails: title: DataDetails type: object properties: status: type: string timestamp: type: string loanInfo: title: LoanInfo type: object properties: loan: title: Loan type: object properties: loanId: type: string internalLoanId: type: string externalLoanId: type: string loanTimeStamp: type: string loanState: type: string loanReason: type: string loanReasonDetails: type: array items: title: LoanReasonDetails type: object properties: userApp: type: string loanOffer: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_eligibility_LoanOffer' due: type: boolean dueStartTimestamp: type: string report: title: Report type: object properties: repayment: title: Repayment type: object properties: repaymentsCount: type: integer format: int64 gross: type: integer format: int64 principal: type: integer format: int64 setupFees: type: integer format: int64 interest: type: integer format: int64 interestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 chargesVAT: type: integer format: int64 charges: type: integer format: int64 outstanding: title: Outstanding type: object properties: currencyCode: type: string numOutstandingLoans: type: integer format: int64 totalGross: type: integer format: int64 totalPrincipal: type: integer format: int64 totalSetupFees: type: integer format: int64 totalInterest: type: integer format: int64 totalInterestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 totalPendingRecoveries: type: integer format: int64 plan: title: Plan type: object properties: currentPeriod: type: string daysLeftInPeriod: type: integer format: int64 nextPeriod: type: string events: type: array items: title: Event type: object properties: eventType: type: string eventTypeDetails: title: EventTypeDetails type: object properties: isPassiveAdvance: type: boolean pendingOperationId: type: integer format: int64 advanceFailedFailureType: type: string getAdvanceFailedNeStatus: type: string eventStatus: type: string eventTransactionId: type: string thirdPartyTransactionId: type: string eventReason: type: string eventReasonDetails: type: array items: title: EventReasonDetails type: object properties: userApp: type: string period: type: string periodIndex: type: integer format: int64 periodExpirationTimestamp: type: string principalAdjustment: type: string principalBefore: type: string principalAfter: type: string setupFeesAdjustment: type: string setupFeesBefore: type: string setupFeesAfter: type: string interestAdjustment: type: string interestAdjustmentVAT: type: string interestBefore: type: string interestAfter: type: string totalChargesAdjustment: type: string totalChargesAdjustmentVAT: type: string totalChargesBefore: type: string totalChargesAfter: type: string eventTimestamp: type: string receptionTimestamp: type: string processingTimestamp: type: string sourceRequestId: type: string offerName: type: string commodityType: type: string currencyCode: type: string principalAmount: type: string setupFees: type: string loanPlanId: type: integer format: int64 maturityDetails: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_eligibility_MaturityDetails' loanId: type: string internalLoanId: type: string externalLoanId: type: string loanTimestamp: type: string loanState: type: string loanReason: type: string loanReasonDetails: type: array items: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_loanstatus_LoanReasonDetails' report: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_loanstatus_Report' events: type: array items: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_loanstatus_Event' za_co_mtn_aggregator_model_response_loan_OpenLoanResponseData: title: OpenLoanResponseData type: object properties: loanList: type: array items: title: LoanListItem type: object properties: feeAmount: type: number format: double loanBand: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_LoanBand' outstandingPrincipalAmount: type: number format: double loanId: type: string principalAmount: type: number format: double outstandingFeeAmount: type: number format: double lastLoanDate: type: integer format: int64 outstandingPerCurrency: type: array items: title: OutstandingPerCurrency type: object properties: currencyCode: type: string availableCreditLimit: type: string dynamicCreditLimit: type: string totalCreditLimit: type: integer format: int64 numOutstandingLoans: type: integer format: int32 totalGross: type: integer format: int64 totalPrincipal: type: integer format: int64 totalSetupFees: type: integer format: int64 totalInterest: type: integer format: int64 totalInterestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 totalPendingLoans: type: integer format: int64 totalPendingRecoveries: type: integer format: int64 thirdPartyData: type: array items: title: ThirdPartyData type: object properties: activationDate: type: string accounts: type: array items: title: Accounts type: object properties: accountType: type: string accountId: type: number format: double accountBalance: type: number format: double za_co_mtn_aggregator_model_eligibility_Eligibility: title: Eligibility type: object properties: eligibilityType: type: string bundles: type: array items: title: Bundle type: object properties: bundleName: type: string bundleValue: type: string bandGroup: type: string bundleType: type: string maximumBalance: type: string amount: type: string correlationId: type: string currency: type: string serviceType: type: string loanProviderId: type: string loanProviderFRI: type: string customerAccountFRI: type: string validity: type: string serviceFee: type: string fee: type: string repay: type: string productid: type: string customerId: type: string bundleGroup: type: string bundleId: type: string creditServiceId: type: string quantity: type: string unit: type: string feePercentage: type: string totalAmount: type: string primaryLoanId: type: string internalLoanId: type: string offerName: type: string additionalInfo: type: array items: title: AdditionalInfo type: object properties: name: type: string value: type: string offerClass: type: string bandName: type: string maturityDuration: type: integer format: int32 bundleName: type: string bundleId: type: string currency: type: string totalAmount: type: string fee: type: string bundleType: type: string loanId: type: integer format: int32 bandGroup: type: string dueOffsetInDays: type: integer format: int32 commodityDetails: title: CommodityDetails type: object properties: validityPeriod: type: string dataAmount: type: integer format: int32 validity: type: integer format: int32 dataUnit: type: string commodityProvisioningDetails: title: CommodityProvisioningDetails type: object properties: subscriptionSystem: type: string productId: type: string subscriptionProductId: type: string DABenefit: type: string loanTransactionDetails: title: LoanTransactionDetails type: object properties: bearer: type: string feeAmount: type: string feeAmountLeft: type: string loanAmount: type: string loanAmountLeft: type: string loanTransactionType: type: string serviceType: type: string serviceId: type: string dateTime: type: string com_mtn_madapi_models_optasia_eligibility_EligibilityStatus: title: EligibilityStatus type: object properties: isEligible: type: boolean eligibilityStatus: type: string eligibilityStatusByCommodity: type: array items: title: EligibilityStatusByCommodity type: object properties: eligibilityStatus: type: string commodityType: title: CommodityType type: object properties: name: type: string com_mtn_madapi_models_optasia_loanstatus_Event: title: Event type: object properties: eventType: type: string eventTypeDetails: title: EventTypeDetails type: object properties: isPassiveAdvance: type: boolean pendingOperationId: type: integer format: int64 advanceFailedFailureType: type: string getAdvanceFailedNeStatus: type: string eventStatus: type: string eventTransactionId: type: string thirdPartyTransactionId: type: string eventReason: type: string eventReasonDetails: type: array items: title: EventReasonDetails type: object properties: userApp: type: string period: type: string periodIndex: type: integer format: int64 periodExpirationTimestamp: type: string principalAdjustment: type: string principalBefore: type: string principalAfter: type: string setupFeesAdjustment: type: string setupFeesBefore: type: string setupFeesAfter: type: string interestAdjustment: type: string interestAdjustmentVAT: type: string interestBefore: type: string interestAfter: type: string totalChargesAdjustment: type: string totalChargesAdjustmentVAT: type: string totalChargesBefore: type: string totalChargesAfter: type: string eventTimestamp: type: string receptionTimestamp: type: string processingTimestamp: type: string sourceRequestId: type: string offerName: type: string commodityType: type: string currencyCode: type: string principalAmount: type: string setupFees: type: string loanPlanId: type: integer format: int64 maturityDetails: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_eligibility_MaturityDetails' loanId: type: string internalLoanId: type: string externalLoanId: type: string loanTimestamp: type: string loanState: type: string loanReason: type: string loanReasonDetails: type: array items: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_loanstatus_LoanReasonDetails' com_mtn_madapi_enums_CommodityType: title: CommodityType type: object properties: name: type: string za_co_mtn_aggregator_model_response_CommodityProvisioningDetails: title: CommodityProvisioningDetails type: object properties: subscriptionSystem: type: string productId: type: string subscriptionProductId: type: string DABenefit: type: string com_mtn_madapi_models_optasia_loanstatus_Repayment: title: Repayment type: object properties: repaymentsCount: type: integer format: int64 gross: type: integer format: int64 principal: type: integer format: int64 setupFees: type: integer format: int64 interest: type: integer format: int64 interestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 chargesVAT: type: integer format: int64 charges: type: integer format: int64 za_co_mtn_aggregator_model_loan_TypeDetails: title: TypeDetails type: object properties: isPassiveAdvance: type: boolean pendingOperationId: type: integer format: int32 isCommodityProvisioned: type: boolean za_co_mtn_aggregator_model_response_loan_Plan: title: Plan type: object properties: xtraTimeBalanceDetails: type: array items: title: XtraTimeBalanceDetail type: object properties: accountId: type: string accountName: type: string availableBalance: type: string availableBalanceUom: type: string za_co_mtn_aggregator_model_response_loan_OpenLoanResponse: title: OpenLoanResponse type: object properties: statusMessage: type: string timestamp: type: string data: title: OpenLoanResponseData type: object properties: loanList: type: array items: title: LoanListItem type: object properties: feeAmount: type: number format: double loanBand: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_LoanBand' outstandingPrincipalAmount: type: number format: double loanId: type: string principalAmount: type: number format: double outstandingFeeAmount: type: number format: double lastLoanDate: type: integer format: int64 outstandingPerCurrency: type: array items: title: OutstandingPerCurrency type: object properties: currencyCode: type: string availableCreditLimit: type: string dynamicCreditLimit: type: string totalCreditLimit: type: integer format: int64 numOutstandingLoans: type: integer format: int32 totalGross: type: integer format: int64 totalPrincipal: type: integer format: int64 totalSetupFees: type: integer format: int64 totalInterest: type: integer format: int64 totalInterestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 totalPendingLoans: type: integer format: int64 totalPendingRecoveries: type: integer format: int64 thirdPartyData: type: array items: title: ThirdPartyData type: object properties: activationDate: type: string accounts: type: array items: title: Accounts type: object properties: accountType: type: string accountId: type: number format: double accountBalance: type: number format: double sequenceNo: type: string customerId: type: string channel: type: string statusCode: type: string transactionId: type: string supportMessage: type: string timeStamp: type: string path: type: string com_mtn_madapi_models_optasia_eligibility_EligibilityOfferResponse: title: EligibilityOfferResponse type: object properties: code: type: string message: type: string identityValue: type: string identityType: type: string origSource: type: string receivedTimestamp: type: string offerSelector: type: string eligibilityStatus: title: EligibilityStatus type: object properties: isEligible: type: boolean eligibilityStatus: type: string eligibilityStatusByCommodity: type: array items: title: EligibilityStatusByCommodity type: object properties: eligibilityStatus: type: string commodityType: title: CommodityType type: object properties: name: type: string loanOffer: title: LoanOffer type: object properties: offerClass: type: string offerName: type: string advanceOfferId: type: string currencyCode: type: string principalAmount: type: string setupFees: type: string commodityType: $ref: '#/components/schemas/com_mtn_madapi_enums_CommodityType' commodityDetails: title: CommodityDetails type: object properties: validity: type: integer format: int64 validityPeriod: type: string dataAmount: type: string dataUnit: type: string allNetVoiceMinutes: type: string allNetUnit: type: string onNetAirtime: type: string onNetUnit: type: string loanPlanId: type: string loanPlanName: type: string loanProductGroup: type: string maturityDetails: title: MaturityDetails type: object properties: maturityDuration: type: integer format: int32 dueOffsetInDays: type: integer format: int32 principalFrom: type: string principalTo: type: string outstandingStatus: type: array items: title: OutstandingStatus type: object properties: currencyCode: type: string numOutstandingLoans: type: string totalGross: type: string totalPrincipal: type: string totalSetupFees: type: string totalInterest: type: string totalInterestVAT: type: string totalCharges: type: string totalChargesVAT: type: string dynamicCreditLimit: type: string totalPendingLoans: type: string totalPendingRecoveries: type: string availableCreditLimit: type: string transactionId: type: string lookUp3PP: type: boolean sequenceNo: type: string refundMethod: type: string countryCode: type: string serviceId: type: string targetSystem: type: string bearer: type: string onNetAirtime: type: string allNetVoiceMinutes: type: string advanceOfferId: type: string sourceRequestId: type: string filterWithEvents: type: string projectionsUpToPeriod: type: string msisdn: type: string endpoint: type: string eligibilityCheck: type: string bandGroup: type: string com_mtn_madapi_models_optasia_loanopen_Accounts: title: Accounts type: object properties: accountType: type: string accountId: type: number format: double accountBalance: type: number format: double com_mtn_madapi_models_optasia_loanstatus_Outstanding: title: Outstanding type: object properties: currencyCode: type: string numOutstandingLoans: type: integer format: int64 totalGross: type: integer format: int64 totalPrincipal: type: integer format: int64 totalSetupFees: type: integer format: int64 totalInterest: type: integer format: int64 totalInterestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 totalPendingRecoveries: type: integer format: int64 za_co_mtn_aggregator_model_request_loan_RefundBody: title: RefundBody type: object properties: sequenceNo: type: string refundMethod: type: string za_co_mtn_aggregator_model_response_loan_RepayLoanAdvanceResponse: title: RepayLoanAdvanceResponse type: object properties: statusMessage: type: string customerId: type: string supportMessage: type: string statusCode: type: string transactionId: type: string timeStamp: type: string path: type: string data: type: string com_mtn_madapi_models_optasia_loanstatus_LoanReasonDetails: title: LoanReasonDetails type: object properties: userApp: type: string com_mtn_madapi_models_optasia_loanstatus_Plan: title: Plan type: object properties: currentPeriod: type: string daysLeftInPeriod: type: integer format: int64 nextPeriod: type: string com_mtn_madapi_models_optasia_eligibility_OutstandingStatus: title: OutstandingStatus type: object properties: currencyCode: type: string numOutstandingLoans: type: string totalGross: type: string totalPrincipal: type: string totalSetupFees: type: string totalInterest: type: string totalInterestVAT: type: string totalCharges: type: string totalChargesVAT: type: string dynamicCreditLimit: type: string totalPendingLoans: type: string totalPendingRecoveries: type: string availableCreditLimit: type: string com_mtn_madapi_models_optasia_eligibility_CommodityDetails: title: CommodityDetails type: object properties: validity: type: integer format: int64 validityPeriod: type: string dataAmount: type: string dataUnit: type: string allNetVoiceMinutes: type: string allNetUnit: type: string onNetAirtime: type: string onNetUnit: type: string za_co_mtn_aggregator_model_response_loan_LoanResponse: title: LoanResponse type: object properties: statusMessage: type: string customerId: type: string loanDetails: $ref: '#/components/schemas/za_co_mtn_aggregator_model_eligibility_Bundle' sequenceNo: type: string channelId: type: string statusCode: type: string transactionId: type: string supportMessage: type: string timeStamp: type: string path: type: string data: type: string za_co_mtn_aggregator_model_loan_LoanReasonDetails: title: LoanReasonDetails type: object properties: userApp: type: string shortCode: type: string za_co_mtn_aggregator_model_response_eligibility_EligibilityStatusByCommodity: title: EligibilityStatusByCommodity type: object properties: commodityType: type: string eligibilityStatus: type: string za_co_mtn_aggregator_model_response_loan_XtraTimeBalanceResponse: title: XtraTimeBalanceResponse type: object properties: statusMessage: type: string data: title: Plan type: object properties: xtraTimeBalanceDetails: type: array items: title: XtraTimeBalanceDetail type: object properties: accountId: type: string accountName: type: string availableBalance: type: string availableBalanceUom: type: string sequenceNo: type: string loan-count: type: integer format: int32 total-loan-balance: type: number format: double statusCode: type: string transactionId: type: string supportMessage: type: string timeStamp: type: string path: type: string za_co_mtn_aggregator_model_response_loan_ServiceBandsResponse: title: ServiceBandsResponse type: object properties: statusMessage: type: string timestamp: type: string bundles: type: array items: title: ExtendedBundle type: object properties: bundleName: type: string bandGroup: type: string bandFee: type: string bandAmount: type: string sequenceNo: type: string statusCode: type: string transactionId: type: string supportMessage: type: string timeStamp: type: string path: type: string data: type: string com_mtn_madapi_models_optasia_eligibility_LoanOffer: title: LoanOffer type: object properties: offerClass: type: string offerName: type: string advanceOfferId: type: string currencyCode: type: string principalAmount: type: string setupFees: type: string commodityType: $ref: '#/components/schemas/com_mtn_madapi_enums_CommodityType' commodityDetails: title: CommodityDetails type: object properties: validity: type: integer format: int64 validityPeriod: type: string dataAmount: type: string dataUnit: type: string allNetVoiceMinutes: type: string allNetUnit: type: string onNetAirtime: type: string onNetUnit: type: string loanPlanId: type: string loanPlanName: type: string loanProductGroup: type: string maturityDetails: title: MaturityDetails type: object properties: maturityDuration: type: integer format: int32 dueOffsetInDays: type: integer format: int32 principalFrom: type: string principalTo: type: string za_co_mtn_aggregator_model_loan_LoanHistory: title: LoanHistory type: object properties: type: type: string eventTypeDetails: title: TypeDetails type: object properties: isPassiveAdvance: type: boolean pendingOperationId: type: integer format: int32 isCommodityProvisioned: type: boolean typeDetails: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_TypeDetails' operationStatus: type: string transactionId: type: string reason: type: string eventReasonDetails: type: array items: title: LoanReasonDetails type: object properties: userApp: type: string shortCode: type: string reasonDetails: type: array items: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_LoanReasonDetails' eventType: type: string period: type: string periodIndex: type: integer format: int32 transactionStatus: type: string expirationTimestamp: type: string periodExpirationTimestamp: type: string adjustedPrincipal: type: string principalBefore: type: string principalAfter: type: string adjustedSetupFees: type: string beforeSetupFees: type: string afterSetupFees: type: string eventTimestamp: type: string receptionTimestamp: type: string processingTimestamp: type: string channelId: type: string offerName: type: string commodityType: type: string currencyCode: type: string principalAmount: type: string setupFees: type: string loanPlanId: type: integer format: int32 loanPlanName: type: string maturityDuration: type: integer format: int32 loanReason: type: string loanReasonDetails: type: array items: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_LoanReasonDetails' projectSpecific: type: object additionalProperties: type: string loanId: type: string internalLoanId: type: string loanTimestamp: type: string loanState: type: string isDue: type: boolean dueStartTimestamp: type: string operationId: type: string feeAmount: type: string principalLeft: type: string principalAdjustment: type: string feeLeft: type: string feeAdjustment: type: string timestamp: type: string msisdn: type: string channel: type: string loanBand: title: LoanBand type: object properties: bandName: type: string bandGroup: type: integer format: int32 interestAdjustment: type: string interestAdjustmentVAT: type: string interestBefore: type: string interestAfter: type: string totalChargesAdjustment: type: string totalChargesAdjustmentVAT: type: string totalChargesBefore: type: string totalChargesAfter: type: string remoteRequestId: type: string remoteResponseId: type: string sourceRequestId: type: string loanProductGroup: type: string loanDetails: type: string externalLoanId: type: string com_mtn_madapi_models_optasia_loanstatus_EventReasonDetails: title: EventReasonDetails type: object properties: userApp: type: string za_co_mtn_aggregator_model_request_eligibility_BundleRequest: title: BundleRequest type: object properties: bundleName: type: string bundleValue: type: string prefLang: type: string repay: type: string fee: type: string amount: type: string bundleType: type: string correlationId: type: string currency: type: string serviceType: type: string loanProviderId: type: string loanProviderFRI: type: string customerAccountFRI: type: string callbackURL: type: string isBundlePurchase: type: boolean checkCreditRecord: type: boolean customerId: type: string loanTransactionDetails: $ref: '#/components/schemas/za_co_mtn_aggregator_model_eligibility_LoanTransactionDetails' bundleId: type: string sourceRequestId: type: string za_co_mtn_aggregator_model_response_loan_LoanHistoryResponseData: title: LoanHistoryResponseData type: object properties: operationList: type: array items: title: LoanHistory type: object properties: type: type: string eventTypeDetails: title: TypeDetails type: object properties: isPassiveAdvance: type: boolean pendingOperationId: type: integer format: int32 isCommodityProvisioned: type: boolean typeDetails: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_TypeDetails' operationStatus: type: string transactionId: type: string reason: type: string eventReasonDetails: type: array items: title: LoanReasonDetails type: object properties: userApp: type: string shortCode: type: string reasonDetails: type: array items: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_LoanReasonDetails' eventType: type: string period: type: string periodIndex: type: integer format: int32 transactionStatus: type: string expirationTimestamp: type: string periodExpirationTimestamp: type: string adjustedPrincipal: type: string principalBefore: type: string principalAfter: type: string adjustedSetupFees: type: string beforeSetupFees: type: string afterSetupFees: type: string eventTimestamp: type: string receptionTimestamp: type: string processingTimestamp: type: string channelId: type: string offerName: type: string commodityType: type: string currencyCode: type: string principalAmount: type: string setupFees: type: string loanPlanId: type: integer format: int32 loanPlanName: type: string maturityDuration: type: integer format: int32 loanReason: type: string loanReasonDetails: type: array items: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_LoanReasonDetails' projectSpecific: type: object additionalProperties: type: string loanId: type: string internalLoanId: type: string loanTimestamp: type: string loanState: type: string isDue: type: boolean dueStartTimestamp: type: string operationId: type: string feeAmount: type: string principalLeft: type: string principalAdjustment: type: string feeLeft: type: string feeAdjustment: type: string timestamp: type: string msisdn: type: string channel: type: string loanBand: title: LoanBand type: object properties: bandName: type: string bandGroup: type: integer format: int32 interestAdjustment: type: string interestAdjustmentVAT: type: string interestBefore: type: string interestAfter: type: string totalChargesAdjustment: type: string totalChargesAdjustmentVAT: type: string totalChargesBefore: type: string totalChargesAfter: type: string remoteRequestId: type: string remoteResponseId: type: string sourceRequestId: type: string loanProductGroup: type: string loanDetails: type: string externalLoanId: type: string com_mtn_madapi_models_optasia_refund_LoanRefundResponse: title: LoanRefundResponse type: object properties: code: type: string message: type: string saae-code: type: string saae-msn: type: string identityValue: type: string identityType: type: string origSource: type: string sourceRequestId: type: string externalLoanId: type: string transactionId: type: string receivedTimestamp: type: string lookUp3PP: type: boolean sequenceNo: type: string refundMethod: type: string countryCode: type: string serviceId: type: string targetSystem: type: string bearer: type: string onNetAirtime: type: string allNetVoiceMinutes: type: string advanceOfferId: type: string filterWithEvents: type: string projectionsUpToPeriod: type: string msisdn: type: string endpoint: type: string eligibilityCheck: type: string bandGroup: type: string za_co_mtn_aggregator_model_response_eligibility_EligibilityResponse: title: EligibilityResponse type: object properties: statusMessage: type: string eligibilityStatus: type: string eligible: type: array items: title: Eligibility type: object properties: eligibilityType: type: string bundles: type: array items: title: Bundle type: object properties: bundleName: type: string bundleValue: type: string bandGroup: type: string bundleType: type: string maximumBalance: type: string amount: type: string correlationId: type: string currency: type: string serviceType: type: string loanProviderId: type: string loanProviderFRI: type: string customerAccountFRI: type: string validity: type: string serviceFee: type: string fee: type: string repay: type: string productid: type: string customerId: type: string bundleGroup: type: string bundleId: type: string creditServiceId: type: string quantity: type: string unit: type: string feePercentage: type: string totalAmount: type: string primaryLoanId: type: string internalLoanId: type: string offerName: type: string additionalInfo: type: array items: title: AdditionalInfo type: object properties: name: type: string value: type: string offerClass: type: string bandName: type: string maturityDuration: type: integer format: int32 bundleName: type: string bundleId: type: string currency: type: string totalAmount: type: string fee: type: string bundleType: type: string loanId: type: integer format: int32 bandGroup: type: string dueOffsetInDays: type: integer format: int32 commodityDetails: title: CommodityDetails type: object properties: validityPeriod: type: string dataAmount: type: integer format: int32 validity: type: integer format: int32 dataUnit: type: string commodityProvisioningDetails: title: CommodityProvisioningDetails type: object properties: subscriptionSystem: type: string productId: type: string subscriptionProductId: type: string DABenefit: type: string loanTransactionDetails: title: LoanTransactionDetails type: object properties: bearer: type: string feeAmount: type: string feeAmountLeft: type: string loanAmount: type: string loanAmountLeft: type: string loanTransactionType: type: string serviceType: type: string serviceId: type: string dateTime: type: string sequenceNo: type: string serviceq: type: number format: double _links: type: string amount: type: array items: type: number format: double qualifiedAmount: type: number format: double loanBalance: type: number format: double customerId: type: string eligibilityStatusByCommodity: type: array items: title: EligibilityStatusByCommodity type: object properties: commodityType: type: string eligibilityStatus: type: string lang: type: string statusCode: type: string transactionId: type: string supportMessage: type: string timeStamp: type: string path: type: string data: type: string za_co_mtn_aggregator_model_response_loan_LoanStatusResponse: title: LoanStatusResponse type: object properties: statusMessage: type: string data: title: DataDetails type: object properties: status: type: string timestamp: type: string loanInfo: title: LoanInfo type: object properties: loan: title: Loan type: object properties: loanId: type: string internalLoanId: type: string externalLoanId: type: string loanTimeStamp: type: string loanState: type: string loanReason: type: string loanReasonDetails: type: array items: title: LoanReasonDetails type: object properties: userApp: type: string loanOffer: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_eligibility_LoanOffer' due: type: boolean dueStartTimestamp: type: string report: title: Report type: object properties: repayment: title: Repayment type: object properties: repaymentsCount: type: integer format: int64 gross: type: integer format: int64 principal: type: integer format: int64 setupFees: type: integer format: int64 interest: type: integer format: int64 interestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 chargesVAT: type: integer format: int64 charges: type: integer format: int64 outstanding: title: Outstanding type: object properties: currencyCode: type: string numOutstandingLoans: type: integer format: int64 totalGross: type: integer format: int64 totalPrincipal: type: integer format: int64 totalSetupFees: type: integer format: int64 totalInterest: type: integer format: int64 totalInterestVAT: type: integer format: int64 totalCharges: type: integer format: int64 totalChargesVAT: type: integer format: int64 totalPendingRecoveries: type: integer format: int64 plan: title: Plan type: object properties: currentPeriod: type: string daysLeftInPeriod: type: integer format: int64 nextPeriod: type: string events: type: array items: title: Event type: object properties: eventType: type: string eventTypeDetails: title: EventTypeDetails type: object properties: isPassiveAdvance: type: boolean pendingOperationId: type: integer format: int64 advanceFailedFailureType: type: string getAdvanceFailedNeStatus: type: string eventStatus: type: string eventTransactionId: type: string thirdPartyTransactionId: type: string eventReason: type: string eventReasonDetails: type: array items: title: EventReasonDetails type: object properties: userApp: type: string period: type: string periodIndex: type: integer format: int64 periodExpirationTimestamp: type: string principalAdjustment: type: string principalBefore: type: string principalAfter: type: string setupFeesAdjustment: type: string setupFeesBefore: type: string setupFeesAfter: type: string interestAdjustment: type: string interestAdjustmentVAT: type: string interestBefore: type: string interestAfter: type: string totalChargesAdjustment: type: string totalChargesAdjustmentVAT: type: string totalChargesBefore: type: string totalChargesAfter: type: string eventTimestamp: type: string receptionTimestamp: type: string processingTimestamp: type: string sourceRequestId: type: string offerName: type: string commodityType: type: string currencyCode: type: string principalAmount: type: string setupFees: type: string loanPlanId: type: integer format: int64 maturityDetails: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_eligibility_MaturityDetails' loanId: type: string internalLoanId: type: string externalLoanId: type: string loanTimestamp: type: string loanState: type: string loanReason: type: string loanReasonDetails: type: array items: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_loanstatus_LoanReasonDetails' report: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_loanstatus_Report' events: type: array items: $ref: '#/components/schemas/com_mtn_madapi_models_optasia_loanstatus_Event' sequenceNo: type: string channelId: type: string customerId: type: string statusCode: type: string transactionId: type: string supportMessage: type: string timeStamp: type: string path: type: string za_co_mtn_aggregator_model_servicebands_ExtendedBundle: title: ExtendedBundle type: object properties: bundleName: type: string bandGroup: type: string bandFee: type: string bandAmount: type: string za_co_mtn_aggregator_model_response_CommodityDetails: title: CommodityDetails type: object properties: validityPeriod: type: string dataAmount: type: integer format: int32 validity: type: integer format: int32 dataUnit: type: string za_co_mtn_aggregator_model_loan_LoanListItem: title: LoanListItem type: object properties: feeAmount: type: number format: double loanBand: $ref: '#/components/schemas/za_co_mtn_aggregator_model_loan_LoanBand' outstandingPrincipalAmount: type: number format: double loanId: type: string principalAmount: type: number format: double outstandingFeeAmount: type: number format: double lastLoanDate: type: integer format: int64 securitySchemes: OAuth2: type: oauth2 flows: clientCredentials: tokenUrl: https://api.mtn.com/v1/oauth/access_token scopes: {} Bearer: type: http description: Bearer token received from OAuth2.0 authentication with the MADAPI scheme: bearer bearerFormat: JWT