> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pawapay.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Initiate remittance

The remittance endpoint allows you to pay a customer.

* This API call is <em>idempotent</em>, which means it is safe to submit a request with the same `remittanceId` multiple times.
* Duplicate requests with the same `remittanceId` will be ignored with the `DUPLICATE_IGNORED` status in the response.
* Since the request can be rejected, you must check the `status` code in the response for each submitted request. The `failureReason` in the response will contain information about the reason of the rejection.

Each request can get one of the statuses on initiation:

| Status              | <Tooltip tip="Will a callback be sent for this remittance?">Callback</Tooltip> | Description                                                                                                                         |
| ------------------- | ------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| `ACCEPTED`          | Yes                                                                            | The remittance has been **accepted** by PawaPay for processing.                                                                     |
| `REJECTED`          | No                                                                             | The remittance has been **rejected**. See `failureReason` for details.                                                              |
| `DUPLICATE_IGNORED` | No                                                                             | The remittance has been **ignored** as a duplicate of an already accepted remittance. Duplication logic relies upon `remittanceId`. |

### How to find out the final status of this remittance?

As the PawaPay Merchant API is an [asynchronous API](/v2/docs/what_to_know#callbacks), you can find out the final status of the `ACCEPTED` remittance by either:

<CardGroup cols={2}>
  <Card title="Waiting for a callback" icon="webhook" href="/v2/api-reference/remittances/remittance-callback" horizontal="true">
    If you have configured callbacks, the callback with the final status of the remittance will be delivered to your callback URL.
  </Card>

  <Card title="Checking the status" icon="code-compare" href="/v2/api-reference/remittances/check-remittance-status" horizontal="true">
    Or poll the `Check Remittance Status` endpoint.
  </Card>
</CardGroup>

<Info>
  Headers related to [signatures](/v2/docs/signatures) must only be included if you have enabled “Only accept signed requests”.
  Read more about it from the [PawaPay Dashboard documentation](/dashboard/other/system_conf/api_tokens#signed-requests).
</Info>


## OpenAPI

````yaml openapi_v2 post /v2/remittances
openapi: 3.0.0
info:
  title: PawaPay Merchant API V2
  description: Please find complete documentation from https://docs.pawapay.io/.
  version: v2
  x-logo:
    url: >-
      https://global-uploads.webflow.com/62824591015aa314fd308df1/6411b26596e3de3f52551c00_Logopawapay-p-500.png
    href: https://docs.pawapay.io/
    altText: PawaPay logo
servers:
  - url: https://api.sandbox.pawapay.io
    description: PawaPay Merchant API sandbox
  - url: https://api.pawapay.io
    description: PawaPay Merchant API production
security:
  - bearerAuth: []
tags:
  - name: deposits
    x-displayName: Deposits
  - name: split-payments
    x-displayName: Split Payments
  - name: checkouts
    x-displayName: Checkouts
  - name: payouts
    x-displayName: Payouts
  - name: refunds
    x-displayName: Refunds
  - name: remittances
    x-displayName: Remittances
  - name: payment-page
    x-displayName: Payment Page
  - name: toolkit
    x-displayName: Toolkit
  - name: finances
    x-displayName: Finances
paths:
  /v2/remittances:
    post:
      tags:
        - remittances
      summary: Initiate remittance
      operationId: createRemittance
      parameters:
        - $ref: '#/components/parameters/Content-Digest'
        - $ref: '#/components/parameters/Signature'
        - $ref: '#/components/parameters/Signature-Input'
        - $ref: '#/components/parameters/Accept-Signature'
        - $ref: '#/components/parameters/Accept-Digest'
      requestBody:
        $ref: '#/components/requestBodies/RemittanceCreationRequest'
      responses:
        '200':
          description: Request has been accepted for processing by PawaPay
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RemittanceCreationResponse'
              examples:
                ACCEPTED:
                  value:
                    remittanceId: f4401bd2-1568-4140-bf2d-eb77d2b2b639
                    status: ACCEPTED
                    created: '2020-10-19T11:17:01Z'
                DUPLICATE_IGNORED:
                  value:
                    remittanceId: f4401bd2-1568-4140-bf2d-eb77d2b2b639
                    status: DUPLICATE_IGNORED
                    created: '2020-10-19T11:17:01Z'
                PROVIDER_TEMPORARILY_UNAVAILABLE:
                  value:
                    remittanceId: f4401bd2-1568-4140-bf2d-eb77d2b2b639
                    status: REJECTED
                    failureReason:
                      failureCode: PROVIDER_TEMPORARILY_UNAVAILABLE
                      failureMessage: >-
                        The provider 'MTN_MOMO_ZMB' is currently not able to
                        process payments. Please consult our status page for
                        downtime information on all providers. Programmatic
                        access is also available, please consult our API docs.
                INVALID_PHONE_NUMBER:
                  value:
                    remittanceId: f4401bd2-1568-4140-bf2d-eb77d2b2b639
                    status: REJECTED
                    failureReason:
                      failureCode: INVALID_PHONE_NUMBER
                      failureMessage: >-
                        The phone number '2607634' seems to be invalid for the
                        provider 'MTN_MOMO_ZMB'.
                INVALID_CURRENCY:
                  value:
                    remittanceId: f4401bd2-1568-4140-bf2d-eb77d2b2b639
                    status: REJECTED
                    failureReason:
                      failureCode: INVALID_CURRENCY
                      failureMessage: >-
                        The currency 'USD' is not supported with provider
                        'MTN_MOMO_ZMB'. Please consult API docs for supported
                        currencies.
                INVALID_AMOUNT:
                  value:
                    remittanceId: f4401bd2-1568-4140-bf2d-eb77d2b2b639
                    status: REJECTED
                    failureReason:
                      failureCode: INVALID_AMOUNT
                      failureMessage: >-
                        The provider MTN_MOMO_ZMB only supports up to '2'
                        decimal places in amount.
                AMOUNT_OUT_OF_BOUNDS:
                  value:
                    remittanceId: null
                    status: REJECTED
                    failureReason:
                      failureCode: AMOUNT_OUT_OF_BOUNDS
                      failureMessage: >-
                        The amount needs to be more than '1' and less than
                        '20000' for provider 'MTN_MOMO_ZMB'.
        '400':
          description: >-
            Request was rejected due to incompatibility with PawaPay API
            specification
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/RemittanceResponseId'
                  - $ref: '#/components/schemas/RemittanceFailureResponse'
              examples:
                INVALID_INPUT:
                  value:
                    remittanceId: f4401bd2-1568-4140-bf2d-eb77d2b2b639
                    status: REJECTED
                    failureReason:
                      failureCode: INVALID_INPUT
                      failureMessage: >-
                        We are unable to parse the body of the request. Please
                        consult API documentation for valid request payload.
                MISSING_PARAMETER:
                  value:
                    remittanceId: f4401bd2-1568-4140-bf2d-eb77d2b2b639
                    status: REJECTED
                    failureReason:
                      failureCode: MISSING_PARAMETER
                      failureMessage: >-
                        Request does not include the required parameter
                        'amount'.
                INVALID_PARAMETER:
                  value:
                    remittanceId: f4401bd2-1568-4140-bf2d-eb77d2b2b639
                    status: REJECTED
                    failureReason:
                      failureCode: INVALID_PARAMETER
                      failureMessage: >-
                        Value for parameter 'provider' is invalid. Please
                        consult API documentation for validation rules.
                UNSUPPORTED_PARAMETER:
                  value:
                    remittanceId: f4401bd2-1568-4140-bf2d-eb77d2b2b639
                    status: REJECTED
                    failureReason:
                      failureCode: UNSUPPORTED_PARAMETER
                      failureMessage: >-
                        Request includes an unsupported parameter 'amnt'. Please
                        remove unsupported parameters from request body.
        '401':
          description: >-
            Authentication failed. Make sure you have added the API token into
            the header. If using signatures, make sure they are valid.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/RemittanceResponseId'
                  - $ref: '#/components/schemas/AuthenticationFailureResponse'
              examples:
                AUTHENTICATION_ERROR:
                  value:
                    remittanceId: f4401bd2-1568-4140-bf2d-eb77d2b2b639
                    status: REJECTED
                    failureReason:
                      failureCode: AUTHENTICATION_ERROR
                      failureMessage: The API token in the request is invalid.
        '403':
          description: Authorization failure. Please check your authentication token.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/RemittanceResponseId'
                  - $ref: '#/components/schemas/AuthorizationFailureResponse'
              examples:
                AUTHORISATION_ERROR:
                  value:
                    remittanceId: f4401bd2-1568-4140-bf2d-eb77d2b2b639
                    status: REJECTED
                    failureReason:
                      failureCode: AUTHORISATION_ERROR
                      failureMessage: >-
                        The API token in the request is not authorised for this
                        endpoint.
        '500':
          description: An unknown failure has occurred.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/UnknownFailureResponse'
              examples:
                UNKNOWN_ERROR:
                  value:
                    failureReason:
                      failureCode: UNKNOWN_ERROR
                      failureMessage: Unable to process request due to an unknown problem.
components:
  parameters:
    Content-Digest:
      in: header
      name: Content-Digest
      schema:
        type: string
        format: string
        description: SHA-256 or SHA-512 hash of the request body.
      required: false
    Signature:
      in: header
      name: Signature
      schema:
        type: string
        format: string
        description: >-
          Signature of the request according to
          [RFC-9421](https://datatracker.ietf.org/doc/rfc9421/).
      required: false
    Signature-Input:
      in: header
      name: Signature-Input
      schema:
        type: string
        format: string
        description: >-
          Signature input according to
          [RFC-9421](https://datatracker.ietf.org/doc/rfc9421/).
      required: false
    Accept-Signature:
      in: header
      name: Accept-Signature
      schema:
        type: string
        format: string
        description: >-
          Expected signature algorithm of the response according to
          [RFC-9421](https://datatracker.ietf.org/doc/rfc9421/).
      required: false
    Accept-Digest:
      in: header
      name: Accept-Digest
      schema:
        type: string
        format: string
        description: >-
          Expected digest algorithm of the response according to
          [RFC-9421](https://datatracker.ietf.org/doc/rfc9421/).
      required: false
  requestBodies:
    RemittanceCreationRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RemittanceInitiationRequest'
      required: true
  schemas:
    RemittanceCreationResponse:
      required:
        - remittanceId
        - status
      type: object
      properties:
        remittanceId:
          $ref: '#/components/schemas/InitiationPaymentId'
        status:
          $ref: '#/components/schemas/RemittanceCreationStatus'
        created:
          $ref: '#/components/schemas/CreatedTimestamp'
        failureReason:
          $ref: '#/components/schemas/RemittanceInitiationFailureReason'
    RemittanceResponseId:
      type: object
      properties:
        remittanceId:
          $ref: '#/components/schemas/ResponsePaymentId'
    RemittanceFailureResponse:
      required:
        - failureCode
        - failureMessage
      type: object
      properties:
        status:
          type: string
          enum:
            - REJECTED
          description: The status of the response will always be `REJECTED`
          example: REJECTED
        failureReason:
          $ref: '#/components/schemas/RemittanceInitiationFailureReason'
    AuthenticationFailureResponse:
      required:
        - failureCode
        - failureMessage
      type: object
      properties:
        status:
          type: string
          enum:
            - REJECTED
          description: The status of the response will always be `REJECTED`
          example: REJECTED
        failureReason:
          $ref: '#/components/schemas/AuthenticationFailureReason'
    AuthorizationFailureResponse:
      required:
        - failureCode
        - failureMessage
      type: object
      properties:
        status:
          type: string
          enum:
            - REJECTED
          description: The status of the response will always be `REJECTED`
          example: REJECTED
        failureReason:
          $ref: '#/components/schemas/AuthorizationFailureReason'
    UnknownFailureResponse:
      required:
        - failureCode
        - failureMessage
      type: object
      properties:
        failureReason:
          type: object
          properties:
            failureCode:
              type: string
              description: >
                Reason for the failure:

                * `UNKNOWN_ERROR` - Unable to process request due to an unknown
                problem.
              example: UNKNOWN_ERROR
            failureMessage:
              type: string
              description: A description of the failure
              example: Unable to process request due to an unknown problem.
    RemittanceInitiationRequest:
      allOf:
        - type: object
          required:
            - remittanceId
            - recipient
            - sender
          properties:
            remittanceId:
              $ref: '#/components/schemas/InitiationPaymentId'
            recipient:
              $ref: '#/components/schemas/RemittanceRecipient'
            sender:
              $ref: '#/components/schemas/RemittanceSender'
            customerMessage:
              $ref: '#/components/schemas/CustomerMessage'
        - $ref: '#/components/schemas/PaymentInitiationRequest'
    InitiationPaymentId:
      minLength: 36
      maxLength: 36
      type: string
      format: uuid
      description: >
        A UUIDv4 based unique ID for this payment. 

        We require you to provide the unique ID for all initiated payments to
        ensure you can always reconcile all payments.

        Please store this ID in your system before initiating the payment with
        PawaPay.
      example: f4401bd2-1568-4140-bf2d-eb77d2b2b639
    RemittanceCreationStatus:
      type: string
      description: >
        The initiation status of the remittance: 

        * `ACCEPTED` - The remittance has been **accepted** by PawaPay for
        processing.

        * `REJECTED` - The remittance request has been **rejected** by PawaPay.
        See failureReason for details. 

        * `DUPLICATE_IGNORED` - The remittance has been **ignored** as a
        duplicate of and already accepted remittance. Deduplication is based on
        `remittanceId`.
      enum:
        - ACCEPTED
        - REJECTED
        - DUPLICATE_IGNORED
    CreatedTimestamp:
      type: string
      description: >-
        The timestamp of when the payment was created in the PawaPay platform.
        Format defined by 'date-time' in RFC3339 section 5.6 from
        [IETF](https://tools.ietf.org/html/rfc3339#section-5.6)
      format: date-time
      example: '2020-02-21T17:32:29Z'
    RemittanceInitiationFailureReason:
      required:
        - failureReason
      type: object
      properties:
        failureCode:
          type: string
          description: >
            Reason for the failure:

            * `NO_AUTHENTICATION` - The API token was not found in the request
            headers.

            * `AUTHENTICATION_ERROR` - The API token in the request headers is
            not valid.

            * `AUTHORISATION_ERROR` - The API Token in the request header is not
            authorised to make this request.

            * `HTTP_SIGNATURE_ERROR` - The signature you have passed with the
            request did not pass verification.

            * `INVALID_INPUT` - We were unable to parse the payload of the
            request.

            * `MISSING_PARAMETER` - A mandatory parameter was missing from the
            request body.

            * `UNSUPPORTED_PARAMETER` - An unsupported parameter was found in
            the request body.

            * `INVALID_PARAMETER` - A parameter had an incorrect value.

            * `DUPLICATE_METADATA_FIELD` - A duplicate field was found in
            payment metadata.

            * `REMITTANCES_NOT_ALLOWED` - Remittances are not enabled with the
            provider on your PawaPay account.

            * `INVALID_PHONE_NUMBER` - The phone number provided is in the wrong
            format.

            * `INVALID_AMOUNT` - The amount contains decimals which is not
            supported by the provider.

            * `PAWAPAY_WALLET_OUT_OF_FUNDS` - Your PawaPay wallet does not have
            the funds to complete this refund.

            * `INVALID_CURRENCY` - The currency is not supported by the
            provider.

            * `INVALID_PROVIDER` - The provider is not valid for this request. 

            * `PROVIDER_TEMPORARILY_UNAVAILABLE` - The provider is not currently
            not able to accept payments. 

            * `UNKNOWN_ERROR` - The provider is not valid for this request.
          enum:
            - NO_AUTHENTICATION
            - AUTHENTICATION_ERROR
            - AUTHORISATION_ERROR
            - HTTP_SIGNATURE_ERROR
            - INVALID_INPUT
            - MISSING_PARAMETER
            - UNSUPPORTED_PARAMETER
            - INVALID_PARAMETER
            - DUPLICATE_METADATA_FIELD
            - REMITTANCES_NOT_ALLOWED
            - INVALID_PHONE_NUMBER
            - INVALID_AMOUNT
            - PAWAPAY_WALLET_OUT_OF_FUNDS
            - INVALID_CURRENCY
            - INVALID_PROVIDER
            - PROVIDER_TEMPORARILY_UNAVAILABLE
            - UNKNOWN_ERROR
        failureMessage:
          type: string
          description: A description of the failure
    ResponsePaymentId:
      minLength: 36
      maxLength: 36
      type: string
      format: uuid
      description: >-
        The unique ID for this payment in PawaPay as specified by you during
        initiation.
      example: f4401bd2-1568-4140-bf2d-eb77d2b2b639
    AuthenticationFailureReason:
      required:
        - failureReason
      type: object
      properties:
        failureCode:
          type: string
          description: >
            Reason for the failure:

            * `NO_AUTHENTICATION` - The API token was not found in the request
            headers.

            * `AUTHENTICATION_ERROR` - The API token in the request headers is
            not valid.

            * `HTTP_SIGNATURE_ERROR` - The signature you have passed with the
            request did not pass verification.
          enum:
            - NO_AUTHENTICATION
            - AUTHENTICATION_ERROR
            - HTTP_SIGNATURE_ERROR
        failureMessage:
          type: string
          description: A description of the failure
    AuthorizationFailureReason:
      required:
        - failureReason
      type: object
      properties:
        failureCode:
          type: string
          description: >
            Reason for the failure:

            * `AUTHORISATION_ERROR` - The API Token in the request header is not
            authorised to make this request.

            * `DEPOSITS_NOT_ALLOWED` - Deposits are not enabled with the
            provider on your PawaPay account.

            * `PAYOUTS_NOT_ALLOWED` - Payouts are not enabled with the provider
            on your PawaPay account.

            * `REMITTANCES_NOT_ALLOWED` - Remittances are not enabled with the
            provider on your PawaPay account.

            * `REFUNDS_NOT_ALLOWED` - Refunds are not enabled with the provider
            on your PawaPay account.
          enum:
            - AUTHORISATION_ERROR
            - DEPOSITS_NOT_ALLOWED
            - PAYOUTS_NOT_ALLOWED
            - REMITTANCES_NOT_ALLOWED
            - REFUNDS_NOT_ALLOWED
        failureMessage:
          type: string
          description: A description of the failure
    RemittanceRecipient:
      description: Details about the customer who is receiving the remittance.
      required:
        - type
        - accountDetails
        - recipientDetails
      type: object
      properties:
        type:
          $ref: '#/components/schemas/AccountDetailsType'
        accountDetails:
          $ref: '#/components/schemas/RemittanceAccountDetails'
        recipientDetails:
          $ref: '#/components/schemas/RecipientDetails'
    RemittanceSender:
      description: Details about the customer who is sending the remittance.
      required:
        - transactionDetails
        - senderDetails
      type: object
      properties:
        transactionDetails:
          $ref: '#/components/schemas/TransactionDetails'
        senderDetails:
          $ref: '#/components/schemas/SenderDetails'
    CustomerMessage:
      minLength: 4
      maxLength: 22
      type: string
      pattern: ^[a-zA-Z0-9 ]+$
      description: >
        A short narration for the transaction. 

        Depending on the 'provider', this message may be visible to the customer
        in the SMS receipt or within their transaction history.


        Defaults to your company name as registered on your PawaPay account
        trimmed to fit the length limitations.
      example: Note of 4 to 22 chars
    PaymentInitiationRequest:
      required:
        - amount
        - currency
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/Amount'
        currency:
          $ref: '#/components/schemas/Currency'
        metadata:
          $ref: '#/components/schemas/TransactionMetadataRequest'
    AccountDetailsType:
      type: string
      description: >-
        The type of account involved in the transaction. At the moment, only
        **MMO** is supported.
      example: MMO
      enum:
        - MMO
    RemittanceAccountDetails:
      required:
        - provider
        - phoneNumber
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/PhoneNumber'
        provider:
          $ref: '#/components/schemas/RemittanceProvider'
    RecipientDetails:
      required:
        - firstName
        - lastName
      type: object
      properties:
        firstName:
          type: string
          description: The first name of the recipient of this remittance.
          maxLength: 64
          example: John
        lastName:
          type: string
          description: The last name of the recipient of this remittance.
          maxLength: 64
          example: Doe
    TransactionDetails:
      required:
        - transactionReference
        - originalAmount
        - originalCurrency
        - buyFxRate
        - senderFees
        - purposeOfFunds
        - sourceOfFunds
      type: object
      properties:
        transactionReference:
          type: string
          description: The unique reference to the transaction in your system
          maxLength: 64
          example: de83150a-5916-48a2-b048-bd85e022cb55
        originalAmount:
          type: string
          description: The original amount in the original currency that is being remitted.
          example: '100'
        originalCurrency:
          type: string
          maxLength: 3
          description: >
            The currency in which the remittance originates.

            Format must be the ISO 4217 three character currency code in upper
            case. Read more from
            [Wikipedia](https://en.wikipedia.org/wiki/ISO_4217#Active_codes).
          example: USD
        buyFxRate:
          type: string
          description: The fx rate applied to the customer for this remittance.
          example: '23.88'
        senderFees:
          type: string
          description: Any service and other fees paid by the customer for this remittance.
          example: '1'
        purposeOfFunds:
          type: string
          description: The intended purpose for the funds being remitted to the recipient.
          maxLength: 64
          enum:
            - FAMILY_SUPPORT
            - MEDICAL_EXPENSES
            - TUITION_FEES
            - EDUCATION_SUPPORT
            - GIFT_AND_OTHER_DONATIONS
            - HOME_IMPROVEMENT
            - DEBT_SETTLEMENT
            - REAL_ESTATE
            - TAXES
            - SALARY
            - SAVINGS
            - PERSONAL_TRANSFER
            - OTHER
          example: FAMILY_SUPPORT
        sourceOfFunds:
          type: string
          description: The source of the funds being remitted.
          maxLength: 64
          enum:
            - SALARY
            - SAVINGS
            - LOTTERY
            - LOAN
            - BUSINESS_INCOME
            - GIFT
            - OTHER
          example: SALARY
    SenderDetails:
      required:
        - firstName
        - lastName
        - nationality
        - phoneNumber
        - address
        - identification
      type: object
      properties:
        firstName:
          type: string
          description: The first name of the sender of this remittance.
          maxLength: 64
          example: Jane
        lastName:
          type: string
          description: The last name of the sender of this remittance.
          maxLength: 64
          example: Doe
        nationality:
          type: string
          minLength: 3
          maxLength: 3
          description: >
            The nationality of the sender of this remittance. Format is ISO
            3166-1 alpha-3, three character country code in upper case. Read
            more from
            [Wikipedia](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3#Officially_assigned_code_elements).
          example: USA
        gender:
          type: string
          description: The gender of the sender of this remittance.
          maxLength: 64
          enum:
            - MALE
            - FEMALE
            - OTHER
          example: FEMALE
        phoneNumber:
          type: string
          description: The phone number of the sender of this remittance.
          maxLength: 64
          example: '12124567890'
        dateOfBirth:
          type: string
          format: date
          description: The date of birth of the sender of this remittance.
          example: '1977-12-31'
        placeOfBirth:
          type: string
          description: The place of birth of the sender of this remittance.
          maxLength: 64
          example: USA
        occupation:
          type: string
          description: The occupation of the sender of this remittance.
          maxLength: 64
          example: Project manager
        relationshipRecipient:
          type: string
          description: >-
            The nature of the relationship between the sender and the recipient
            of this remittance.
          maxLength: 64
          enum:
            - FATHER
            - MOTHER
            - SON
            - DAUGHTER
            - BROTHER
            - SISTER
            - HUSBAND
            - WIFE
            - PARTNER
            - FRIEND
            - AUNT
            - UNCLE
            - COUSIN
            - NEPHEW
            - NIECE
            - GRANDFATHER
            - GRANDMOTHER
            - GRANDSON
            - GRANDDAUGHTER
            - STEPCHILD
            - DAUGHTER_IN_LAW
            - SON_IN_LAW
            - BORTHER_IN_LAW
            - SISTER_IN_LAW
            - MOTHER_IN_LAW
            - GUARDIAN
            - SELF
          example: PARTNER
        address:
          $ref: '#/components/schemas/SenderAddress'
        identification:
          $ref: '#/components/schemas/SenderIdentification'
    Amount:
      minLength: 1
      maxLength: 23
      type: string
      pattern: ^([0]|([1-9][0-9]{0,17}))([.][0-9]{0,3}[1-9])?$
      description: >
        The amount of the payment.


        Amount must follow below requirements or the request will be
        **rejected**:

        * Not all providers support decimals. Find which ones do from
        [providers](/v2/docs/providers) or dynamically using [active
        configuration](/v2/api-reference/toolkit/active-configuration) endpoint.

        * Transaction limits apply. Find them from the [Active
        Configuration](/v2/api-reference/toolkit/active-configuration) endpoint.

        * Leading zeroes are not permitted except where the value is less than
        1. For any value less than one, one and only one leading zero must be
        supplied.
      example: '15'
    Currency:
      type: string
      description: >
        The currency in which the `amount` is specified.


        Format must be the ISO 4217 three character currency code in upper case.
        Read more from
        [Wikipedia](https://en.wikipedia.org/wiki/ISO_4217#Active_codes).


        Find the supported currencies for the [provider](/v2/docs/providers).


        The [active
        configuration](/v2/api-reference/toolkit/active-configuration) endpoint
        has all the providers configured for your account together with the
        supported currencies.
      example: ZMW
    TransactionMetadataRequest:
      description: >
        A list of metadata that you can attach to the payment for providing
        additional context about the payment.

        For example, adding the channel from which the payment was initated,
        product ID or anything else that might help your operations team.


        Metadata will be included in:

        - In the dashboard on payment details pages

        - Financial statements as JSON object 

        - Callbacks


        Metadata can be used when searching in the PawaPay Dashboard. 

        Full value of the metadata field must be used for searches.


        Metadata will not be visible to the customer that is involved in this
        payment. 


        Up to 10 metadata fields can be attached to a payment.
      type: array
      items:
        $ref: '#/components/schemas/TransactionMetadataRequestItem'
      example:
        - orderId: ORD-123456789
        - customerId: customer@email.com
          isPII: true
    PhoneNumber:
      type: string
      description: >
        The phone number (MSISDN) of the customer paying or receiving payment.

        The format is described in
        [Wikipedia](https://en.wikipedia.org/wiki/MSISDN). 


        Use [predict provider](/v2/api-reference/toolkit/predict-provider) to
        validate and sanitise the phone number.


        Phone number validation has following rules:
         * Only digits without whitespaces or any other separators or prefixes like '+'.
         * Should not start with zero.
         * Country code is mandatory.
         * Should not exceed or be less than the valid length of specified country.
      example: '260763456789'
    RemittanceProvider:
      type: string
      description: >
        The provider represents the mobile money operator or processor that can
        process payments.


        Please contact our Sales team for a list of all the supported providers.


        The [active
        configuration](/v2/api-reference/toolkit/active-configuration) endpoint
        provides the list of provider configured for your account.


        You can use the [predict
        provider](/v2/api-reference/toolkit/predict-provider) enpoint to predict
        the provider to use based on the phone number (MSISDN).
      example: MTN_MOMO_ZMB
    SenderAddress:
      required:
        - addressLine
        - postalCode
        - city
        - country
      type: object
      properties:
        addressLine:
          type: string
          description: The address of the sender of this remittance.
          maxLength: 64
          example: 1476 Sandhill Rd
        postalCode:
          type: string
          description: The postal/zip code or the sender of this remittance.
          maxLength: 64
          example: '84058'
        city:
          type: string
          description: The city of the sender of this remittance.
          maxLength: 64
          example: Orem
        country:
          type: string
          minLength: 3
          maxLength: 3
          description: >
            The country of the sender of this remittance. Format is ISO 3166-1
            alpha-3, three character country code in upper case. Read more from
            [Wikipedia](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3#Officially_assigned_code_elements).
          example: USA
    SenderIdentification:
      required:
        - type
        - number
      type: object
      properties:
        type:
          type: string
          description: >-
            The type of identification document used to KYC the sender of this
            remittance.
          example: PASSPORT
          enum:
            - NATIONAL_ID
            - PASSPORT
            - DRIVING_LICENSE
            - SOCIAL_SECURITY_ID
            - RESIDENCE_PERMIT
        number:
          type: string
          description: >-
            The id of the identification document used to KYC the sender of this
            remittance.
          maxLength: 64
          example: E00007730
    TransactionMetadataRequestItem:
      type: object
      properties:
        additionalProperties:
          type: string
          description: >-
            The metadata that you are attaching to the payment. For example
            `"orderId":"ORD-123456789"`.
          example: '"orderId": "ORD-123456789"'
        isPII:
          type: boolean
          default: false
          description: >-
            Indicates whether the field contains personally identifiable
            information. Used for compliance with GDPR or other relevant data
            privacy laws.
          example: true
      example:
        - orderId: ORD-123456789
        - customerId: customer@email.com
          isPII: true
  securitySchemes:
    bearerAuth:
      type: http
      description: >-
        See
        [Authentication](/v2/docs/how_to_start#how-to-authenticate-calls-to-the-merchant-api).
      scheme: bearer
      bearerFormat: JWT

````