MoneyHash Loyalty API

The Loyalty API from MoneyHash — 4 operation(s) for loyalty.

Operations 4

POST /api/v1.4/loyalty/earn/ Create loyalty earn #
GET /api/v1.4/loyalty/earn/{id}/ Retrieve loyalty earn #
POST /api/v1.4/loyalty/earn/{id}/reverse/ Reverse loyalty earn #
POST /api/v1.4/loyalty/eligibility/ Check loyalty eligibility #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/moneyhash:moneyhash-loyalty-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

moneyhash-loyalty-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: MoneyHash Loyalty API
  version: 1.1.0
  description: MoneyHash Public APIs documentation
servers:
- url: https://web.moneyhash.io
tags:
- name: Loyalty
paths:
  /api/v1.4/loyalty/earn/:
    post:
      operationId: v1.1_loyalty_earn_create
      description: Creates a loyalty earn transaction for the account and queues processing with the configured provider. The transaction starts in PENDING status.
      summary: Create loyalty earn
      tags:
      - Loyalty
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEarnRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/CreateEarnRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateEarnRequest'
        required: true
      security:
      - ApiKeyAuth: []
      - AccessTokenAuth: []
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EarnCreateResponse'
              examples:
                CreatedEarnTransaction:
                  value:
                    status:
                      code: 202
                      message: success
                      errors: []
                    data:
                      id: 550e8400-e29b-41d4-a716-446655440000
                      status: PENDING
                      provider_id: gwG0y8j
                      amount: '75.00'
                      currency: SAR
                      merchant_reference: merchant-ref-1
                      created: '2026-05-13T12:00:00Z'
                    count: 1
                    next: null
                    previous: null
                  summary: Created earn transaction
                  description: Transaction accepted and async earn queued.
          description: ''
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocsErrorResponse400'
              examples:
                UnsupportedCurrency:
                  value:
                    status:
                      code: 400
                      message: ''
                      errors:
                      - error: Currency USD is not supported by this provider.
                    data: {}
                    count: null
                    next: null
                    previous: null
                  summary: Unsupported currency
          description: ''
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocsErrorResponse401'
              examples:
                UnauthorizedAPIKey:
                  value:
                    status:
                      code: 401
                      message: ''
                      errors:
                      - detail: Authentication credentials were not provided.
                    data: {}
                    count: null
                    next: null
                    previous: null
                  summary: Unauthorized API key
          description: ''
  /api/v1.4/loyalty/earn/{id}/:
    get:
      operationId: v1.1_loyalty_earn_retrieve
      description: Returns the current state of a loyalty earn transaction belonging to the authenticated account.
      summary: Retrieve loyalty earn
      parameters:
      - in: path
        name: id
        schema:
          type: string
        description: Loyalty earn transaction UUID is a unique identifier for the loyalty earn transaction.
        required: true
      tags:
      - Loyalty
      security:
      - ApiKeyAuth: []
      - AccessTokenAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EarnDetail'
              examples:
                EarnedTransaction:
                  value:
                    status:
                      code: 200
                      message: success
                      errors: []
                    data:
                      id: 550e8400-e29b-41d4-a716-446655440000
                      status: EARNED
                      provider: Qitaf
                      provider_id: gwG0y8j
                      identifier: '+966500000020'
                      identifier_type: PHONE_NUMBER
                      amount: '12.00'
                      currency: SAR
                      merchant_reference: retrieve-ref
                      provider_reference_id: prov-x
                      reverse_provider_reference_id: null
                      failure_reason: null
                      reversed_at: null
                      created: '2026-05-13T12:00:00Z'
                      modified: '2026-05-13T12:00:05Z'
                    count: 1
                    next: null
                    previous: null
                  summary: Earned transaction
          description: ''
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocsErrorResponse401'
              examples:
                UnauthorizedAPIKey:
                  value:
                    status:
                      code: 401
                      message: ''
                      errors:
                      - detail: Authentication credentials were not provided.
                    data: {}
                    count: null
                    next: null
                    previous: null
                  summary: Unauthorized API key
          description: ''
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocsErrorResponse404'
              examples:
                NotFound:
                  value:
                    status:
                      code: 404
                      message: ''
                      errors:
                      - error: Transaction not found
                    data: {}
                    count: null
                    next: null
                    previous: null
                  summary: Not found
                  description: Unknown UUID or transaction belongs to another account.
          description: ''
  /api/v1.4/loyalty/earn/{id}/reverse/:
    post:
      operationId: v1.1_loyalty_earn_reverse_create
      description: Queues a reversal of an EARNED loyalty transaction. The amount in the body must match the original earn amount. Status moves to PENDING_REVERSE status. while the provider is called. When the reversal is successful, the status moves to REVERSED status.
      summary: Reverse loyalty earn
      parameters:
      - in: path
        name: id
        schema:
          type: string
        description: Loyalty earn transaction UUID is a unique identifier for the loyalty earn transaction.
        required: true
      tags:
      - Loyalty
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReverseRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/ReverseRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/ReverseRequest'
        required: true
      security:
      - ApiKeyAuth: []
      - AccessTokenAuth: []
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReverseResponse'
          description: ''
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocsErrorResponse400'
              examples:
                InvalidAmount:
                  value:
                    status:
                      code: 400
                      message: ''
                      errors:
                      - error: Reverse amount must be equal to earn amount.
                    data: {}
                    count: null
                    next: null
                    previous: null
                  summary: Invalid amount
          description: ''
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocsErrorResponse401'
              examples:
                UnauthorizedAPIKey:
                  value:
                    status:
                      code: 401
                      message: ''
                      errors:
                      - detail: Authentication credentials were not provided.
                    data: {}
                    count: null
                    next: null
                    previous: null
                  summary: Unauthorized API key
          description: ''
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocsErrorResponse404'
              examples:
                EarnNotFound:
                  value:
                    status:
                      code: 404
                      message: ''
                      errors:
                      - error: Earn not found.
                    data: {}
                    count: null
                    next: null
                    previous: null
                  summary: Earn not found
          description: ''
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocsErrorResponse409'
              examples:
                EarnNotInAReversibleState:
                  value:
                    status:
                      code: 409
                      message: ''
                      errors:
                      - error: Earn is not in a reversible state (must be EARNED).
                    data: {}
                    count: null
                    next: null
                    previous: null
                  summary: Earn not in a reversible state
          description: ''
  /api/v1.4/loyalty/eligibility/:
    post:
      operationId: v1.1_loyalty_eligibility_create
      description: Checks whether a customer identifier is eligible to earn loyalty points for the given loyalty provider. Some providers do not support this call; in that case the response returns eligible null with a reason.
      summary: Check loyalty eligibility
      tags:
      - Loyalty
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckEligibilityRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/CheckEligibilityRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CheckEligibilityRequest'
        required: true
      security:
      - ApiKeyAuth: []
      - AccessTokenAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckEligibilityResponse'
              examples:
                EligibleCustomer:
                  value:
                    status:
                      code: 200
                      message: success
                      errors: []
                    data:
                      eligible: true
                      reason: null
                    count: 1
                    next: null
                    previous: null
                  summary: Eligible customer
                  description: Provider reports the identifier is eligible.
                ProviderDoesNotSupportEligibility:
                  value:
                    status:
                      code: 200
                      message: success
                      errors: []
                    data:
                      eligible: null
                      reason: This provider does not support eligibility check.
                    count: 1
                    next: null
                    previous: null
                  summary: Provider does not support eligibility
                  description: eligible is null when the integration has no eligibility API.
          description: ''
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocsErrorResponse400'
              examples:
                ValidationError:
                  value:
                    status:
                      code: 400
                      message: ''
                      errors:
                      - error: Invalid identifier format.
                    data: {}
                    count: null
                    next: null
                    previous: null
                  summary: Validation error
                  description: Invalid body, unknown provider, or invalid identifier format.
                ProviderEligibilityFailure:
                  value:
                    status:
                      code: 400
                      message: ''
                      errors:
                      - error: Eligibility check failed at provider.
                    data: {}
                    count: null
                    next: null
                    previous: null
                  summary: Provider eligibility failure
                  description: The upstream loyalty provider rejected or failed the check.
          description: ''
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DocsErrorResponse401'
              examples:
                UnauthorizedAPIKey:
                  value:
                    status:
                      code: 401
                      message: ''
                      errors:
                      - detail: Authentication credentials were not provided.
                    data: {}
                    count: null
                    next: null
                    previous: null
                  summary: Unauthorized API key
                  description: Missing or invalid account API key.
          description: ''
components:
  schemas:
    CreateEarnRequest:
      type: object
      properties:
        merchant_reference:
          type: string
          description: Your unique reference for this earn
          maxLength: 255
        amount:
          type: string
          format: decimal
          pattern: ^-?\d{0,12}(?:\.\d{0,2})?$
          description: Monetary amount driving the earn (provider rules apply).
        currency:
          enum:
          - USD
          - CAD
          - EUR
          - AED
          - AFN
          - ALL
          - AMD
          - ARS
          - AUD
          - AZN
          - BAM
          - BDT
          - BGN
          - BHD
          - BIF
          - BND
          - BOB
          - BRL
          - BWP
          - BYN
          - BZD
          - CDF
          - CHF
          - CLP
          - CNY
          - COP
          - CRC
          - CVE
          - CZK
          - DJF
          - DKK
          - DOP
          - DZD
          - EEK
          - EGP
          - ERN
          - ETB
          - GBP
          - GEL
          - GHS
          - GNF
          - GTQ
          - HKD
          - HNL
          - HRK
          - HUF
          - IDR
          - ILS
          - INR
          - IQD
          - IRR
          - ISK
          - JMD
          - JOD
          - JPY
          - KES
          - KHR
          - KMF
          - KRW
          - KWD
          - KZT
          - LBP
          - LKR
          - LTL
          - LVL
          - LYD
          - MAD
          - MDL
          - MGA
          - MKD
          - MMK
          - MOP
          - MUR
          - MXN
          - MYR
          - MZN
          - NAD
          - NGN
          - NIO
          - NOK
          - NPR
          - NZD
          - OMR
          - PAB
          - PEN
          - PHP
          - PKR
          - PLN
          - PYG
          - QAR
          - RON
          - RSD
          - RUB
          - RWF
          - SAR
          - SDG
          - SEK
          - SGD
          - SOS
          - SYP
          - THB
          - TND
          - TOP
          - TRY
          - TTD
          - TWD
          - TZS
          - UAH
          - UGX
          - UYU
          - UZS
          - VEF
          - VND
          - XAF
          - XOF
          - YER
          - ZAR
          - ZMK
          - ZWL
          - MRU
          type: string
          x-spec-enum-id: 926115c6927e9c0a
          description: 'ISO currency code; must be supported by the loyalty provider.


            * `USD` - USD

            * `CAD` - CAD

            * `EUR` - EUR

            * `AED` - AED

            * `AFN` - AFN

            * `ALL` - ALL

            * `AMD` - AMD

            * `ARS` - ARS

            * `AUD` - AUD

            * `AZN` - AZN

            * `BAM` - BAM

            * `BDT` - BDT

            * `BGN` - BGN

            * `BHD` - BHD

            * `BIF` - BIF

            * `BND` - BND

            * `BOB` - BOB

            * `BRL` - BRL

            * `BWP` - BWP

            * `BYN` - BYN

            * `BZD` - BZD

            * `CDF` - CDF

            * `CHF` - CHF

            * `CLP` - CLP

            * `CNY` - CNY

            * `COP` - COP

            * `CRC` - CRC

            * `CVE` - CVE

            * `CZK` - CZK

            * `DJF` - DJF

            * `DKK` - DKK

            * `DOP` - DOP

            * `DZD` - DZD

            * `EEK` - EEK

            * `EGP` - EGP

            * `ERN` - ERN

            * `ETB` - ETB

            * `GBP` - GBP

            * `GEL` - GEL

            * `GHS` - GHS

            * `GNF` - GNF

            * `GTQ` - GTQ

            * `HKD` - HKD

            * `HNL` - HNL

            * `HRK` - HRK

            * `HUF` - HUF

            * `IDR` - IDR

            * `ILS` - ILS

            * `INR` - INR

            * `IQD` - IQD

            * `IRR` - IRR

            * `ISK` - ISK

            * `JMD` - JMD

            * `JOD` - JOD

            * `JPY` - JPY

            * `KES` - KES

            * `KHR` - KHR

            * `KMF` - KMF

            * `KRW` - KRW

            * `KWD` - KWD

            * `KZT` - KZT

            * `LBP` - LBP

            * `LKR` - LKR

            * `LTL` - LTL

            * `LVL` - LVL

            * `LYD` - LYD

            * `MAD` - MAD

            * `MDL` - MDL

            * `MGA` - MGA

            * `MKD` - MKD

            * `MMK` - MMK

            * `MOP` - MOP

            * `MUR` - MUR

            * `MXN` - MXN

            * `MYR` - MYR

            * `MZN` - MZN

            * `NAD` - NAD

            * `NGN` - NGN

            * `NIO` - NIO

            * `NOK` - NOK

            * `NPR` - NPR

            * `NZD` - NZD

            * `OMR` - OMR

            * `PAB` - PAB

            * `PEN` - PEN

            * `PHP` - PHP

            * `PKR` - PKR

            * `PLN` - PLN

            * `PYG` - PYG

            * `QAR` - QAR

            * `RON` - RON

            * `RSD` - RSD

            * `RUB` - RUB

            * `RWF` - RWF

            * `SAR` - SAR

            * `SDG` - SDG

            * `SEK` - SEK

            * `SGD` - SGD

            * `SOS` - SOS

            * `SYP` - SYP

            * `THB` - THB

            * `TND` - TND

            * `TOP` - TOP

            * `TRY` - TRY

            * `TTD` - TTD

            * `TWD` - TWD

            * `TZS` - TZS

            * `UAH` - UAH

            * `UGX` - UGX

            * `UYU` - UYU

            * `UZS` - UZS

            * `VEF` - VEF

            * `VND` - VND

            * `XAF` - XAF

            * `XOF` - XOF

            * `YER` - YER

            * `ZAR` - ZAR

            * `ZMK` - ZMK

            * `ZWL` - ZWL

            * `MRU` - MRU'
        webhook_url:
          type:
          - string
          - 'null'
          format: uri
          description: Optional HTTPS URL for loyalty earn callbacks.
        loyalty:
          allOf:
          - $ref: '#/components/schemas/LoyaltyDataInput'
          description: Loyalty program and customer identifier for this earn.
      required:
      - amount
      - currency
      - loyalty
      - merchant_reference
    DocsErrorResponse400:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/DocsStatus'
        data:
          type: object
          additionalProperties: {}
        count:
          type:
          - integer
          - 'null'
          description: Total number of items.
        next:
          type:
          - string
          - 'null'
          description: Next page url if exists
        previous:
          type:
          - string
          - 'null'
          description: Previous page url if exists
      required:
      - count
      - data
      - next
      - previous
      - status
    DocsErrorResponse404:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/DocsStatus'
        data:
          type: object
          additionalProperties: {}
        count:
          type:
          - integer
          - 'null'
          description: Total number of items.
        next:
          type:
          - string
          - 'null'
          description: Next page url if exists
        previous:
          type:
          - string
          - 'null'
          description: Previous page url if exists
      required:
      - count
      - data
      - next
      - previous
      - status
    DocsErrorResponse401:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/DocsStatus'
        data:
          type: object
          additionalProperties: {}
        count:
          type:
          - integer
          - 'null'
          description: Total number of items.
        next:
          type:
          - string
          - 'null'
          description: Next page url if exists
        previous:
          type:
          - string
          - 'null'
          description: Previous page url if exists
      required:
      - count
      - data
      - next
      - previous
      - status
    DocsErrorResponse409:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/DocsStatus'
        data:
          type: object
          additionalProperties: {}
        count:
          type:
          - integer
          - 'null'
          description: Total number of items.
        next:
          type:
          - string
          - 'null'
          description: Next page url if exists
        previous:
          type:
          - string
          - 'null'
          description: Previous page url if exists
      required:
      - count
      - data
      - next
      - previous
      - status
    CheckEligibilityResponse:
      type: object
      properties:
        eligible:
          type:
          - boolean
          - 'null'
          description: Whether the customer is eligible. Null when the provider does not expose an eligibility check.
        reason:
          type:
          - string
          - 'null'
          description: Explanation when eligible is false or null.
      required:
      - eligible
    ReverseRequest:
      type: object
      properties:
        amount:
          type: string
          format: decimal
          pattern: ^-?\d{0,12}(?:\.\d{0,2})?$
          description: Amount to be reversed
      required:
      - amount
    CheckEligibilityRequest:
      type: object
      properties:
        provider_id:
          type: string
          description: MoneyHash loyalty service id (hashid) connected to the account.
        identifier:
          type: string
          description: Customer identifier in the format required by identifier_type.
        identifier_type:
          enum:
          - PHONE_NUMBER
          - NATIONAL_ID
          - EMAIL
          type: string
          x-spec-enum-id: 3515c240a9887624
          description: 'How to interpret identifier (for example PHONE_NUMBER, EMAIL, etc.).


            * `PHONE_NUMBER` - PHONE_NUMBER

            * `NATIONAL_ID` - NATIONAL_ID

            * `EMAIL` - EMAIL'
      required:
      - identifier
      - identifier_type
      - provider_id
    DocsStatus:
      type: object
      properties:
        data:
          description: Response message
      required:
      - data
    ReverseResponse:
      type: object
      properties:
        id:
          type: string
          description: UUID is a unique identifier for the loyalty earn transaction.
        status:
          enum:
          - PENDING
          - EARNED
          - PENDING_REVERSE
          - REVERSE_FAILED
          - REVERSED
          - FAILED
          type: string
          x-spec-enum-id: 6cf248feb958f547
          description: 'Lifecycle state: pending earn, earned, reversal, terminal failure, etc.


            * `PENDING` - PENDING

            * `EARNED` - EARNED

            * `PENDING_REVERSE` - PENDING_REVERSE

            * `REVERSE_FAILED` - REVERSE_FAILED

            * `REVERSED` - REVERSED

            * `FAILED` - FAILED'
        reversed_at:
          type:
          - string
          - 'null'
          format: date-time
      required:
      - id
    LoyaltyDataInput:
      type: object
      properties:
        provider_id:
          type: string
          description: MoneyHash loyalty service id (hashid) connected to the account.
        identifier:
          type: string
          description: Customer identifier in the format required by identifier_type.
        identifier_type:
          enum:
          - PHONE_NUMBER
          - NATIONAL_ID
          - EMAIL
          type: string
          x-spec-enum-id: 3515c240a9887624
          description: 'How to interpret identifier (for example PHONE_NUMBER, EMAIL, etc.).


            * `PHONE_NUMBER` - PHONE_NUMBER

            * `NATIONAL_ID` - NATIONAL_ID

            * `EMAIL` - EMAIL'
      required:
      - identifier
      - identifier_type
      - provider_id
    EarnCreateResponse:
      type: object
      description: Slim response shape for ``POST /loyalty/earn/`` (mirrors the spec).
      properties:
        id:
          type: string
          description: UUID is a unique identifier for the loyalty earn transaction.
        status:
          enum:
          - PENDING
          - EARNED
          - PENDING_REVERSE
          - REVERSE_FAILED
          - REVERSED
          - FAILED
          type: string
          x-spec-enum-id: 6cf248feb958f547
          description: 'Lifecycle state: pending earn, earned, reversal, terminal failure, etc.


            * `PENDING` - PENDING

            * `EARNED` - EARNED

            * `PENDING_REVERSE` - PENDING_REVERSE

            * `REVERSE_FAILED` - REVERSE_FAILED

            * `REVERSED` - REVERSED

            * `FAILED` - FAILED'
        provider_id:
          type: string
          readOnly: true
          description: MoneyHash loyalty service id (hashid).
        amount:
          type: string
          format: decimal
          pattern: ^-?\d{0,12}(?:\.\d{0,2})?$
          description: Earn amount.
        currency:
          type: string
          description: ISO currency code of the earn amount.
        merchant_reference:
          type: string
          description: Merchant-supplied reference.
          maxLength: 255
        created:
          type: string
          format: date-time
          readOnly: true
      required:
      - amount
      - created
      - currency
      - id
      - merchant_reference
      - provider_id
    EarnDetail:
      type: object
      properties:
        id:
          type: string
          description: UUID is a unique identifier for the loyalty earn transaction.
        status:
          enum:
          - PENDING
          - EARNED
          - PENDING_REVERSE
          - REVERSE_FAILED
          - REVERSED
          - FAILED
          type: string
          x-spec-enum-id: 6cf248feb958f547
          description: 'Lifecycle state: pending earn, earned, reversal, terminal failure, etc.


            * `PENDING` - PENDING

            * `EARNED` - EARNED

            * `PENDING_REVERSE` - PENDING_REVERSE

            * `REVERSE_FAILED` - REVERSE_FAILED

            * `REVERSED` - REVERSED

            * `FAILED` - FAILED'
        provider:
          type: string
          description: Display name of the loyalty provider.
        provider_id:
          type: string
          readOnly: true
          description: MoneyHash loyalty service id (hashid)
        identifier:
          type: string
          description: Customer identifier
          maxLength: 255
        identifier_type:
          enum:
          - PHONE_NUMBER
          - NATIONAL_ID
          - EMAIL
          type: string
          x-spec-enum-id: 3515c240a9887624
          description: 'How the identifier value should be interpreted (e.g. phone number).


            * `PHONE_NUMBER` - PHONE_NUMBER

            * `NATIONAL_ID` - NATIONAL_ID

            * `EMAIL` - EMAIL'
        amount:
          type: string
          format: decimal
          pattern: ^-?\d{0,12}(?:\.\d{0,2})?$
          description: Earn amount.
        currency:
          type: string
          description: ISO currency code of the earn amount.
        merchant_reference:
          type: string
          description: Merchant-supplied reference.
          maxLength: 255
        provider_reference_id:
          type:
          - string
          - 'null'
          description: Provider-side id returned by the earn call.
          maxLength: 255
        reverse_provider_reference_id:
          type:
          - string
          - 'null'
          description: Provider-side id returned by the reverse call.
          maxLength: 255
        failure_reason:
          type:
          - string
          - 'null'
          readOnly: true
        reversed_at:
          type:
          - string
          - 'null'
          format: date-time
        created:
          type: string
          format: date-time
          readOnly: true
        modified:
          type: string
          format: date-time
          readOnly: true
      required:
      - amount
      - created
      - currency
      - failure_reason
      - id
      - identifier
      - identifier_type
      - merchant_reference
      - modified
      - provider
      - provider_id
  securitySchemes:
    AccessTokenAuth:
      type: apiKey
      in: query
      name: access_token
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
x-provenance:
  method: searched
  source: https://docs.moneyhash.io/reference
  harvested: '2026-10-26'
  tool: harvest-readme-openapi.py
  note: Assembled verbatim from the OpenAPI definition ReadMe embeds in each operation page of the provider's developer portal; paths and components merged by API title, nothing authored.
  assembled_from:
  - https://docs.moneyhash.io/reference/v11_accounts_create.md
  - https://docs.moneyhash.io/reference/v11_accounts_get_from_access_token_retrieve.md
  - https://docs.moneyhash.io/reference/v11_accounts_list.md
  - https://docs.moneyhash.io/reference/v11_accounts_payment_methods_create.md
  - https://docs.moneyhash.io/reference/v11_accounts_reset_access_token_create.md
  - https://docs.moneyhash.io/reference/v11_accounts_transactions_list.md
  - https://docs.moneyhash.io/reference/v11_customers_cards_destroy.md
  - https://docs.moneyhash.io/reference/v11_customers_cards_list.md
  - https://docs.moneyhash.io/reference/v11_customers_create.md
  - https://docs.moneyhash.io/reference/v11_customers_destroy.md
  - https://docs.moneyhash.io/reference/v11_customers_list.md
  - https://docs.moneyhash.io/reference/v11_customers_partial_update.md
  - https://docs.moneyhash.io/reference/v11_customers_retrieve.md
  - https://docs.moneyhash.io/reference/v11_customers_subscriptions_retrieve.md
  - https://docs.moneyhash.io/reference/v11_customers_transactions_list.md
  - https://docs.moneyhash.io/reference/v11_customers_wallets_debit_create.md
  - https://docs.moneyhash.io/reference/v11_customers_wallets_top_up_create.md
  - https://docs.moneyhash.io/reference/v11_direct_payments_intent_create.md
  - https://docs.moneyhash.io/reference/v11_direct_payments_intents_card_token_create.md


# --- truncated at 32 KB (37 KB total) ---
# Full source: https://artifacts.apis.io/moneyhash/openapi/moneyhash-loyalty-api-openapi.yml