Skip to content

Chart of Accounts ​

Part of the Accounts API. Base URL https://your-domain.com/admin/api/v1 — replace the host with your own installation and the token placeholder with a real Bearer token (see Authentication).

List accounts ​

GET /admin/api/v1/accounts/accounts

Retrieve a paginated list of accounts with filtering and sorting

🔒 Requires a valid Bearer token.

Query parameters

ParameterTypeRequiredDescriptionExample
includestringNoComma-separated list of relationships to include. Available options: currency, creator, taxes, tags, journals, moveLines, companiescurrency
filter[id]stringNoComma-separated list of IDs to filter by
filter[name]stringNoFilter by account name (partial match)
filter[code]stringNoFilter by account code (partial match)
filter[account_type]stringNoFilter by account type
filter[currency_id]integerNoFilter by currency ID
filter[deprecated]booleanNoFilter by deprecated status
filter[reconcile]booleanNoFilter by reconcile flag
sortstringYesSort fieldcode
pageintegerYesPage number1
bash
curl -X GET "https://your-domain.com/admin/api/v1/accounts/accounts?include=currency&sort=code&page=1" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/accounts?include=currency&sort=code&page=1", {
  method: "GET",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://your-domain.com/admin/api/v1/accounts/accounts?include=currency&sort=code&page=1', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/accounts?include=currency&sort=code&page=1"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

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

data = response.json()
print(data)

Example response 200

json
{
  "data": [
    {
      "id": 1,
      "account_type": "asset_current",
      "name": "Current Assets",
      "code": "101000",
      "note": null,
      "deprecated": false,
      "reconcile": false,
      "non_trade": false,
      "currency_id": 20,
      "creator_id": 1,
      "created_at": "2026-10-09T09:50:40.000000Z",
      "updated_at": "2026-10-09T09:50:40.000000Z"
    },
    {
      "id": 1,
      "account_type": "asset_current",
      "name": "Current Assets",
      "code": "101000",
      "note": null,
      "deprecated": false,
      "reconcile": false,
      "non_trade": false,
      "currency_id": 20,
      "creator_id": 1,
      "created_at": "2026-10-09T09:50:40.000000Z",
      "updated_at": "2026-10-09T09:50:40.000000Z"
    }
  ],
  "links": {
    "first": "/?page=1",
    "last": "/?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "links": [
      {
        "url": null,
        "label": "&laquo; Previous",
        "page": null,
        "active": false
      },
      {
        "url": "/?page=1",
        "label": "1",
        "page": 1,
        "active": true
      },
      {
        "url": null,
        "label": "Next &raquo;",
        "page": null,
        "active": false
      }
    ],
    "path": "/",
    "per_page": 10,
    "to": 2,
    "total": 2
  }
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Create account ​

POST /admin/api/v1/accounts/accounts

Create a new account

🔒 Requires a valid Bearer token.

Body parameters

ParameterTypeRequiredDescription
namestringYesAccount name. Must not be greater than 255 characters.
codestringYesAccount code. Must not be greater than 64 characters.
account_typestringYesAccount type.
currency_idintegerNoCurrency ID. Must match an existing stored value.
notestringNoAccount notes.
deprecatedbooleanNoMark account as deprecated.
reconcilebooleanNoEnable reconciliation.
non_tradebooleanNoNon-trade account flag.
bash
curl -X POST "https://your-domain.com/admin/api/v1/accounts/accounts" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Cash and Bank",
  "code": "1000",
  "account_type": "asset_receivable",
  "currency_id": 1,
  "note": "Primary cash account",
  "deprecated": false,
  "reconcile": true,
  "non_trade": false
}'
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/accounts", {
  method: "POST",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "name": "Cash and Bank",
  "code": "1000",
  "account_type": "asset_receivable",
  "currency_id": 1,
  "note": "Primary cash account",
  "deprecated": false,
  "reconcile": true,
  "non_trade": false
}),
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://your-domain.com/admin/api/v1/accounts/accounts', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
    'json' => [
    'name' => 'Cash and Bank',
    'code' => '1000',
    'account_type' => 'asset_receivable',
    'currency_id' => 1,
    'note' => 'Primary cash account',
    'deprecated' => false,
    'reconcile' => true,
    'non_trade' => false,
  ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/accounts"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

payload = {
    "name": "Cash and Bank",
    "code": "1000",
    "account_type": "asset_receivable",
    "currency_id": 1,
    "note": "Primary cash account",
    "deprecated": False,
    "reconcile": True,
    "non_trade": False,
}

response = requests.post(url, headers=headers, json=payload)

data = response.json()
print(data)

Example response 201

json
{
  "data": {
    "id": 1,
    "account_type": "asset_current",
    "name": "Current Assets",
    "code": "101000",
    "note": null,
    "deprecated": false,
    "reconcile": false,
    "non_trade": false,
    "currency_id": 20,
    "creator_id": 1,
    "created_at": "2026-10-09T09:50:40.000000Z",
    "updated_at": "2026-10-09T09:50:40.000000Z"
  },
  "message": "Account created successfully."
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Show account ​

GET /admin/api/v1/accounts/accounts/{id}

Retrieve a specific account by its ID

🔒 Requires a valid Bearer token.

Path parameters

ParameterTypeRequiredDescription
idintegerYesThe account ID

Query parameters

ParameterTypeRequiredDescriptionExample
includestringNoComma-separated list of relationships to include. Available options: currency, creator, taxes, tags, journals, moveLines, companiescurrency,taxes
bash
curl -X GET "https://your-domain.com/admin/api/v1/accounts/accounts/{id}?include=currency%2Ctaxes" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/accounts/{id}?include=currency%2Ctaxes", {
  method: "GET",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://your-domain.com/admin/api/v1/accounts/accounts/{id}?include=currency%2Ctaxes', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/accounts/{id}?include=currency%2Ctaxes"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

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

data = response.json()
print(data)

Example response 200

json
{
  "data": {
    "id": 1,
    "account_type": "asset_current",
    "name": "Current Assets",
    "code": "101000",
    "note": null,
    "deprecated": false,
    "reconcile": false,
    "non_trade": false,
    "currency_id": 20,
    "creator_id": 1,
    "created_at": "2026-10-09T09:50:40.000000Z",
    "updated_at": "2026-10-09T09:50:40.000000Z"
  }
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Update account ​

PUT /admin/api/v1/accounts/accounts/{id}

Update an existing account

🔒 Requires a valid Bearer token.

Path parameters

ParameterTypeRequiredDescription
idintegerYesThe account ID

Body parameters

ParameterTypeRequiredDescription
namestringNoAccount name. Must not be greater than 255 characters.
codestringNoAccount code. Must not be greater than 64 characters.
account_typestringNoAccount type.
currency_idintegerNoCurrency ID. Must match an existing stored value.
notestringNoAccount notes.
deprecatedbooleanNoMark account as deprecated.
reconcilebooleanNoEnable reconciliation.
non_tradebooleanNoNon-trade account flag.
bash
curl -X PUT "https://your-domain.com/admin/api/v1/accounts/accounts/{id}" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Cash and Bank",
  "code": "1000",
  "account_type": "asset_receivable",
  "currency_id": 1,
  "note": "Primary cash account",
  "deprecated": false,
  "reconcile": true,
  "non_trade": false
}'
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/accounts/{id}", {
  method: "PUT",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "name": "Cash and Bank",
  "code": "1000",
  "account_type": "asset_receivable",
  "currency_id": 1,
  "note": "Primary cash account",
  "deprecated": false,
  "reconcile": true,
  "non_trade": false
}),
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('PUT', 'https://your-domain.com/admin/api/v1/accounts/accounts/{id}', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
    'json' => [
    'name' => 'Cash and Bank',
    'code' => '1000',
    'account_type' => 'asset_receivable',
    'currency_id' => 1,
    'note' => 'Primary cash account',
    'deprecated' => false,
    'reconcile' => true,
    'non_trade' => false,
  ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/accounts/{id}"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

payload = {
    "name": "Cash and Bank",
    "code": "1000",
    "account_type": "asset_receivable",
    "currency_id": 1,
    "note": "Primary cash account",
    "deprecated": False,
    "reconcile": True,
    "non_trade": False,
}

response = requests.put(url, headers=headers, json=payload)

data = response.json()
print(data)

Example response 200

json
{
  "data": {
    "id": 1,
    "account_type": "asset_current",
    "name": "Current Assets",
    "code": "101000",
    "note": null,
    "deprecated": false,
    "reconcile": false,
    "non_trade": false,
    "currency_id": 20,
    "creator_id": 1,
    "created_at": "2026-10-09T09:50:40.000000Z",
    "updated_at": "2026-10-09T09:50:40.000000Z"
  },
  "message": "Account updated successfully."
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Delete account ​

DELETE /admin/api/v1/accounts/accounts/{id}

Delete an account

🔒 Requires a valid Bearer token.

Path parameters

ParameterTypeRequiredDescription
idintegerYesThe account ID
bash
curl -X DELETE "https://your-domain.com/admin/api/v1/accounts/accounts/{id}" \
  -H "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"
javascript
const response = await fetch("https://your-domain.com/admin/api/v1/accounts/accounts/{id}", {
  method: "DELETE",
  headers: {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
  },
});

const data = await response.json();
console.log(data);
php
<?php

$client = new \GuzzleHttp\Client();

$response = $client->request('DELETE', 'https://your-domain.com/admin/api/v1/accounts/accounts/{id}', [
    'headers' => [
        'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
        'Accept' => 'application/json',
        'Content-Type' => 'application/json',
    ],
]);

$data = json_decode($response->getBody(), true);
python
import requests

url = "https://your-domain.com/admin/api/v1/accounts/accounts/{id}"

headers = {
    "Authorization": "Bearer {YOUR_AUTH_TOKEN}",
    "Accept": "application/json",
    "Content-Type": "application/json",
}

response = requests.delete(url, headers=headers)

data = response.json()
print(data)

Example response 200

json
{
  "message": "Account deleted successfully."
}
Error response — 401
json
{
  "message": "Unauthenticated."
}

Released under the MIT License.