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

# Tokenize raw bank account data

> Exchanges a customer's bank account details for a permanent Jupico token. Use the token in place of the account and routing numbers on eCheck sales. Tokenizing the same account number, routing number, and account type again returns the existing token. Requires bank account tokenization to be enabled for the product and the submerchant. Replaces the deprecated [`POST /v1/transactions/echeck/tokenize`](/api-reference/echeck-transactions/tokenize-a-bank-account). See the [bank account tokenization guide](/docs/payments/bank-account/tokenization).



## OpenAPI

````yaml /openapi.json post /v1/tokenization/bankaccount/raw
openapi: 3.0.0
info:
  title: Jupico - OpenAPI 3.0
  description: >-
    The Jupico API lets Service Providers onboard merchants, process card and
    eCheck (ACH) payments, run hosted payment pages, manage recurring billing,
    send payouts, and query every resource. All endpoints use HTTPS with Basic
    authentication and accept and return JSON. Endpoints are grouped by
    workflow: onboard merchants first, then accept payments, then move funds and
    report.
  termsOfService: https://help.jupico.com/references-and-resources/legal
  contact:
    email: support@jupico.com
  license:
    name: Jupico License
    url: https://jupico.com
  version: 1.0.5
servers:
  - url: https://sandbox-platform.jupico.com
security:
  - basicAuth: []
tags:
  - name: Status
    description: Health check for the Jupico API.
  - name: Onboarding Invites
    description: >-
      Create and send invites that onboard merchants through the Jupico-hosted
      flow, with optional pre-filled identity, fees, and payout bank account
      data.
  - name: Provisioning
    description: >-
      Onboard merchants from your own UI. Collect onboarding data and submit it
      through the provisioning chain: applicant → application → submerchant.
  - name: Session
    description: >-
      Create browser authorization sessions for the Jupico web components, so
      card and bank account data is tokenized client-side and never touches your
      servers.
  - name: Tokenization
    description: >-
      Convert one-time tokens from the web components into permanent Jupico
      tokens, tokenize raw card data if your systems are PCI DSS compliant, or
      tokenize raw bank account data.
  - name: Customer
    description: >-
      Create and manage customer records that payments, subscriptions,
      installments, and invoices link to.
  - name: Card Transactions
    description: >-
      Process credit and debit card transactions using tokenized card data:
      sale, authorization, capture, void, refund, and rollback.
  - name: eCheck Transactions
    description: >-
      Debit customer bank accounts via eCheck (ACH): sale, void, refund, and
      rollback. Bank account tokenization here is deprecated; use the
      Tokenization endpoint instead.
  - name: Checkouts
    description: >-
      Hosted checkout sessions where customers complete payment on a
      Jupico-hosted page.
  - name: Payment Links
    description: >-
      Shareable links that open a Jupico-hosted payment page — no integration
      code needed at the point of sharing.
  - name: Invoices
    description: Create and email invoices that customers pay online.
  - name: Subscriptions
    description: >-
      Recurring billing. Plans define billing schedules and pricing models;
      subscriptions enroll customers against a stored payment token.
  - name: Installments
    description: Split a fixed total into scheduled payments with an optional deposit.
  - name: Payouts
    description: >-
      Send funds from a submerchant's available balance to a tokenized bank
      account with on-demand payout instructions.
  - name: Query
    description: >-
      Search and report across every resource: transactions, merchants,
      settlements, balances, disputes, fees, and more. All query endpoints
      accept the same filter, sort, and pagination envelope — see the Query
      Capabilities guide.
  - name: Currency Exchange API
    description: >-
      Query live exchange rates, convert amounts between currencies, and
      retrieve the list of supported currency codes.
paths:
  /v1/tokenization/bankaccount/raw:
    post:
      tags:
        - Tokenization
      summary: Tokenize raw bank account data
      description: >-
        Exchanges a customer's bank account details for a permanent Jupico
        token. Use the token in place of the account and routing numbers on
        eCheck sales. Tokenizing the same account number, routing number, and
        account type again returns the existing token. Requires bank account
        tokenization to be enabled for the product and the submerchant. Replaces
        the deprecated [`POST
        /v1/transactions/echeck/tokenize`](/api-reference/echeck-transactions/tokenize-a-bank-account).
        See the [bank account tokenization
        guide](/docs/payments/bank-account/tokenization).
      operationId: bankAccountTokenizeRaw
      requestBody:
        $ref: '#/components/requestBodies/bankAccountTokenizeRaw'
      responses:
        '200':
          $ref: '#/components/responses/bankAccountTokenizeRaw'
        '400':
          description: >-
            Invalid payload. A field is missing or invalid, or the body includes
            a field this endpoint doesn't accept.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                    description: Always `false` for errors.
                  code:
                    type: string
                    description: >-
                      Machine-readable error code. See the Error Codes
                      reference.
                  message:
                    type: string
                    description: Human-readable error message.
                  errors:
                    type: array
                    description: >-
                      Validation errors. Present only on `invalid_payload`. Each
                      entry names the field (`path`) and the rule it broke
                      (`msg`). Rejected values are never echoed back.
                    items:
                      type: object
                      properties:
                        type:
                          type: string
                          description: >-
                            `field` for a field rule, or `unknown_fields` when
                            the body has fields the endpoint doesn't accept.
                        msg:
                          type: string
                          description: What's wrong with the field.
                        path:
                          type: string
                          description: Name of the field that failed.
                        location:
                          type: string
                          description: Where the field was sent. Always `body`.
              examples:
                invalidField:
                  summary: A field failed validation
                  value:
                    success: false
                    message: Invalid payload.
                    code: invalid_payload
                    errors:
                      - type: field
                        msg: routingNumber must be a valid routing number
                        path: routingNumber
                        location: body
                unknownField:
                  summary: The body includes an unsupported field
                  value:
                    success: false
                    message: Invalid payload.
                    code: invalid_payload
                    errors:
                      - type: unknown_fields
                        msg: Unknown field(s)
                        fields:
                          - path: alias
                            location: body
        '401':
          description: Authentication or authorization failed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                    description: Always `false` for errors.
                  code:
                    type: string
                    description: >-
                      Machine-readable error code. See the Error Codes
                      reference.
                  message:
                    type: string
                    description: Human-readable error message.
                  errors:
                    type: array
                    description: >-
                      Validation errors. Present only on `invalid_payload`. Each
                      entry names the field (`path`) and the rule it broke
                      (`msg`). Rejected values are never echoed back.
                    items:
                      type: object
                      properties:
                        type:
                          type: string
                          description: >-
                            `field` for a field rule, or `unknown_fields` when
                            the body has fields the endpoint doesn't accept.
                        msg:
                          type: string
                          description: What's wrong with the field.
                        path:
                          type: string
                          description: Name of the field that failed.
                        location:
                          type: string
                          description: Where the field was sent. Always `body`.
              examples:
                invalidSubmerchant:
                  summary: '`subMerchantId` not found or not active'
                  value:
                    success: false
                    message: SubMerchant not found or inactive.
                    code: auth_invalid_submerchant
                submerchantDisabled:
                  summary: Submerchant is disabled
                  value:
                    success: false
                    message: SubMerchant is disabled.
                    code: auth_submerchant_disabled
                featureDisabled:
                  summary: Bank account tokenization isn't enabled for the submerchant
                  value:
                    success: false
                    message: >-
                      Submerchant feature disabled. Feature:
                      bankAccountTokenization.
                    code: auth_submerchant_feature_disabled
                productFeatureDisabled:
                  summary: Bank account tokenization isn't enabled for the product
                  value:
                    success: false
                    message: >-
                      Service provider feature disabled. Feature:
                      bankAccountTokenization.
                    code: auth_service_provider_feature_disabled
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                    description: Always `false` for errors.
                  code:
                    type: string
                    description: >-
                      Machine-readable error code. See the Error Codes
                      reference.
                  message:
                    type: string
                    description: Human-readable error message.
                  errors:
                    type: array
                    description: >-
                      Validation errors. Present only on `invalid_payload`. Each
                      entry names the field (`path`) and the rule it broke
                      (`msg`). Rejected values are never echoed back.
                    items:
                      type: object
                      properties:
                        type:
                          type: string
                          description: >-
                            `field` for a field rule, or `unknown_fields` when
                            the body has fields the endpoint doesn't accept.
                        msg:
                          type: string
                          description: What's wrong with the field.
                        path:
                          type: string
                          description: Name of the field that failed.
                        location:
                          type: string
                          description: Where the field was sent. Always `body`.
              examples:
                internal:
                  summary: Unexpected error
                  value:
                    success: false
                    message: Internal server error.
                    code: internal_server_error
      security:
        - basicAuth: []
components:
  requestBodies:
    bankAccountTokenizeRaw:
      description: >-
        Raw bank account details to tokenize. The endpoint rejects any field not
        listed here.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/bankAccountTokenizeRaw'
          examples:
            bankAccountTokenizeRaw:
              $ref: '#/components/examples/bankAccountTokenizeRaw'
  responses:
    bankAccountTokenizeRaw:
      description: Bank account tokenized.
      content:
        application/json:
          schema:
            type: object
            properties:
              success:
                type: boolean
                example: true
                description: Whether the request was processed successfully.
              code:
                type: string
                example: '0'
                description: Machine-readable result code. See the Error Codes reference.
              message:
                type: string
                example: Tokenization success
                description: Human-readable result message.
              data:
                type: object
                properties:
                  paymentToken:
                    type: object
                    properties:
                      type:
                        type: string
                        example: echeck
                        description: >-
                          Payment method type. Always `echeck` for bank
                          accounts.
                      token:
                        type: object
                        properties:
                          provider:
                            type: string
                            example: jupico
                            description: Token provider. Always `jupico`.
                          token:
                            type: string
                            format: uuid
                            example: 8b728fb4-976c-43c1-8402-04c23ac18861
                            description: >-
                              Permanent bank account token. Send it in
                              `paymentToken.token.token` on eCheck sales.
                          accountType:
                            type: string
                            example: checking
                            description: 'Bank account type: `checking` or `savings`.'
                          routingLast4Digits:
                            type: string
                            example: '7238'
                            description: Last 4 digits of the routing number.
                          accountLast4Digits:
                            type: string
                            example: '2311'
                            description: Last 4 digits of the bank account number.
                          accountHolderName:
                            type: string
                            example: John Doe
                            description: >-
                              Name on the bank account, as stored when the token
                              was first created.
                          alias:
                            type: string
                            description: >-
                              Friendly name stored with the token. Present only
                              if the token was created with an `alias` through
                              the deprecated endpoint.
                        description: The bank account token and its non-sensitive details.
                    description: >-
                      Permanent payment token to use in place of the raw bank
                      account details.
                description: The response payload.
          example:
            success: true
            code: '0'
            message: Tokenization success
            data:
              paymentToken:
                type: echeck
                token:
                  provider: jupico
                  token: 8b728fb4-976c-43c1-8402-04c23ac18861
                  accountType: checking
                  routingLast4Digits: '7238'
                  accountLast4Digits: '2311'
                  accountHolderName: John Doe
  schemas:
    bankAccountTokenizeRaw:
      type: object
      additionalProperties: false
      properties:
        subMerchantId:
          type: string
          maxLength: 100
          pattern: ^[a-zA-Z0-9\-_'.,@&:#%() ]+$
          example: jpt-sim-md-1
          description: >-
            Submerchant that owns the bank account. Must be active, belong to
            your product, and have bank account tokenization enabled.
        accountType:
          type: string
          enum:
            - checking
            - savings
          example: checking
          description: Bank account type.
        accountHolderName:
          type: string
          maxLength: 100
          pattern: ^[a-zA-Z0-9\-_'.,@&:#%() ]+$
          example: John Doe
          description: >-
            Name on the bank account, up to 100 characters. The holder can be a
            person or a business. Allowed characters: letters, digits, spaces,
            and `- _ ' . , @ & : # % ( )`. Accents and look-alike characters are
            normalized before validation (for example, `José` becomes `Jose`).
        accountNumber:
          type: string
          minLength: 4
          maxLength: 17
          pattern: ^[0-9]+$
          example: '12312311'
          description: Bank account number, 4 to 17 digits only.
        routingNumber:
          type: string
          pattern: ^[0-9]{9}$
          example: '122187238'
          description: 9-digit ABA routing number. Must pass the ABA checksum.
      required:
        - subMerchantId
        - accountType
        - accountHolderName
        - accountNumber
        - routingNumber
  examples:
    bankAccountTokenizeRaw:
      summary: Example request
      value:
        subMerchantId: jpt-sim-md-1
        accountType: checking
        accountHolderName: John Doe
        accountNumber: '12312311'
        routingNumber: '122187238'
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic

````

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