Test route: creates a billable expense (amount, description, an optional date that defaults to today and an optional expense category) directly on a Smokeball matter by its Smokeball id, through the firm's primary connection, and returns the created entry in activity. Requires an org admin or owner; returns 403 while the Smokeball integration is turned off.
POST
/legal/smokeball/matters/{matterId}/billing/expense
curl \
--request POST 'http://api.example.com/legal/smokeball/matters/{matterId}/billing/expense' \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--header "organization: string" \
--data '{
"amount": 49,
"description": "Hearsay: phone extraction upload",
"date": "2026-05-29",
"expenseCategoryId": "string"
}'
Request examples
# Headers
organization: string
# Payload
{
"amount": 49,
"description": "Hearsay: phone extraction upload",
"date": "2026-05-29",
"expenseCategoryId": "string"
}
Response examples (201)
{
"data": {
"activity": {
"id": "445566",
"matterId": "12345",
"date": "2026-01-15T10:15:00.000Z",
"description": "Hearsay: phone extraction upload",
"type": "expense",
"rate": 49,
"total": 49,
"staffId": "string"
}
},
"statusCode": 201,
"timestamp": "2026-01-15T10:15:00.000Z"
}