curl -X POST "https://api.contazen.ro/v1/expense-categories" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Marketing Expenses",
"parent_id": 0,
"is_visible": true
}'
curl -X POST "https://api.contazen.ro/v1/expense-categories" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Digital Advertising",
"parent_id": 5,
"is_visible": true
}'
const categoryData = {
name: "Marketing Expenses",
parent_id: 0,
is_visible: true
};
const response = await fetch('https://api.contazen.ro/v1/expense-categories', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify(categoryData)
});
const data = await response.json();
console.log('Created category:', data.category);
const subcategoryData = {
name: "Digital Advertising",
parent_id: 5, // ID of existing parent category
is_visible: true
};
const response = await fetch('https://api.contazen.ro/v1/expense-categories', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify(subcategoryData)
});
const data = await response.json();
console.log('Created subcategory:', data.category);
$categoryData = [
'name' => 'Marketing Expenses',
'parent_id' => 0,
'is_visible' => true
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.contazen.ro/v1/expense-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($categoryData),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$data = json_decode($response, true);
curl_close($curl);
echo 'Created category ID: ' . $data['category']['id'];
$subcategoryData = [
'name' => 'Digital Advertising',
'parent_id' => 5, // ID of existing parent category
'is_visible' => true
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.contazen.ro/v1/expense-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($subcategoryData),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$data = json_decode($response, true);
curl_close($curl);
echo 'Created subcategory: ' . $data['category']['name'];
{
"success": true,
"category": {
"id": 25,
"name": "Marketing Expenses",
"parent_id": 0,
"is_default": false,
"is_visible": true,
"type": "custom"
},
"message": "Category created successfully"
}
{
"success": false,
"error": {
"message": "Name is required",
"type": "invalid_request_error",
"code": "parameter_missing",
"param": "name"
}
}
{
"success": false,
"error": {
"message": "Parent category not found",
"type": "invalid_request_error",
"code": "invalid_parent",
"param": "parent_id"
}
}
{
"success": false,
"error": {
"message": "Cannot create subcategory under another subcategory",
"type": "invalid_request_error",
"code": "invalid_parent_level",
"param": "parent_id"
}
}
{
"success": false,
"error": {
"message": "You don't have permission to create categories",
"type": "invalid_request_error",
"code": "permission_denied"
}
}
Expense Categories
Create Expense Category
Create a new custom expense category for your firm
POST
/
expense-categories
curl -X POST "https://api.contazen.ro/v1/expense-categories" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Marketing Expenses",
"parent_id": 0,
"is_visible": true
}'
curl -X POST "https://api.contazen.ro/v1/expense-categories" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Digital Advertising",
"parent_id": 5,
"is_visible": true
}'
const categoryData = {
name: "Marketing Expenses",
parent_id: 0,
is_visible: true
};
const response = await fetch('https://api.contazen.ro/v1/expense-categories', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify(categoryData)
});
const data = await response.json();
console.log('Created category:', data.category);
const subcategoryData = {
name: "Digital Advertising",
parent_id: 5, // ID of existing parent category
is_visible: true
};
const response = await fetch('https://api.contazen.ro/v1/expense-categories', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify(subcategoryData)
});
const data = await response.json();
console.log('Created subcategory:', data.category);
$categoryData = [
'name' => 'Marketing Expenses',
'parent_id' => 0,
'is_visible' => true
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.contazen.ro/v1/expense-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($categoryData),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$data = json_decode($response, true);
curl_close($curl);
echo 'Created category ID: ' . $data['category']['id'];
$subcategoryData = [
'name' => 'Digital Advertising',
'parent_id' => 5, // ID of existing parent category
'is_visible' => true
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.contazen.ro/v1/expense-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($subcategoryData),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$data = json_decode($response, true);
curl_close($curl);
echo 'Created subcategory: ' . $data['category']['name'];
{
"success": true,
"category": {
"id": 25,
"name": "Marketing Expenses",
"parent_id": 0,
"is_default": false,
"is_visible": true,
"type": "custom"
},
"message": "Category created successfully"
}
{
"success": false,
"error": {
"message": "Name is required",
"type": "invalid_request_error",
"code": "parameter_missing",
"param": "name"
}
}
{
"success": false,
"error": {
"message": "Parent category not found",
"type": "invalid_request_error",
"code": "invalid_parent",
"param": "parent_id"
}
}
{
"success": false,
"error": {
"message": "Cannot create subcategory under another subcategory",
"type": "invalid_request_error",
"code": "invalid_parent_level",
"param": "parent_id"
}
}
{
"success": false,
"error": {
"message": "You don't have permission to create categories",
"type": "invalid_request_error",
"code": "permission_denied"
}
}
Overview
The Create Expense Category endpoint allows you to create new custom expense categories for your firm. You can create both root-level categories and subcategories under existing parent categories. Note: You can only create custom categories - system default categories are pre-defined and cannot be created via the API.Request Body
string
required
The name of the expense category (must be unique within your firm)
integer
default:"0"
Parent category ID. Use
0 for root-level categories, or specify an existing category ID to create a subcategory.boolean
default:"true"
Whether the category should be visible and available for use when creating expenses.
Hierarchy Rules
- Maximum Depth: Categories can only be 2 levels deep (category → subcategory)
- Parent Validation: Parent categories must exist and belong to your firm
- Subcategory Limitation: You cannot create subcategories under existing subcategories
- Circular Reference: A category cannot be its own parent
Response
object
The created expense category object
string
Success message confirming the category creation
Validation Rules
- Name: Required, must be non-empty after trimming
- Parent Category: Must exist and belong to your firm (if specified)
- Hierarchy: Cannot create subcategories under existing subcategories
- Permissions: Requires write permissions for your firm
curl -X POST "https://api.contazen.ro/v1/expense-categories" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Marketing Expenses",
"parent_id": 0,
"is_visible": true
}'
curl -X POST "https://api.contazen.ro/v1/expense-categories" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Digital Advertising",
"parent_id": 5,
"is_visible": true
}'
const categoryData = {
name: "Marketing Expenses",
parent_id: 0,
is_visible: true
};
const response = await fetch('https://api.contazen.ro/v1/expense-categories', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify(categoryData)
});
const data = await response.json();
console.log('Created category:', data.category);
const subcategoryData = {
name: "Digital Advertising",
parent_id: 5, // ID of existing parent category
is_visible: true
};
const response = await fetch('https://api.contazen.ro/v1/expense-categories', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify(subcategoryData)
});
const data = await response.json();
console.log('Created subcategory:', data.category);
$categoryData = [
'name' => 'Marketing Expenses',
'parent_id' => 0,
'is_visible' => true
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.contazen.ro/v1/expense-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($categoryData),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$data = json_decode($response, true);
curl_close($curl);
echo 'Created category ID: ' . $data['category']['id'];
$subcategoryData = [
'name' => 'Digital Advertising',
'parent_id' => 5, // ID of existing parent category
'is_visible' => true
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.contazen.ro/v1/expense-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($subcategoryData),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer YOUR_API_KEY',
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$data = json_decode($response, true);
curl_close($curl);
echo 'Created subcategory: ' . $data['category']['name'];
{
"success": true,
"category": {
"id": 25,
"name": "Marketing Expenses",
"parent_id": 0,
"is_default": false,
"is_visible": true,
"type": "custom"
},
"message": "Category created successfully"
}
{
"success": false,
"error": {
"message": "Name is required",
"type": "invalid_request_error",
"code": "parameter_missing",
"param": "name"
}
}
{
"success": false,
"error": {
"message": "Parent category not found",
"type": "invalid_request_error",
"code": "invalid_parent",
"param": "parent_id"
}
}
{
"success": false,
"error": {
"message": "Cannot create subcategory under another subcategory",
"type": "invalid_request_error",
"code": "invalid_parent_level",
"param": "parent_id"
}
}
{
"success": false,
"error": {
"message": "You don't have permission to create categories",
"type": "invalid_request_error",
"code": "permission_denied"
}
}
Authorizations
Use your API key (sk_live_xxx or sk_test_xxx)
Body
application/json
Was this page helpful?