curl --request GET \
--url https://api.bachs.io/v1/transfers/{transfer_id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.bachs.io/v1/transfers/{transfer_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.bachs.io/v1/transfers/{transfer_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.bachs.io/v1/transfers/{transfer_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"id": "tr_8c1e04a7b93f2d6540ab",
"source": "acct_7KpQ2mNv4XbR9dLc",
"destination": "acct_3Wq8ZfT1yHnJ5sVe",
"amount": "7000.00",
"currency": "NGN",
"status": "paid",
"description": "Order #4471 seller share",
"metadata": {},
"transfer_group": "ch_9f4c1d2e7b6a4f8e9c0d1a2b3c4d5e6f",
"kind": "manual",
"source_charge_id": null,
"created_at": "2026-08-07T11:04:22.518Z"
}{
"detail": "Invalid API key",
"error_code": "UNAUTHORIZED"
}{
"detail": "API key does not have permission for this operation",
"error_code": "FORBIDDEN"
}{
"detail": "Resource not found",
"error_code": "NOT_FOUND"
}Get a transfer
Retrieve a single transfer your platform was a party to. A transfer between two accounts you do not own returns 404 rather than 403, so the response never confirms that an unrelated id exists.
curl --request GET \
--url https://api.bachs.io/v1/transfers/{transfer_id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.bachs.io/v1/transfers/{transfer_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.bachs.io/v1/transfers/{transfer_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.bachs.io/v1/transfers/{transfer_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"id": "tr_8c1e04a7b93f2d6540ab",
"source": "acct_7KpQ2mNv4XbR9dLc",
"destination": "acct_3Wq8ZfT1yHnJ5sVe",
"amount": "7000.00",
"currency": "NGN",
"status": "paid",
"description": "Order #4471 seller share",
"metadata": {},
"transfer_group": "ch_9f4c1d2e7b6a4f8e9c0d1a2b3c4d5e6f",
"kind": "manual",
"source_charge_id": null,
"created_at": "2026-08-07T11:04:22.518Z"
}{
"detail": "Invalid API key",
"error_code": "UNAUTHORIZED"
}{
"detail": "API key does not have permission for this operation",
"error_code": "FORBIDDEN"
}{
"detail": "Resource not found",
"error_code": "NOT_FOUND"
}Authorizations
Bearer token authentication. Pass your API key as Authorization: Bearer sk_.... See Authentication for keys, scopes, and sandbox vs production.
Path Parameters
The transfer's ID.
Response
The transfer.
Unique identifier for this transfer.
"tr_8c1e04a7b93f2d6540ab"
Whoever was debited. Your platform when sending a share to an account you own, the account when recovering one.
"acct_7KpQ2mNv4XbR9dLc"
Whoever was credited.
"acct_3Wq8ZfT1yHnJ5sVe"
The amount moved, as a decimal string in currency.
"7000.00"
Three-letter ISO 4217 currency code the transfer moved.
"NGN"
Whether the funds have moved. paid: the balances have been updated. pending: the transfer exists but its movement has not been recorded yet. Derived from the underlying movement, so it never disagrees with the balances.
pending, paid "paid"
The description you supplied on creation.
"Order #4471 seller share"
The metadata you supplied on creation, returned unchanged.
The group you supplied on creation, or null when the transfer was not tagged.
"ch_9f4c1d2e7b6a4f8e9c0d1a2b3c4d5e6f"
What this movement is. payout is a seller's share of a sale you made, and manual is a transfer you created yourself. The platform's own cut of a sale is never a transfer; read it at Platform fees.
payout, manual "manual"
The charge that funded this movement, when one did. Null on a transfer you created yourself, which is tied to nothing.
null
When the transfer was created, ISO 8601 in UTC.
"2026-08-07T11:04:22.518Z"

