curl --request GET \
--url https://api.bachs.io/v1/accounts/{account_id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.bachs.io/v1/accounts/{account_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.bachs.io/v1/accounts/{account_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/accounts/{account_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": "acct_3Wq8ZfT1yHnJ5sVe",
"name": "Ada Stores",
"owner_user_id": "usr_5e0b74c8a213",
"parent_organization_id": "acct_7KpQ2mNv4XbR9dLc",
"country": "NG",
"fee_handling": "account_pays_fee",
"enabled_payment_methods": null,
"adaptive_pricing": true,
"balance_currencies": [
"NGN"
],
"phone_number": null,
"company_name": null,
"enabled_capabilities": [
"payouts"
],
"capabilities": {
"payouts": {
"status": "active",
"requested": true,
"status_details": null
},
"transfers": {
"status": "restricted",
"requested": true,
"status_details": [
{
"code": "platform_disabled",
"resolution": "Contact support to re-enable this capability.",
"message": "This capability was disabled by the platform."
}
]
}
},
"requirements": {
"currently_due": [
"business_profile.social_media"
],
"eventually_due": [],
"past_due": [],
"pending_verification": [
"company.documents.registration"
],
"errors": [
{
"field": "company.documents.memart",
"code": "unreadable",
"reason": "The document image was too blurry to read."
}
]
},
"is_active": true,
"created_at": "2026-08-01T09:12:44.000Z",
"updated_at": "2026-08-07T11:04:22.518Z",
"responsibilities": {
"fees": {
"collector": "bachs"
}
},
"configuration": {
"recipient": {}
}
}{
"detail": "Invalid API key",
"error_code": "UNAUTHORIZED"
}{
"detail": "Resource not found",
"error_code": "NOT_FOUND"
}Get an account
Read an account: your own, or one you own. A platform account and an account you own are the same object, differing only by whether they have a parent, so one path serves both. capabilities and requirements always come back; include=requirements.values adds what has been submitted.
curl --request GET \
--url https://api.bachs.io/v1/accounts/{account_id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.bachs.io/v1/accounts/{account_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.bachs.io/v1/accounts/{account_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/accounts/{account_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": "acct_3Wq8ZfT1yHnJ5sVe",
"name": "Ada Stores",
"owner_user_id": "usr_5e0b74c8a213",
"parent_organization_id": "acct_7KpQ2mNv4XbR9dLc",
"country": "NG",
"fee_handling": "account_pays_fee",
"enabled_payment_methods": null,
"adaptive_pricing": true,
"balance_currencies": [
"NGN"
],
"phone_number": null,
"company_name": null,
"enabled_capabilities": [
"payouts"
],
"capabilities": {
"payouts": {
"status": "active",
"requested": true,
"status_details": null
},
"transfers": {
"status": "restricted",
"requested": true,
"status_details": [
{
"code": "platform_disabled",
"resolution": "Contact support to re-enable this capability.",
"message": "This capability was disabled by the platform."
}
]
}
},
"requirements": {
"currently_due": [
"business_profile.social_media"
],
"eventually_due": [],
"past_due": [],
"pending_verification": [
"company.documents.registration"
],
"errors": [
{
"field": "company.documents.memart",
"code": "unreadable",
"reason": "The document image was too blurry to read."
}
]
},
"is_active": true,
"created_at": "2026-08-01T09:12:44.000Z",
"updated_at": "2026-08-07T11:04:22.518Z",
"responsibilities": {
"fees": {
"collector": "bachs"
}
},
"configuration": {
"recipient": {}
}
}{
"detail": "Invalid API key",
"error_code": "UNAUTHORIZED"
}{
"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 account to act on. It must be one of your own accounts; any other ID returns 404 so the response never confirms that an unrelated account exists.
Query Parameters
Expandable blocks to add. requirements.values returns the account's current field values and the per-person rollup, which cost an extra resource load. Comma-separated or repeated; an unknown value returns 400 invalid_include. Anything not asked for is omitted from the response rather than returned as null.
requirements.values Response
The account.
Unique identifier for the account.
"acct_7KpQ2mNv4XbR9dLc"
The account's display name.
"Ada Stores"
The user that owns the account. For an account you own this is a service user Bachs created; you never authenticate as it.
"usr_7b3e19d24c0a"
The platform this account is connected to, or null when it is a platform in its own right.
"acct_7KpQ2mNv4XbR9dLc"
Two-letter ISO 3166-1 country code. Decides which requirements the account is given.
"NG"
What kind of legal person the account is, which together with country decides the requirements it is given. company: a registered entity, asked for registration and ownership details. individual: a natural person, asked only for their own identity.
company, individual "company"
Who absorbs processing fees at checkout. account_pays_fee: deducted from the amount you receive. customer_pays_fee: added to what the customer pays.
account_pays_fee, customer_pays_fee "account_pays_fee"
One entry per exact corridor (USD_CARD, NGN_CARD, NGN_BANK_TRANSFER, MOMO_GHS to MOMO_ZMW, CRYPTO). See payment method support. Each value has an enabled boolean; CRYPTO additionally carries a currencies map since it covers several asset/network pairs.
When true, customers are shown prices in their local currency where one is available.
true
Currencies this account is configured to hold a balance in.
["NGN", "USD"]
Contact phone number, including country code.
"+2348012345678"
Registered company name, when the account is a company.
"Ada Stores Limited"
Names of the capabilities currently active on this account. A convenience view of capabilities.
["transfers", "payouts"]
Each capability's status, keyed by capability name. Populated on single-account reads only; null on list items.
Show child attributes
Show child attributes
Outstanding requirements for this account. Populated on single-account reads only; null on list items.
Show child attributes
Show child attributes
When false, the account is deactivated and cannot authenticate or move funds.
true
When the account was created, ISO 8601 in UTC.
"2026-08-01T09:12:44.000Z"
When the account was last updated, ISO 8601 in UTC.
"2026-08-07T11:04:22.518Z"
Fee arrangement for an account you own. null when this object is not an account you own.
Show child attributes
Show child attributes
Personas applied to this account, keyed by name (merchant, recipient), each with an empty object as its value. Populated on single-account reads, where it is {} when none apply; null on list items.
Show child attributes
Show child attributes
{ "merchant": {}, "recipient": {} }

