Point your AI at the books.
Luca exposes a clean, token-scoped REST API, the same surface Enston's own automations run on. Give your agent a token and it reads accounts, pulls tax codes, and builds balanced imports.
We didn't bolt on an API. We built Luca to be run by AI.
The LUCA External API v1 is a clean, token-scoped REST surface: one call, four languages, live example responses in the sandbox. Point your agent at it and it reads and writes the books.
# Find customers by name
curl "https://api.luca.pro/api/v1/customers?search=Acme" \
-H "Authorization: Bearer $LUCA_TOKEN"// Node 18+, native fetch
const res = await fetch(
"https://api.luca.pro/api/v1/customers?search=Acme",
{ headers: { Authorization: `Bearer ${LUCA_TOKEN}` } },
);
const customers = await res.json();# pip install requests
import requests
res = requests.get(
"https://api.luca.pro/api/v1/customers",
params={"search": "Acme"},
headers={"Authorization": f"Bearer {LUCA_TOKEN}"},
)
customers = res.json()// PHP 8, ext-curl
$ch = curl_init("https://api.luca.pro/api/v1/customers?search=Acme");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer $lucaToken",
]);
$customers = json_decode(curl_exec($ch), true);[
{
"id": 1042,
"name": "Acme Pte. Ltd.",
"email": "ap@acme.com"
},
{
"id": 1043,
"name": "Acme Labs LLP",
"email": "billing@acmelabs.co"
}
]Authentication
Authorization: Bearer <token>- Create a token in Settings → API Tokens inside Luca.
- Each token is bound to one company and inherits that user's permissions.
Base URLs
https://api.luca.prohttps://developer.luca.pro/api/v1Returns documented example responses: no real data, no side effects; accepts any bearer token.
- GET
/api/v1/customers?search= - GET
/api/v1/accounts - GET
/api/v1/tax-codes
Journal-entry import
LiveThe proof that Luca is built to be run by AI: your assistant pulls the valid account and tax codes from the API first, then generates a balanced spreadsheet Luca ingests cleanly.
Fetch valid accounts and tax codes
from the Luca API with my token, then
build a balanced journal-entry .xlsx
for these transactions: 9 columns,
one entry per date, debits = credits.- 1Your assistant calls
GET /api/v1/accountsandGET /api/v1/tax-codeswith your token to pull the valid codes. - 2It builds a Luca-ready
.xlsx: the 9 columns below, with every dated entry balanced. - 3Upload via Bulk Import → Journal Entry. Luca validates on upload and writes cell comments explaining any errors.
| Journal Date | Account Code | Account Name | Debit | Credit | Tax | Currency | Narration | Description |
|---|---|---|---|---|---|---|---|---|
| 2026-07-01 | 6100 | Office Rent | 2,000.00 | - | SR | SGD | July rent | HQ lease |
| 2026-07-01 | 1100 | Bank | - | 2,000.00 | - | SGD | July rent | HQ lease |
Illustrative: one balanced entry (S$2,000.00 rent), two rows sharing a date.
- Rows sharing a date = one entry; debits must equal credits
- Up to 500 rows per file
- Control accounts (A/R, A/P, retained earnings) rejected
- Journal reference auto-generates
MCP server
In developmentConnect Luca to Claude and other AI assistants over the Model Context Protocol, no glue code. Coming soon; not yet shipped.
Luca is being built so your agent can run the books.