Create external account
curl --request POST \
--url https://api.getlemma.com/v0/external-accounts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"entity_id": "<string>",
"nickname": "<string>",
"holder_type": "<string>",
"routing_number": "<string>",
"account_number": "<string>",
"holder_name": "<string>",
"holder_address": {
"line1": "<string>",
"line2": "<string>",
"city": "<string>",
"state": "<string>",
"postal_code": "<string>",
"country": "<string>"
}
}
'import requests
url = "https://api.getlemma.com/v0/external-accounts"
payload = {
"entity_id": "<string>",
"nickname": "<string>",
"holder_type": "<string>",
"routing_number": "<string>",
"account_number": "<string>",
"holder_name": "<string>",
"holder_address": {
"line1": "<string>",
"line2": "<string>",
"city": "<string>",
"state": "<string>",
"postal_code": "<string>",
"country": "<string>"
}
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
entity_id: '<string>',
nickname: '<string>',
holder_type: '<string>',
routing_number: '<string>',
account_number: '<string>',
holder_name: '<string>',
holder_address: {
line1: '<string>',
line2: '<string>',
city: '<string>',
state: '<string>',
postal_code: '<string>',
country: '<string>'
}
})
};
fetch('https://api.getlemma.com/v0/external-accounts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.getlemma.com/v0/external-accounts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'entity_id' => '<string>',
'nickname' => '<string>',
'holder_type' => '<string>',
'routing_number' => '<string>',
'account_number' => '<string>',
'holder_name' => '<string>',
'holder_address' => [
'line1' => '<string>',
'line2' => '<string>',
'city' => '<string>',
'state' => '<string>',
'postal_code' => '<string>',
'country' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.getlemma.com/v0/external-accounts"
payload := strings.NewReader("{\n \"entity_id\": \"<string>\",\n \"nickname\": \"<string>\",\n \"holder_type\": \"<string>\",\n \"routing_number\": \"<string>\",\n \"account_number\": \"<string>\",\n \"holder_name\": \"<string>\",\n \"holder_address\": {\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.getlemma.com/v0/external-accounts")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"entity_id\": \"<string>\",\n \"nickname\": \"<string>\",\n \"holder_type\": \"<string>\",\n \"routing_number\": \"<string>\",\n \"account_number\": \"<string>\",\n \"holder_name\": \"<string>\",\n \"holder_address\": {\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getlemma.com/v0/external-accounts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"entity_id\": \"<string>\",\n \"nickname\": \"<string>\",\n \"holder_type\": \"<string>\",\n \"routing_number\": \"<string>\",\n \"account_number\": \"<string>\",\n \"holder_name\": \"<string>\",\n \"holder_address\": {\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "external_account_Bx5nTm8hKw3pVd7c",
"entity_id": "entity_k7mXp2vR9nTfBw4s",
"nickname": "Quest Diagnostics Operating Account",
"routing_number": "021000021",
"account_number": "123456789",
"status": "active",
"created_at": "2026-03-20T18:45:00Z"
}
{
"error": "holder_address.line1 is required"
}
External accounts
Create external account
Save an external bank account as a recipient for outbound transfers.
POST
/
v0
/
external-accounts
Create external account
curl --request POST \
--url https://api.getlemma.com/v0/external-accounts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"entity_id": "<string>",
"nickname": "<string>",
"holder_type": "<string>",
"routing_number": "<string>",
"account_number": "<string>",
"holder_name": "<string>",
"holder_address": {
"line1": "<string>",
"line2": "<string>",
"city": "<string>",
"state": "<string>",
"postal_code": "<string>",
"country": "<string>"
}
}
'import requests
url = "https://api.getlemma.com/v0/external-accounts"
payload = {
"entity_id": "<string>",
"nickname": "<string>",
"holder_type": "<string>",
"routing_number": "<string>",
"account_number": "<string>",
"holder_name": "<string>",
"holder_address": {
"line1": "<string>",
"line2": "<string>",
"city": "<string>",
"state": "<string>",
"postal_code": "<string>",
"country": "<string>"
}
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
entity_id: '<string>',
nickname: '<string>',
holder_type: '<string>',
routing_number: '<string>',
account_number: '<string>',
holder_name: '<string>',
holder_address: {
line1: '<string>',
line2: '<string>',
city: '<string>',
state: '<string>',
postal_code: '<string>',
country: '<string>'
}
})
};
fetch('https://api.getlemma.com/v0/external-accounts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.getlemma.com/v0/external-accounts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'entity_id' => '<string>',
'nickname' => '<string>',
'holder_type' => '<string>',
'routing_number' => '<string>',
'account_number' => '<string>',
'holder_name' => '<string>',
'holder_address' => [
'line1' => '<string>',
'line2' => '<string>',
'city' => '<string>',
'state' => '<string>',
'postal_code' => '<string>',
'country' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.getlemma.com/v0/external-accounts"
payload := strings.NewReader("{\n \"entity_id\": \"<string>\",\n \"nickname\": \"<string>\",\n \"holder_type\": \"<string>\",\n \"routing_number\": \"<string>\",\n \"account_number\": \"<string>\",\n \"holder_name\": \"<string>\",\n \"holder_address\": {\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.getlemma.com/v0/external-accounts")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"entity_id\": \"<string>\",\n \"nickname\": \"<string>\",\n \"holder_type\": \"<string>\",\n \"routing_number\": \"<string>\",\n \"account_number\": \"<string>\",\n \"holder_name\": \"<string>\",\n \"holder_address\": {\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getlemma.com/v0/external-accounts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"entity_id\": \"<string>\",\n \"nickname\": \"<string>\",\n \"holder_type\": \"<string>\",\n \"routing_number\": \"<string>\",\n \"account_number\": \"<string>\",\n \"holder_name\": \"<string>\",\n \"holder_address\": {\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "external_account_Bx5nTm8hKw3pVd7c",
"entity_id": "entity_k7mXp2vR9nTfBw4s",
"nickname": "Quest Diagnostics Operating Account",
"routing_number": "021000021",
"account_number": "123456789",
"status": "active",
"created_at": "2026-03-20T18:45:00Z"
}
{
"error": "holder_address.line1 is required"
}
Creates a saved external account that can be used as a destination for transfers. External accounts represent bank accounts outside of Lemma, such as a vendor, payroll provider, or another financial institution.
External accounts cannot be edited after creation. If you need to change account details, archive the existing external account and create a new one. See Saved recipients for more on why.
The
nickname is visible to the account owner on their Lemma dashboard.
Choose something descriptive and recognizable (e.g., “Owner’s Personal
Account” rather than “Acct 4821”). We recommend making nicknames unique within
a provider.Headers
string
required
A key that prevents creating a duplicate external account if the same request
is retried. Reusing a key returns the originally created account instead of
saving a second one. See Idempotency.
Request body
string
required
The ID of the entity this recipient belongs to.
string
required
A human-readable label for this recipient. Displayed on the Lemma dashboard
and in transaction history.
string
required
Whether the account holder is a business or an individual. One of
business
or individual.string
required
The 9-digit ABA routing number of the recipient’s bank.
string
required
The bank account number. Digits only.
string
required
The legal name of the account holder.
object
required
Response
Returns the created external account object.string
Unique identifier for the external account, prefixed with
external_account_.string
The ID of the entity that owns this external account.
string
The human-readable label for this external account.
string
business or individual.string
The routing number of the account holder’s bank.
string
The external account’s account number.
string
The external account’s status. Always
active on creation.{
"id": "external_account_Bx5nTm8hKw3pVd7c",
"entity_id": "entity_k7mXp2vR9nTfBw4s",
"nickname": "Quest Diagnostics Operating Account",
"routing_number": "021000021",
"account_number": "123456789",
"status": "active",
"created_at": "2026-03-20T18:45:00Z"
}
{
"error": "holder_address.line1 is required"
}
⌘I