curl --request POST \
--url https://staging-api.usetyms.com/v1/adam/create/expense \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"date": "2026-03-03",
"currency": "NGN",
"document_number": "EXP-220",
"narration": "Team lunch — client meeting",
"customer": "c9b8a7d6e5f4438290a1b2c3d4e5f6c0",
"payment_category": "Main Operating Account",
"items": [
{
"item_name": "Meals and entertainment",
"quantity": 1,
"selling_price": 18500,
"category": "Meals & Entertainment"
}
]
}
'import requests
url = "https://staging-api.usetyms.com/v1/adam/create/expense"
payload = {
"date": "2026-03-03",
"currency": "NGN",
"document_number": "EXP-220",
"narration": "Team lunch — client meeting",
"customer": "c9b8a7d6e5f4438290a1b2c3d4e5f6c0",
"payment_category": "Main Operating Account",
"items": [
{
"item_name": "Meals and entertainment",
"quantity": 1,
"selling_price": 18500,
"category": "Meals & Entertainment"
}
]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
date: '2026-03-03',
currency: 'NGN',
document_number: 'EXP-220',
narration: 'Team lunch — client meeting',
customer: 'c9b8a7d6e5f4438290a1b2c3d4e5f6c0',
payment_category: 'Main Operating Account',
items: [
{
item_name: 'Meals and entertainment',
quantity: 1,
selling_price: 18500,
category: 'Meals & Entertainment'
}
]
})
};
fetch('https://staging-api.usetyms.com/v1/adam/create/expense', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"status": "success",
"message": "Expenses imported successfully",
"data": [
{
"uuid": "a0b1c2d3e4f5428290a1b2c3d4e5f6b1",
"transaction_type": "expenses",
"status": "paid"
}
]
}{
"status": "failed",
"message": "<string>"
}Create expense
curl --request POST \
--url https://staging-api.usetyms.com/v1/adam/create/expense \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"date": "2026-03-03",
"currency": "NGN",
"document_number": "EXP-220",
"narration": "Team lunch — client meeting",
"customer": "c9b8a7d6e5f4438290a1b2c3d4e5f6c0",
"payment_category": "Main Operating Account",
"items": [
{
"item_name": "Meals and entertainment",
"quantity": 1,
"selling_price": 18500,
"category": "Meals & Entertainment"
}
]
}
'import requests
url = "https://staging-api.usetyms.com/v1/adam/create/expense"
payload = {
"date": "2026-03-03",
"currency": "NGN",
"document_number": "EXP-220",
"narration": "Team lunch — client meeting",
"customer": "c9b8a7d6e5f4438290a1b2c3d4e5f6c0",
"payment_category": "Main Operating Account",
"items": [
{
"item_name": "Meals and entertainment",
"quantity": 1,
"selling_price": 18500,
"category": "Meals & Entertainment"
}
]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
date: '2026-03-03',
currency: 'NGN',
document_number: 'EXP-220',
narration: 'Team lunch — client meeting',
customer: 'c9b8a7d6e5f4438290a1b2c3d4e5f6c0',
payment_category: 'Main Operating Account',
items: [
{
item_name: 'Meals and entertainment',
quantity: 1,
selling_price: 18500,
category: 'Meals & Entertainment'
}
]
})
};
fetch('https://staging-api.usetyms.com/v1/adam/create/expense', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"status": "success",
"message": "Expenses imported successfully",
"data": [
{
"uuid": "a0b1c2d3e4f5428290a1b2c3d4e5f6b1",
"transaction_type": "expenses",
"status": "paid"
}
]
}{
"status": "failed",
"message": "<string>"
}Authorizations
Business secret tyms_sk_... for business-scoped routes. Partner secret for register-business and referred-business distributor routes.
Body
Expense date.
1Hide child attributes
Hide child attributes
Line label. Alias: name.
Quantity sold or purchased.
Unit price. On bills this is unit cost. Alias: price.
Required. Revenue, expense, or inventory account — name, uuid, or account code.
Optional line description.
Tax rate as a percentage (e.g. 7.5 = 7.5%). Preferred over tax_uuid.
Optional tax record uuid instead of tax percentage.
Withholding tax (WHT) rate as a percentage.
Optional WHT uuid instead of withholding_tax percentage.
Line discount value.
percent or amount / fixed.
percent, amount, fixed true if the line affects stock.
Existing inventory item uuid when linking stock.
Cash or bank name paid from. Payment is assumed in full from the line totals — do not send amount_paid (that key is only for invoices and bills).
Alias: bill_no.
Set true (or 1) to create a prepaid_expenses record instead of a regular expense. The expense amount is deferred and recognized monthly over prepayment_duration.
Number of months to recognize the prepaid expense over. Required when is_prepayment is true.
Asset account name for the prepaid balance. Defaults to the business prepaid expenses account.
Response
Expense created