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

# Resolve a public payment page

> Read the payer-facing profile behind a UPA's public payment handle.

Returns a minimal payer-facing profile for a qualified handle such as `payments@acme`, but only when the handle, its owning app, the public Payment policy, the per-UPA acceptance setting and the preferred settlement are all active. It never exposes account IDs, settlement addresses or KYC data.

A UPA enables its page with [Turn public payment acceptance on or off](/api-reference/payment-handles/update-payment-acceptance).


## OpenAPI

````yaml frontend-openapi.json GET /v2/public/payment-recipients/{paymentHandle}
openapi: 3.1.0
info:
  title: Stableyard Interfaces & SDK API
  version: 2.0.0
  x-stableyard-api-version: '2026-09-09'
  x-stableyard-supported-api-versions:
    - '2026-09-09'
  summary: >-
    Advanced browser API used by Stableyard Checkout, Add Money, and
    account-bound interfaces.
  description: >

    These endpoints power Stableyard's official interface SDKs, hosted checkout,
    Add Money, and advanced custom browser integrations.


    Most partners should use `@stableyard/react` or `@stableyard/sdk` instead of
    calling these routes directly. A browser must never receive an app secret.
    Public checkout uses a Payment-scoped client secret, while account-bound
    experiences use a short-lived client bearer token created by the partner
    backend.
  x-stableyard-documentation-surface: frontend
servers:
  - url: https://prod-api.stableyard.fi
    description: Production
  - url: https://staging-api-v2.stableyard.fi
    description: Sandbox
security: []
tags:
  - name: Authentication
    x-displayName: API authentication
    description: Verify your app ID and app secret before calling UPA APIs.
  - name: Client API
    description: >-
      Account-bound browser and mobile routes authenticated with a short-lived
      client bearer token. App secrets never enter client code.
  - name: Payments
    description: >-
      Create escrow-first payments, issue partner-authenticated send
      instructions or executions, power public checkout, and reconcile
      collection through final account settlement.
paths:
  /v2/public/payment-recipients/{paymentHandle}:
    get:
      tags:
        - Payments
      summary: Resolve public payment page
      description: >-
        Returns a minimal payer-facing profile only when the qualified UPA
        handle, owning app, public Payment policy, per-UPA acceptance setting,
        and preferred settlement are all active. It never exposes account IDs,
        settlement addresses, or KYC data.
      operationId: getPublicPaymentRecipient
      parameters:
        - name: paymentHandle
          in: path
          required: true
          schema:
            type: string
            pattern: ^[a-z0-9][a-z0-9_.-]{2,39}@[a-z0-9][a-z0-9_-]{1,63}$
            example: payments@acme
      responses:
        '200':
          description: Public payment recipient
          headers:
            Stableyard-Version:
              description: >-
                Effective date-based Stableyard API contract version for this
                response.
              schema:
                type: string
                enum:
                  - '2026-09-09'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicPaymentRecipient'
              examples:
                example:
                  summary: Resolve public payment page 200 response
                  value:
                    appId: app_123
                    paymentHandle: payments@acme
                    recipient:
                      displayName: Example account
                      logoUrl: null
                    paymentPageUrl: https://example.com
                    paymentAmount:
                      assetType: crypto
                      assetCode: USDC
                      minimumAmount: '1000000'
                      maximumAmount: '1000000'
                    methods:
                      - crypto
                    paymentTtlSeconds: 120
                    createEndpoint: example
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
      security: []
components:
  schemas:
    PublicPaymentRecipient:
      type: object
      additionalProperties: false
      required:
        - appId
        - paymentHandle
        - recipient
        - paymentPageUrl
        - paymentAmount
        - methods
        - paymentTtlSeconds
        - createEndpoint
      properties:
        appId:
          type: string
          pattern: ^app_
        paymentHandle:
          type: string
          example: payments@acme
        recipient:
          type: object
          additionalProperties: false
          required:
            - displayName
            - logoUrl
          properties:
            displayName:
              type: string
              minLength: 1
              maxLength: 120
            logoUrl:
              type:
                - string
                - 'null'
              format: uri
              maxLength: 2048
        paymentPageUrl:
          type: string
          format: uri
        paymentAmount:
          type: object
          additionalProperties: false
          required:
            - assetType
            - assetCode
            - minimumAmount
            - maximumAmount
          properties:
            assetType:
              type: string
              const: crypto
            assetCode:
              type: string
              example: USDC
            minimumAmount:
              type: string
              pattern: ^(?:[1-9][0-9]*(?:\.[0-9]+)?|0\.(?:[0-9]*[1-9][0-9]*))$
            maximumAmount:
              type: string
              pattern: ^(?:[1-9][0-9]*(?:\.[0-9]+)?|0\.(?:[0-9]*[1-9][0-9]*))$
        methods:
          type: array
          items:
            type: string
            enum:
              - crypto
              - routing
              - onramp
        paymentTtlSeconds:
          type: integer
          minimum: 120
          maximum: 3600
        createEndpoint:
          type: string
    ErrorResponse:
      type: object
      additionalProperties: false
      required:
        - error
      properties:
        error:
          type: object
          additionalProperties: false
          required:
            - code
            - message
          properties:
            code:
              type: string
              minLength: 1
              maxLength: 128
              example: bad_request
            message:
              type: string
              minLength: 1
              maxLength: 1000
              example: The request is invalid
            details: {}
  responses:
    BadRequest:
      description: Bad request
      headers:
        Stableyard-Version:
          description: >-
            Effective date-based Stableyard API contract version for this
            response.
          schema:
            type: string
            enum:
              - '2026-09-09'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            example:
              summary: bad_request
              value:
                error:
                  code: bad_request
                  message: The request is invalid
    NotFound:
      description: Not found
      headers:
        Stableyard-Version:
          description: >-
            Effective date-based Stableyard API contract version for this
            response.
          schema:
            type: string
            enum:
              - '2026-09-09'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            example:
              summary: not_found
              value:
                error:
                  code: not_found
                  message: The resource was not found

````

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