Create Transfer
curl --request POST \
--url https://api.beachdepository.com/v1/transfers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fromFboAccountId": "<string>",
"toFboAccountId": "<string>",
"notes": "<string>",
"approve": true,
"items": [
{}
]
}
'import requests
url = "https://api.beachdepository.com/v1/transfers"
payload = {
"fromFboAccountId": "<string>",
"toFboAccountId": "<string>",
"notes": "<string>",
"approve": True,
"items": [{}]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
fromFboAccountId: '<string>',
toFboAccountId: '<string>',
notes: '<string>',
approve: true,
items: [{}]
})
};
fetch('https://api.beachdepository.com/v1/transfers', 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.beachdepository.com/v1/transfers",
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([
'fromFboAccountId' => '<string>',
'toFboAccountId' => '<string>',
'notes' => '<string>',
'approve' => true,
'items' => [
[
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.beachdepository.com/v1/transfers"
payload := strings.NewReader("{\n \"fromFboAccountId\": \"<string>\",\n \"toFboAccountId\": \"<string>\",\n \"notes\": \"<string>\",\n \"approve\": true,\n \"items\": [\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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.beachdepository.com/v1/transfers")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fromFboAccountId\": \"<string>\",\n \"toFboAccountId\": \"<string>\",\n \"notes\": \"<string>\",\n \"approve\": true,\n \"items\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.beachdepository.com/v1/transfers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fromFboAccountId\": \"<string>\",\n \"toFboAccountId\": \"<string>\",\n \"notes\": \"<string>\",\n \"approve\": true,\n \"items\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_bodyTransfers
Create Transfer
Create a transfer between FBO accounts
POST
/
transfers
Create Transfer
curl --request POST \
--url https://api.beachdepository.com/v1/transfers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fromFboAccountId": "<string>",
"toFboAccountId": "<string>",
"notes": "<string>",
"approve": true,
"items": [
{}
]
}
'import requests
url = "https://api.beachdepository.com/v1/transfers"
payload = {
"fromFboAccountId": "<string>",
"toFboAccountId": "<string>",
"notes": "<string>",
"approve": True,
"items": [{}]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
fromFboAccountId: '<string>',
toFboAccountId: '<string>',
notes: '<string>',
approve: true,
items: [{}]
})
};
fetch('https://api.beachdepository.com/v1/transfers', 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.beachdepository.com/v1/transfers",
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([
'fromFboAccountId' => '<string>',
'toFboAccountId' => '<string>',
'notes' => '<string>',
'approve' => true,
'items' => [
[
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.beachdepository.com/v1/transfers"
payload := strings.NewReader("{\n \"fromFboAccountId\": \"<string>\",\n \"toFboAccountId\": \"<string>\",\n \"notes\": \"<string>\",\n \"approve\": true,\n \"items\": [\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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.beachdepository.com/v1/transfers")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fromFboAccountId\": \"<string>\",\n \"toFboAccountId\": \"<string>\",\n \"notes\": \"<string>\",\n \"approve\": true,\n \"items\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.beachdepository.com/v1/transfers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fromFboAccountId\": \"<string>\",\n \"toFboAccountId\": \"<string>\",\n \"notes\": \"<string>\",\n \"approve\": true,\n \"items\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_bodyCreates a transfer of one or more inventory items from one FBO account to another within the organization. Every item must currently belong to the source FBO account and be in an
With
in_vault status. The transfer is created with a pending status unless approve is true, which skips review and creates it as approved.
Permission: transfer_batches:create
Request body
string
required
ID of the FBO account the items are transferred from.
string
required
ID of the FBO account the items are transferred to. Must differ from
fromFboAccountId.string
Optional free-text note describing the transfer.
boolean
When
true, the transfer is created already approved (approvedBySystem: true) instead of
waiting for review. The items are handed to the vault for completion; custody moves to the
destination account once the transfer is completed. Omit or set false for the default pending
workflow.array
required
The inventory items to transfer — at least one. Each entry contains:
inventoryItemId(string, required) — ID of the inventory item to transfer.reason(string, required) — Why the item is being transferred. One ofrequest,trade,rebalance.
inventoryItemId values must be unique within the request.Response
Returns the created transfer batch.{
"data": {
"id": "jx7transfer789",
"fromFboAccountId": "m97fbo456",
"toFboAccountId": "m97fbo789",
"organizationId": "k57orgxyz",
"status": "pending",
"totalItems": 2,
"approvedBySystem": false,
"notes": "Quarterly rebalance",
"createdAt": "2025-06-15T09:00:00Z"
}
}
"approve": true, the same payload returns status: "approved" with approvedBySystem: true, and the transfer.status_changed webhook fires with toStatus: "approved" (it does not go through pending). Watch for transfer.completed to know when custody has moved.