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

# Release held funds

> Send part of a merchant's held balance to the bank account on file.

Name what to release in **one** of two ways:

- `amount` — a dollar figure, when you keep your own record of what has
  cleared.
- `transaction_info_ids` — the payments to pay out (see *List releasable
  transactions*). Each must be releasable; the amount is their total, and
  each can only ever be released once. **All or nothing:** if any one does
  not qualify, nothing is released and `data.ineligible` says which and why.

Always pass a fresh `idempotency_key` per intended release, and reuse it
when retrying. A retry with the same key and the same request returns the
original release instead of sending the money again — which matters,
because a release that timed out may still have gone through. The same key
with a different amount or different transactions is refused with 409.

Check the returned `status`, not only the HTTP code:

- `released` (201) — sent.
- `failed` (422) — declined; nothing moved. `failure_reason` says why.
- `unknown` (202) — no confirmation came back. It may have gone through.
  Its amount is held back from `releasable` until it is reconciled, so
  retrying with a **new** key cannot send it twice; retrying with the
  **same** key returns this same record.

The amount — given or totalled — is checked against a freshly calculated
`releasable` (see *Get held balance*), not against any figure you read
earlier, and is never reduced to fit.

Only one release per merchant is processed at a time; a second request
while one is in flight receives 409 and should retry.



## OpenAPI

````yaml https://app.dimepayments.com/openapi.yaml post /api/funds/release
openapi: 3.0.3
info:
  title: Dime Payments API Documentation
  description: >-
    A simple, basic API for managing Merchants through Dime Payments. JSON based
    REST API
  version: 1.0.0
servers:
  - url: https://app.dimepayments.com
security:
  - default: []
tags:
  - name: Merchant management
    description: ''
  - name: Transaction management
    description: >-

      APIs for managing transactions.  Depending on API KEY permissions, one
      should be able to

      charge credit cards, ACH, Google/Apple Pay wallets along with other
      functions.
  - name: Chargeback management
    description: ''
  - name: Document management
    description: ''
  - name: Addresses
    description: |-

      APIs for managing customer addresses
  - name: Customer management
    description: >-

      APIs for managing customers.  Depending on API KEY permissions, one should
      be able to

      list, create, update, and delete customers along with several other
      customer specific requests.
  - name: Deposit management
    description: ''
  - name: Held funds
    description: ''
  - name: Invoice management
    description: >-

      APIs for managing invoices. Depending on API KEY permissions, one should
      be

      able to list, create, update, delete, and send invoices, manage their line

      items, and manage recurring-invoice schedules. Every request is scoped to
      a

      single Merchant via the required `data.sid`.
  - name: Payment Method management
    description: >-

      APIs for managing payment methods associated with customers.  Depending on
      API KEY permissions, one should be able to

      list, show, create, update, and delete payment methods.
  - name: Recurring Payments management
    description: >-

      APIs for managing recurring payments.  Depending on API KEY permissions,
      one should be able to

      create, edit, pause, cancel along with other functions.
  - name: Subscription Plans management
    description: >-

      Merchant-facing API for subscription plans (recurring offerings customers

      subscribe to). The merchant is identified by `data.sid`; the token must
      carry

      the matching `subscription-plan:*` ability. Mirrors the recurring-payment
      and

      invoice API controllers.
  - name: Subscriptions management
    description: >-

      Merchant-facing API for individual customer subscriptions (enrollments in
      a

      plan). The merchant is identified by `data.sid`; the token must carry the

      matching `subscription:*` ability. Lifecycle transitions delegate to the

      {@see \App\Actions\Subscription} action classes so the matching
      `SUBSCRIPTION_*`

      webhook always fires. Mirrors the recurring-payment and subscription-plan
      API

      controllers.
  - name: Zapier
    description: >-

      APIs for use through Zapier.  Depending on API KEY permissions, one should
      be able to

      see customers and transactions data.
paths:
  /api/funds/release:
    post:
      tags:
        - Held funds
      summary: Release held funds
      description: >-
        Send part of a merchant's held balance to the bank account on file.


        Name what to release in **one** of two ways:


        - `amount` — a dollar figure, when you keep your own record of what has
          cleared.
        - `transaction_info_ids` — the payments to pay out (see *List releasable
          transactions*). Each must be releasable; the amount is their total, and
          each can only ever be released once. **All or nothing:** if any one does
          not qualify, nothing is released and `data.ineligible` says which and why.

        Always pass a fresh `idempotency_key` per intended release, and reuse it

        when retrying. A retry with the same key and the same request returns
        the

        original release instead of sending the money again — which matters,

        because a release that timed out may still have gone through. The same
        key

        with a different amount or different transactions is refused with 409.


        Check the returned `status`, not only the HTTP code:


        - `released` (201) — sent.

        - `failed` (422) — declined; nothing moved. `failure_reason` says why.

        - `unknown` (202) — no confirmation came back. It may have gone through.
          Its amount is held back from `releasable` until it is reconciled, so
          retrying with a **new** key cannot send it twice; retrying with the
          **same** key returns this same record.

        The amount — given or totalled — is checked against a freshly calculated

        `releasable` (see *Get held balance*), not against any figure you read

        earlier, and is never reduced to fit.


        Only one release per merchant is processed at a time; a second request

        while one is in flight receives 409 and should retry.
      operationId: releaseHeldFunds
      parameters: []
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  type: object
                  description: ''
                  example: []
                  properties:
                    sid:
                      type: string
                      description: The ID of the merchant.
                      example: '91828382'
                    amount:
                      type: number
                      description: >-
                        Dollars to release, at most two decimal places. Required
                        unless `transaction_info_ids` is given.
                      example: 1500
                    transaction_info_ids:
                      type: array
                      description: >-
                        The payments to release, up to 100. Required unless
                        `amount` is given.
                      example:
                        - '1297431'
                        - '1297455'
                      items:
                        type: string
                    idempotency_key:
                      type: string
                      description: >-
                        Your unique reference for this release, up to 100
                        characters.
                      example: payout-2026-09-25-0001
                  required:
                    - sid
                    - idempotency_key
      responses:
        '201':
          description: Released
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    sid: '91828382'
                    replayed: false
                    release:
                      id: 42
                      amount: 1500
                      fee: 30
                      status: released
                      status_label: Released
                      idempotency_key: payout-2026-09-25-0001
                      failure_reason: null
                      requested_at: '2026-09-25T14:02:11+00:00'
                      completed_at: '2026-09-25T14:02:12+00:00'
                properties:
                  data:
                    type: object
                    properties:
                      sid:
                        type: string
                        example: '91828382'
                      replayed:
                        type: boolean
                        example: false
                        description: >-
                          True when this key was used before and the original
                          release is being returned.
                      release:
                        type: object
                        properties:
                          id:
                            type: integer
                            example: 42
                            description: Our reference for the release.
                          amount:
                            type: integer
                            example: 1500
                            description: Dollars
                          fee:
                            type: integer
                            example: 30
                            description: >-
                              What the transfer cost, in dollars, as quoted when
                              it was sent.
                          status:
                            type: string
                            example: released
                            description: '`released`, `failed` or `unknown`.'
                          status_label:
                            type: string
                            example: Released
                          idempotency_key:
                            type: string
                            example: payout-2026-09-25-0001
                          failure_reason:
                            type: string
                            example: null
                            description: >-
                              Why it failed, or why it is unconfirmed. Null when
                              released.
                          requested_at:
                            type: string
                            example: '2026-09-25T14:02:11+00:00'
                          completed_at:
                            type: string
                            example: '2026-09-25T14:02:12+00:00'
        '401':
          description: Incorrect API Key Permission
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    message: Permission Denied.
                properties:
                  data:
                    type: object
                    properties:
                      message:
                        type: string
                        example: Permission Denied.
        '404':
          description: Unknown merchant
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    message: No such Merchant
                properties:
                  data:
                    type: object
                    properties:
                      message:
                        type: string
                        example: No such Merchant
        '409':
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  - description: Key reused for a different amount
                    type: object
                    example:
                      data:
                        message: >-
                          This idempotency key was already used for a release of
                          $1,500.00. Use a new key for a different amount.
                    properties:
                      data:
                        type: object
                        properties:
                          message:
                            type: string
                            example: >-
                              This idempotency key was already used for a
                              release of $1,500.00. Use a new key for a
                              different amount.
                  - description: Release already in progress
                    type: object
                    example:
                      data:
                        message: >-
                          Another release for this merchant is in progress. Try
                          again in a moment.
                    properties:
                      data:
                        type: object
                        properties:
                          message:
                            type: string
                            example: >-
                              Another release for this merchant is in progress.
                              Try again in a moment.
        '422':
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  - description: A transaction does not qualify
                    type: object
                    example:
                      data:
                        message: >-
                          One of those transactions cannot be released. Nothing
                          was released.
                        ineligible:
                          - transaction_info_id: '1297455'
                            reason: >-
                              ACH payments are held for 7 days in case the bank
                              returns them. This one is releasable from
                              2026-10-02.
                    properties:
                      data:
                        type: object
                        properties:
                          message:
                            type: string
                            example: >-
                              One of those transactions cannot be released.
                              Nothing was released.
                          ineligible:
                            type: array
                            example:
                              - transaction_info_id: '1297455'
                                reason: >-
                                  ACH payments are held for 7 days in case the
                                  bank returns them. This one is releasable from
                                  2026-10-02.
                            items:
                              type: object
                              properties:
                                transaction_info_id:
                                  type: string
                                  example: '1297455'
                                reason:
                                  type: string
                                  example: >-
                                    ACH payments are held for 7 days in case the
                                    bank returns them. This one is releasable
                                    from 2026-10-02.
                  - description: More than is releasable
                    type: object
                    example:
                      data:
                        message: >-
                          That is more than is releasable. Up to $5,172.72 can
                          be released right now.
                        releasable: 5172.72
                    properties:
                      data:
                        type: object
                        properties:
                          message:
                            type: string
                            example: >-
                              That is more than is releasable. Up to $5,172.72
                              can be released right now.
                          releasable:
                            type: number
                            example: 5172.72
        '503':
          description: Processor unreachable
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    message: >-
                      The processor could not be reached. Nothing was released;
                      try again shortly.
                properties:
                  data:
                    type: object
                    properties:
                      message:
                        type: string
                        example: >-
                          The processor could not be reached. Nothing was
                          released; try again shortly.
components:
  securitySchemes:
    default:
      type: http
      scheme: bearer
      description: >-
        You can retrieve your token by visiting your dashboard and clicking
        <b>Generate API token under your profile in top right</b>.

````

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