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

# Get available payment methods

> List the onramp payment methods available for a fiat input and an output asset, grouped by
onramp provider.

Availability depends on the end user's location, so pass the end user's `customer_ip_address`
when your backend makes the request on their behalf. Use the result to show users which
payment methods they can choose before requesting quotes, or to build the `onramp_methods`
filter for `POST /payments/quotes`.




## OpenAPI

````yaml /public/openapi.yaml get /payments/methods
openapi: 3.1.0
info:
  title: Halliday
  description: >
    Halliday's payment infrastructure, supporting onramps, swaps, and offramps.


    This API provides a unified interface for cryptocurrency payments, allowing
    developers to:

    - Quote payments across multiple providers

    - Execute payments with onramps, swaps, and offramps

    - Track payment status and history


    ## Authentication


    API key authentication is required for all endpoints.
  version: 2.0.0
  contact:
    name: Contact Halliday
    url: https://halliday.xyz
    email: support@halliday.xyz
servers:
  - url: https://v2.prod.halliday.xyz
    description: Base domain
security:
  - ApiKeyAuth: []
tags:
  - name: Chains
    description: Blockchain network information and configuration
  - name: Assets
    description: Asset information, discovery, and supported asset pairs
  - name: Geolocation
    description: >-
      Resolve an end user's IP address to a location and default fiat currency
      before quoting
  - name: Prices
    description: Current token prices denominated in a fiat currency
  - name: Payments
    description: >-
      Core payment operations including quotes, confirmation, and status
      tracking
  - name: Webhooks
    description: >
      Register HTTPS endpoints to receive signed notifications when a workflow
      reaches a terminal

      state, instead of polling for status. You subscribe to one or more event
      types per webhook.


      | Event type | Fires when a workflow's status becomes |

      | --- | --- |

      | `WORKFLOW_COMPLETED` | `COMPLETE` |

      | `WORKFLOW_FAILED` | `FAILED` |


      All management endpoints live under `/orgs/webhooks` and authenticate with
      a secret API key

      (passed as a bearer token) that has webhook access. Publishable keys
      cannot manage webhooks.


      **Integration checklist**


      - Receiver is a public HTTPS endpoint (no private IPs).

      - Save the `signing_secret` when you create the webhook — it is shown only
      once.

      - Verify `X-Halliday-Signature` against the raw body, accepting any of its
      comma-separated signatures.

      - Respond `2xx` quickly and do the real work afterward.

      - Skip deliveries whose `id` you have already handled.
paths:
  /payments/methods:
    get:
      tags:
        - Payments
      summary: Get available payment methods
      description: >
        List the onramp payment methods available for a fiat input and an output
        asset, grouped by

        onramp provider.


        Availability depends on the end user's location, so pass the end user's
        `customer_ip_address`

        when your backend makes the request on their behalf. Use the result to
        show users which

        payment methods they can choose before requesting quotes, or to build
        the `onramp_methods`

        filter for `POST /payments/quotes`.
      operationId: getPaymentMethods
      parameters:
        - name: input
          in: query
          required: true
          description: Fiat currency the user will pay with
          schema:
            $ref: '#/components/schemas/Fiat'
        - name: output
          in: query
          required: true
          description: Asset the user will receive
          schema:
            $ref: '#/components/schemas/Asset'
        - name: customer_ip_address
          in: query
          required: false
          description: >-
            IPv4 or IPv6 address of the end user, used to determine
            location-based availability
          schema:
            type: string
          example: 8.8.8.8
      responses:
        '200':
          description: Payment methods retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentMethodsResponse'
              example:
                providers:
                  stripe:
                    - CREDIT_CARD
                    - DEBIT_CARD
                    - GOOGLE_PAY
                  moonpay:
                    - APPLE_PAY
                    - CREDIT_CARD
                    - DEBIT_CARD
                    - GOOGLE_PAY
                    - PAYPAL
                    - VENMO
                  coinbase:
                    - ACH
                    - DEBIT_CARD
                    - FIAT_BALANCE
                  banxa:
                    - CREDIT_CARD
                    - DEBIT_CARD
                    - GOOGLE_PAY
                  rampnetwork:
                    - APPLE_PAY
                    - CREDIT_CARD
                    - DEBIT_CARD
                    - GOOGLE_PAY
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
              example:
                errors:
                  - code: invalid_union
                    path:
                      - output
                    message: Invalid input
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                errors:
                  - kind: other
                    message: Invalid API key
components:
  schemas:
    Fiat:
      type: string
      description: Fiat currency code
      example: USD
    Asset:
      type: string
      description: >-
        Identifier in the token format ("chain:address") or fiat currency code
        ("USD")
      example: ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
    PaymentMethodsResponse:
      type: object
      required:
        - providers
      properties:
        providers:
          type: object
          description: >-
            Onramp provider name mapped to the payment methods it offers for
            this route and location. Get in touch with the Halliday team to have
            SWIFT enabled on your API key.
          additionalProperties:
            type: array
            items:
              type: string
              enum:
                - CREDIT_CARD
                - DEBIT_CARD
                - ACH
                - FIAT_BALANCE
                - TOKEN_BALANCE
                - APPLE_PAY
                - PAYPAL
                - VENMO
                - REVOLUT
                - GOOGLE_PAY
                - SEPA
                - FASTER_PAYMENTS
                - PIX
                - SPEI
                - UPI
                - WIRE
                - SWIFT
        in_house:
          type: object
          description: >-
            Same shape as `providers`, for rails operated directly by Halliday.
            Present only when applicable. Get in touch with the Halliday team to
            have SWIFT enabled on your API key.
          additionalProperties:
            type: array
            items:
              type: string
              enum:
                - CREDIT_CARD
                - DEBIT_CARD
                - ACH
                - FIAT_BALANCE
                - TOKEN_BALANCE
                - APPLE_PAY
                - PAYPAL
                - VENMO
                - REVOLUT
                - GOOGLE_PAY
                - SEPA
                - FASTER_PAYMENTS
                - PIX
                - SPEI
                - UPI
                - WIRE
                - SWIFT
    ValidationErrorResponse:
      type: object
      description: >
        Returned when a request body fails schema validation. `errors` contains
        one entry per

        validation issue.
      required:
        - errors
      properties:
        errors:
          type: array
          items:
            type: object
            required:
              - code
              - path
              - message
            properties:
              code:
                type: string
                description: Validation issue code (for example `invalid_type`).
                example: invalid_type
              expected:
                type: string
                description: Expected type. Present on type-mismatch issues.
                example: string
              path:
                type: array
                description: Path to the offending field in the request body.
                items:
                  type:
                    - string
                    - integer
                example:
                  - label
              message:
                type: string
                example: 'Invalid input: expected string, received undefined'
    ErrorResponse:
      type: object
      required:
        - errors
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/Issue'
      description: Error response for known errors
    Issue:
      oneOf:
        - $ref: '#/components/schemas/AmountIssue'
        - $ref: '#/components/schemas/AmountDownstreamIssue'
        - $ref: '#/components/schemas/FundingIssue'
        - $ref: '#/components/schemas/OwnerIssue'
        - $ref: '#/components/schemas/GeolocationIssue'
        - $ref: '#/components/schemas/ProviderIssue'
        - $ref: '#/components/schemas/PayinMethodIssue'
        - $ref: '#/components/schemas/OtherIssue'
        - $ref: '#/components/schemas/UnknownIssue'
        - $ref: '#/components/schemas/OrgConfigurationIssue'
        - $ref: '#/components/schemas/ParkedFundIssue'
        - $ref: '#/components/schemas/DestinationIssue'
        - $ref: '#/components/schemas/PayoutMethodIssue'
        - $ref: '#/components/schemas/KycIssue'
      discriminator:
        propertyName: kind
    AmountIssue:
      type: object
      required:
        - kind
        - asset
        - given
        - limits
        - source
        - message
        - reason
      properties:
        kind:
          type: string
          enum:
            - amount
        asset:
          $ref: '#/components/schemas/Asset'
        given:
          $ref: '#/components/schemas/Amount'
        limits:
          $ref: '#/components/schemas/Limits'
        downstream_limits:
          $ref: '#/components/schemas/Limits'
        source:
          type: string
        message:
          type: string
        reason:
          type: string
          enum:
            - TOO_LOW
            - TOO_HIGH
            - UNEXPECTEDLY_LOW
            - UNEXPECTEDLY_HIGH
            - NO_VALID_AMOUNT
            - UNKNOWN
    AmountDownstreamIssue:
      type: object
      required:
        - kind
        - asset
        - given
        - limits
        - source
        - message
        - reason
      properties:
        kind:
          type: string
          enum:
            - amount-downstream
        asset:
          $ref: '#/components/schemas/Asset'
        given:
          $ref: '#/components/schemas/Amount'
        limits:
          $ref: '#/components/schemas/Limits'
        downstream_limits:
          $ref: '#/components/schemas/Limits'
        source:
          type: string
        message:
          type: string
        reason:
          type: string
          enum:
            - TOO_LOW
            - TOO_HIGH
            - UNEXPECTEDLY_LOW
            - UNEXPECTEDLY_HIGH
            - NO_VALID_AMOUNT
            - UNKNOWN
    FundingIssue:
      type: object
      required:
        - kind
        - token
        - balance
      properties:
        kind:
          type: string
          enum:
            - funding
        token:
          $ref: '#/components/schemas/Token'
        balance:
          type: object
          required:
            - '#'
          properties:
            '#':
              type: string
              description: Balance amount as a decimal string.
          description: Current token balance at the funding address.
    OwnerIssue:
      type: object
      required:
        - kind
        - message
        - mitigation
      properties:
        kind:
          type: string
          enum:
            - owner
        message:
          type: string
        mitigation:
          type: string
          enum:
            - change
            - verify
    GeolocationIssue:
      type: object
      required:
        - kind
        - message
      properties:
        kind:
          type: string
          enum:
            - geolocation
        message:
          type: string
    ProviderIssue:
      type: object
      required:
        - kind
        - message
      properties:
        kind:
          type: string
          enum:
            - provider
        message:
          type: string
    PayinMethodIssue:
      type: object
      required:
        - kind
        - message
      properties:
        kind:
          type: string
          enum:
            - payin_method
        message:
          type: string
    OtherIssue:
      type: object
      required:
        - kind
        - message
      properties:
        kind:
          type: string
          enum:
            - other
        message:
          type: string
    UnknownIssue:
      type: object
      required:
        - kind
        - message
      properties:
        kind:
          type: string
          enum:
            - unknown
        message:
          type: string
    OrgConfigurationIssue:
      type: object
      required:
        - kind
        - message
      properties:
        kind:
          type: string
          enum:
            - org_configuration
        message:
          type: string
        rev_share_pct:
          type: string
        total_pct:
          type: string
        threshold:
          type: string
    ParkedFundIssue:
      type: object
      description: >-
        Funds are held at a deposit address associated with the owner and are
        not being processed.
      required:
        - kind
        - token
        - balance
        - classification
        - severity
        - payment_gist
        - withdraw_from
      properties:
        kind:
          type: string
          enum:
            - parked_fund
        token:
          $ref: '#/components/schemas/Token'
        balance:
          type: object
          required:
            - '#'
          properties:
            '#':
              type: string
              description: >-
                Integer amount in the token's smallest unit, serialized as a
                string.
              example: '25500000'
          description: >
            Token balance parked at the address, as an integer in the token's
            smallest unit. The `{"#": "..."}`

            wrapper is how the API serializes integers too large for a JSON
            number. Divide by the token's

            `decimals` from `GET /assets` to display it, for example `{"#":
            "25500000"}` is 25.5 USDC.

            Note that `POST /payments/balances` reports the same funds as a
            plain decimal string (`"25.5"`).
        classification:
          type: string
          enum:
            - MISSENT
            - STUCK
            - UNDERFUNDED
            - STALLED
            - EXTRA
            - SLIPPED
            - DELAYED
          description: Why the funds are parked.
        severity:
          type: string
          enum:
            - HIGH
            - LOW
        payment_gist:
          $ref: '#/components/schemas/PaymentGist'
          description: Summary of the payment the funds were intended for, or null.
        withdraw_from:
          $ref: '#/components/schemas/WithdrawFrom'
          description: >-
            Where the parked funds can be withdrawn from, or null if they cannot
            be withdrawn through the API.
    DestinationIssue:
      type: object
      required:
        - kind
        - message
      properties:
        kind:
          type: string
          enum:
            - destination
        message:
          type: string
    PayoutMethodIssue:
      type: object
      required:
        - kind
        - message
      properties:
        kind:
          type: string
          enum:
            - payout_method
        message:
          type: string
    KycIssue:
      type: object
      required:
        - kind
        - message
      properties:
        kind:
          type: string
          enum:
            - kyc
        message:
          type: string
        provider_id:
          type: string
    Amount:
      type: string
      description: A decimal amount string.
    Limits:
      type: object
      properties:
        min:
          type: string
          description: Minimum amount as a decimal string.
        max:
          type: string
          description: Maximum amount as a decimal string.
    Token:
      type: string
      description: Token identifier in the format "chain:address"
      pattern: ^[a-z]+:0x[a-fA-F0-9]+$
      example: ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
    PaymentGist:
      anyOf:
        - type: object
          required:
            - op
            - destination_address
            - destination_token
          properties:
            op:
              type: string
              enum:
                - buy
            destination_address:
              type: string
            destination_token:
              $ref: '#/components/schemas/Token'
        - type: 'null'
      description: Summary of a payment, or null.
    WithdrawFrom:
      anyOf:
        - type: object
          required:
            - withdraw_type
            - payment_id
            - withdraw_account
          properties:
            withdraw_type:
              type: string
              enum:
                - PAYMENT
            payment_id:
              type: string
              format: uuid
            withdraw_account:
              type: string
              enum:
                - INTENT
                - SPW
                - RDW
        - type: object
          required:
            - withdraw_type
            - rdw_address
          properties:
            withdraw_type:
              type: string
              enum:
                - EXTRA_RDW_BALANCE
            rdw_address:
              type: string
        - type: 'null'
      description: >-
        Where funds can be withdrawn from, or null if they cannot be withdrawn
        through the API.
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: API_KEY

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.