> This page is for API, version 2026-01-01 (Stable) (default).
> For other versions, use one of these documentation indexes:
> - 2026-01-01 (Stable) (default): https://developer.deel.com/api/stable/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.deel.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.deel.com/_mcp/server.

# List child organization bank accounts

GET https://api.letsdeel.com/rest/organizations/children/{child_id}/payment-methods

List the active bank accounts of one of your child organizations, oldest first, with masked details and the status of each. Use it to show the customer what is on file and whether verification is still pending. Pages are cursor based: pass next_cursor from one response as cursor to get the next page.

 **Token scopes**: `organizations:read`

 **Beta**: this version requires the `X-Beta: true` request header and its contract may change before it is promoted to stable. It is scheduled to become stable on 2027-02-12.

Reference: https://developer.deel.com/api/reference/endpoints/organizations/list-child-organization-payment-methods-v-2026-11-12

## Authentication

- `Authorization` header (bearer token, required) — ## Authentication The Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail. ```curl curl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \ -H 'Authorization: Bearer YOUR-TOKEN-HERE' ``` [Learn more about authentication](/api/authentication)
- `Authorization` header (bearer token, required) — Standard OAuth2 security scheme based on https://swagger.io/docs/specification/authentication/

## Servers

- `https://api.letsdeel.com/rest` (Production, default)
- `https://api-staging.letsdeel.com/rest` (Demo)

## Request

### Path parameters

- `child_id` (string, required) — Public id of the child organization, as returned in the id field of the create child organization response. It must be a direct child organization of the authenticated organization; any other id answers 403, an unknown id 404.

### Query parameters

- `limit` (integer, optional, default: 20) — Maximum number of bank accounts to return per page.
- `cursor` (string, optional) — The next_cursor of the previous page. Omit it for the first page.

### Headers

- `X-Beta` (enum, required, default: true) — Opts in to the beta version of this endpoint. Must be `true`.
  - Allowed values: `true`

## Response

### 200

The active bank accounts of the child organization. An empty list when it has none.

- `data` (list of OrganizationsChildrenChildIdPaymentMethodsGetResponsesContentApplicationJsonSchemaDataItems, required) — One page of the active bank accounts of the child organization, oldest first. Removed accounts are not listed.
- `has_more` (boolean, required) — Whether another page follows.
- `next_cursor` (string, required, nullable) — Value to send as cursor for the next page. Null on the last page.
- `total_count` (integer, required) — Number of active bank accounts of the child organization.

## Errors

### 400 Bad Request Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

### 401 Unauthorized Error

Unauthorized. The request token is missing or invalid.

- `errors` (list of OrganizationsChildrenChildIdPaymentMethodsGetResponsesContentApplicationJsonSchemaErrorsItems, required)

### 403 Forbidden Error

Forbidden. The child organization is not a direct child of the caller, the feature is not enabled for the caller, or the token carries no person.

- `errors` (list of OrganizationsChildrenChildIdPaymentMethodsGetResponsesContentApplicationJsonSchemaErrorsItems, required)

### 404 Not Found Error

Not found. No organization has the given child_id.

- `errors` (list of OrganizationsChildrenChildIdPaymentMethodsGetResponsesContentApplicationJsonSchemaErrorsItems, required)

### 500 Internal Server Error

An unexpected error occurred. The same request can be retried.

- `errors` (list of OrganizationsChildrenChildIdPaymentMethodsGetResponsesContentApplicationJsonSchemaErrorsItems, required)

## Types

### OrganizationsChildrenChildIdPaymentMethodsGetResponsesContentApplicationJsonSchemaDataItems

The bank account as stored by Deel. The full account and routing numbers are never returned.

- `id` (integer, required) — Id of the payment method. Use it in the verify, update and remove calls.
- `type` (enum, required) — Payment rail of the method. Only ACH in this version.
  - Allowed values: `ACH`
- `last4` (string, required) — Last four digits of the account number.
- `status` (enum, required) — PENDING_VERIFICATION until the two micro-deposit amounts are confirmed; VERIFIED once they are; ON_HOLD when the account is verified but the child organization has not completed its own verification yet; VERIFICATION_FAILED after three wrong attempts (it stays so while Deel reviews a bank statement, and becomes VERIFIED on approval); REMOVED after deletion.
  - Allowed values: `PENDING_VERIFICATION`, `VERIFIED`, `ON_HOLD`, `VERIFICATION_FAILED`, `REMOVED`
- `created_at` (string, required) — When the method was added.
- `is_default` (boolean, required) — Whether Deel debits this account for the child organization’s invoices.
- `account_type` (enum, required) — Checking or savings.
  - Allowed values: `CHECKING`, `SAVINGS`
- `is_deletable` (boolean, required) — Whether a remove call would succeed right now.
- `attempts_remaining` (integer, required) — Micro-deposit confirmation attempts left before the method needs a bank statement.
- `account_holder_name` (string, required) — Name on the bank account, as submitted.
- `verification_method` (enum, required) — How the account is verified. Only micro-deposits in this version.
  - Allowed values: `MICRO_DEPOSITS`
- `bank_name` (string, optional, nullable) — Name of the bank. Not available in this version; always null.
- `status_reason` (enum, optional, nullable) — Why the method is on hold, when it is. Null otherwise.
  - Allowed values: `NO_US_LEGAL_ENTITY`, `ORGANIZATION_NOT_VERIFIED`, `ACH_DISABLED`
- `not_deletable_reason` (enum, optional, nullable) — Why the method cannot be deleted, when it cannot. Null otherwise.
  - Allowed values: `USED_IN_AUTOMATIC_PAYMENT`, `USED_AS_BACKUP`

### ApiErrorRequest

- `method` (string, optional) — The HTTP method of the failed request
- `url` (string, optional) — The relative URL of the failed request
- `status` (double, optional) — The status code of the response
- `api_req_id` (string, optional) — The request ID of the failed request
- `docs` (string, optional) — A link to the official documentation for the requested endpoint resource
- `source` (string, optional) — The source handler which produced the returned error
- `code` (double, optional) — The code of the source handler which produced the returned error

### ApiError

- `message` (string, optional) — A description of the returned error
- `path` (string, optional) — The JSON path where input validation failed

### OrganizationsChildrenChildIdPaymentMethodsGetResponsesContentApplicationJsonSchemaErrorsItems

- `code` (enum, required) — Machine-readable error code.
  - Allowed values: `GENERIC_ERROR`
- `message` (string, required) — Human-readable explanation of the error.
- `details` (OrganizationsChildrenChildIdPaymentMethodsGetResponsesContentApplicationJsonSchemaErrorsItemsDetails, optional) — Extra context for the code, when any: the ineligibility, rate-limit or not-deletable reason.

### OrganizationsChildrenChildIdPaymentMethodsGetResponsesContentApplicationJsonSchemaErrorsItemsDetails

Extra context for the code, when any: the ineligibility, rate-limit or not-deletable reason.

- `reason` (string, optional) — Why the request was refused, for the NOT_ELIGIBLE, INVALID_BANK_ACCOUNT, RATE_LIMITED and NOT_DELETABLE codes.
- `attempts_remaining` (string, optional) — Micro-deposit attempts left, for the INVALID_AMOUNTS code.

## Examples

**Response**

```json
{
  "data": [
    {
      "id": 635390,
      "type": "ACH",
      "last4": "2227",
      "status": "VERIFIED",
      "created_at": "2026-10-16T04:49:58Z",
      "is_default": true,
      "account_type": "CHECKING",
      "is_deletable": false,
      "attempts_remaining": 1,
      "account_holder_name": "Acme Inc",
      "verification_method": "MICRO_DEPOSITS",
      "bank_name": null,
      "status_reason": null,
      "not_deletable_reason": "USED_IN_AUTOMATIC_PAYMENT"
    }
  ],
  "has_more": false,
  "next_cursor": "string",
  "total_count": 1
}
```

**SDK Code**

```python
import requests

url = "https://api.letsdeel.com/rest/organizations/children/8f1d2e3a-4b5f-4a2c-9c4e-1c0e6f1c4a52/payment-methods"

querystring = {"cursor":"635390","limit":"20"}

headers = {
    "X-Beta": "true",
    "Authorization": "Bearer <token>"
}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

```javascript
const url = 'https://api.letsdeel.com/rest/organizations/children/8f1d2e3a-4b5f-4a2c-9c4e-1c0e6f1c4a52/payment-methods?cursor=635390&limit=20';
const options = {method: 'GET', headers: {'X-Beta': 'true', Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.letsdeel.com/rest/organizations/children/8f1d2e3a-4b5f-4a2c-9c4e-1c0e6f1c4a52/payment-methods?cursor=635390&limit=20"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("X-Beta", "true")
	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.letsdeel.com/rest/organizations/children/8f1d2e3a-4b5f-4a2c-9c4e-1c0e6f1c4a52/payment-methods?cursor=635390&limit=20")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["X-Beta"] = 'true'
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.letsdeel.com/rest/organizations/children/8f1d2e3a-4b5f-4a2c-9c4e-1c0e6f1c4a52/payment-methods?cursor=635390&limit=20")
  .header("X-Beta", "true")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.letsdeel.com/rest/organizations/children/8f1d2e3a-4b5f-4a2c-9c4e-1c0e6f1c4a52/payment-methods?cursor=635390&limit=20', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'X-Beta' => 'true',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.letsdeel.com/rest/organizations/children/8f1d2e3a-4b5f-4a2c-9c4e-1c0e6f1c4a52/payment-methods?cursor=635390&limit=20");
var request = new RestRequest(Method.GET);
request.AddHeader("X-Beta", "true");
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "X-Beta": "true",
  "Authorization": "Bearer <token>"
]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.letsdeel.com/rest/organizations/children/8f1d2e3a-4b5f-4a2c-9c4e-1c0e6f1c4a52/payment-methods?cursor=635390&limit=20")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```