BILT Default payment method API

Read-only lookup of a customer's current default payment-method summary for display and pre-flight checks. Bilt resolves the default again at charge time, so it may change between lookup and payment.

Operations 1

GET /partner/checkout/v1/customers/{integratorCustomerId}/default-payment-method Get a customer's default payment method #

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/bilt:bilt-default-payment-method-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

bilt-default-payment-method-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Bilt Checkout SDK Default payment method API
  version: 0.2.0-draft
  description: '# Introduction


    External backend contract for integrators using the Bilt Checkout SDK.'
servers:
- url: https://partnerapi.biltrewards.com
  description: Production — partner (third-party) gateway
- url: https://staging.partnerapi.biltrewards.com
  description: Staging — partner (third-party) gateway
security:
- checkoutPartnerOAuth: []
tags:
- name: Default payment method
  description: 'Read-only lookup of a customer''s current default payment-method

    summary for display and pre-flight checks. Bilt resolves the default

    again at charge time, so it may change between lookup and payment.'
paths:
  /partner/checkout/v1/customers/{integratorCustomerId}/default-payment-method:
    get:
      tags:
      - Default payment method
      summary: Get a customer's default payment method
      operationId: getDefaultPaymentMethod
      description: 'Read-only lookup of the customer''s current default payment-method

        summary for display and pre-flight checks. Use it to check that the

        customer has a chargeable default before calling

        `/partner/checkout/v1/headless-payments`. This endpoint does not accept

        a payment method as input. Bilt still resolves the default itself at

        charge time, so the card can change between this lookup and the charge.


        **[CHECK]** This endpoint is not yet implemented in checkout-svc or

        registered on the gateway; the contract below is the proposed shape.'
      parameters:
      - name: integratorCustomerId
        in: path
        required: true
        description: Your stable identifier for the customer.
        schema:
          type: string
          minLength: 1
          maxLength: 64
          pattern: ^[A-Za-z0-9_.:~-]+$
        example: acme_customer_sandbox_123
      responses:
        '200':
          description: Default payment method found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DefaultPaymentMethodResponse'
              example:
                data:
                  integratorCustomerId: acme_customer_sandbox_123
                  paymentMethod:
                    last4: '4242'
                    brand: VISA
                    type: CREDIT
                    expiryMonth: 12
                    expiryYear: 2028
                  updatedAt: '2026-08-24T22:00:00Z'
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '404':
          $ref: '#/components/responses/HeadlessNotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  responses:
    InternalError:
      description: 'Unexpected Bilt error. For headless payments, do not retry blindly:

        the charge may have been accepted — check for a `payment.*` webhook

        for the same `orderId` first, and retry with the **same**

        `Idempotency-Key`.

        '
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: INTERNAL_ERROR
              message: Unexpected server error
              requestId: request_sandbox_133
              retryable: false
    HeadlessNotFound:
      description: 'The customer is not linked to a Bilt member, or the member has no

        default Bilt payment method to charge.

        '
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            customerNotFound:
              value:
                error:
                  code: CUSTOMER_NOT_FOUND
                  message: No linked Bilt member for integratorCustomerId
                  requestId: request_sandbox_128
                  retryable: false
            paymentMethodNotFound:
              value:
                error:
                  code: PAYMENT_METHOD_NOT_FOUND
                  message: The member has no default payment method
                  requestId: request_sandbox_129
                  retryable: false
    Unauthenticated:
      description: Missing, expired, or wrong-audience access token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: UNAUTHENTICATED
              message: Missing or invalid access token
              requestId: request_sandbox_126
              retryable: false
    RateLimited:
      description: 'Too many requests. Gateway-enforced; retry with backoff, honouring

        `Retry-After` when present. The sync endpoint''s limit is lower than

        the async endpoint''s. Per-integrator quotas are agreed during

        onboarding when your volume warrants one.

        '
      headers:
        Retry-After:
          description: Number of seconds to wait before retrying.
          schema:
            type: integer
            minimum: 1
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: RATE_LIMIT_EXCEEDED
              message: Too many requests
              requestId: request_sandbox_132
              retryable: true
  schemas:
    DefaultPaymentMethodResponse:
      type: object
      additionalProperties: false
      required:
      - data
      properties:
        data:
          type: object
          additionalProperties: false
          required:
          - integratorCustomerId
          - paymentMethod
          - updatedAt
          properties:
            integratorCustomerId:
              type: string
              minLength: 1
              maxLength: 64
              pattern: ^[A-Za-z0-9_.:~-]+$
              example: acme_customer_sandbox_123
            paymentMethod:
              $ref: '#/components/schemas/PaymentMethodSummary'
            updatedAt:
              type: string
              format: date-time
              example: '2026-08-24T22:00:00Z'
    ErrorDetail:
      type: object
      additionalProperties: false
      required:
      - code
      - message
      - requestId
      - retryable
      properties:
        code:
          type: string
          pattern: ^[A-Z][A-Z0-9_]*$
          description: Stable machine-readable code; see **Introduction › Errors**.
          enum:
          - INVALID_REQUEST
          - UNAUTHENTICATED
          - CUSTOMER_NOT_FOUND
          - PAYMENT_METHOD_NOT_FOUND
          - IDEMPOTENCY_CONFLICT
          - SESSION_ALREADY_COMPLETED
          - RATE_LIMIT_EXCEEDED
          - INTERNAL_ERROR
          - PAYMENT_UNAVAILABLE
          example: CUSTOMER_NOT_FOUND
        message:
          type: string
          description: Human-readable operational message; do not branch on it.
          example: No linked Bilt member for integratorCustomerId
        requestId:
          type: string
          description: Correlation id to quote when contacting Bilt.
          example: request_sandbox_123
        retryable:
          type: boolean
          description: 'Whether sending the same request again may succeed. `false`

            whenever somebody has to act first.

            '
          example: false
    PaymentMethodSummary:
      type: object
      additionalProperties: false
      required:
      - last4
      - brand
      - type
      - expiryMonth
      - expiryYear
      properties:
        last4:
          type: string
          pattern: ^[0-9]{4}$
          description: Last four digits for display only.
          example: '4242'
        brand:
          type: string
          description: '[CHECK: provisional values, e.g. VISA, MASTERCARD, AMEX, DISCOVER, OTHER.] Card brand.'
          example: VISA
        type:
          type: string
          description: '[CHECK: provisional values, e.g. CREDIT, DEBIT, OTHER.] Payment method type.'
          example: CREDIT
        expiryMonth:
          type: integer
          minimum: 1
          maximum: 12
          description: Expiration month.
          example: 12
        expiryYear:
          type: integer
          description: Expiration year.
          example: 2028
    ErrorResponse:
      type: object
      additionalProperties: false
      required:
      - error
      description: 'Error envelope returned on every non-`2xx` response. Branch on the

        stable `code`, not the human-readable `message`.

        '
      properties:
        error:
          $ref: '#/components/schemas/ErrorDetail'
  securitySchemes:
    checkoutPartnerOAuth:
      type: oauth2
      description: 'OAuth 2.0 client credentials against the `enterprise-partner`

        Keycloak realm. Bilt issues your client id and client secret during

        onboarding; tokens carry an audience Bilt assigns to your client at

        onboarding, and Bilt

        identifies your integration from the token''s `azp` claim. You do not

        request the audience or any scope yourself: Bilt assigns the audience

        to your client at onboarding, and no scopes are required — a plain

        client-credentials grant with your client id and secret is enough. The

        values you need from Bilt are the token endpoint for the environment,

        your client id, and your client secret. Send the result as

        `Authorization: Bearer <access_token>`. The token URL below is

        **staging** — production is

        `https://www.bilt.com/realms/enterprise-partner/protocol/openid-connect/token`.

        Keep the client secret server-side only.

        '
      flows:
        clientCredentials:
          tokenUrl: https://staging.biltrewards.com/realms/enterprise-partner/protocol/openid-connect/token
          scopes: {}
x-tagGroups:
- name: Checkout SDK
  tags:
  - Integration models
  - Gateway mode
  - Choosing an acquirer
  - One-time payments
  - Headless payments
  - Default payment method
  - Payment webhooks