Skip to main content
Skip to Content

Expenses API

Expenses track costs incurred on behalf of clients—software subscriptions, travel, materials, and more. Expenses can be marked up and added to invoices.

The Expense Object

{
  "id": "exp_cuid123456",
  "client_id": "cli_xxxxx",
  "project_id": "prj_xxxxx",
  "user_id": "usr_xxxxx",
  "date": "2026-01-20",
  "description": "Adobe Creative Cloud - January",
  "category": "software",
  "vendor": "Adobe",
  "amount": 54.99,
  "currency": "USD",
  "billing": {
    "billable": true,
    "billed": false,
    "markup_percent": 15,
    "billable_amount": 63.24,
    "invoice_line_id": null
  },
  "receipt": {
    "url": "https://storage.govantage.co/receipts/...",
    "filename": "adobe-jan-2026.pdf"
  },
  "approval": {
    "status": "approved",
    "approved_by_id": "usr_yyyyy",
    "approved_at": "2026-01-21T10:00:00Z"
  },
  "notes": "Monthly subscription for design team",
  "created_at": "2026-01-20T14:30:00Z",
  "updated_at": "2026-01-21T10:00:00Z"
}

Expense Fields

FieldTypeDescription
idstringUnique identifier (prefix: exp_)
client_idstringAssociated client
project_idstringAssociated project
user_idstringWho submitted the expense
datedateRequired. Expense date
descriptionstringRequired. What the expense is for
categorystringExpense category
vendorstringVendor name
amountdecimalRequired. Expense amount
currencystringCurrency code (default: workspace currency)
billingobjectBilling configuration
receiptobjectAttached receipt
approvalobjectApproval status
notesstringInternal notes
created_atdatetimeWhen created
updated_atdatetimeWhen last updated

Expense Categories

CategoryDescription
softwareSoftware and subscriptions
hostingHosting and infrastructure
travelTravel expenses
mealsMeals and entertainment
suppliesOffice supplies
equipmentEquipment purchases
contractorContractor/freelancer fees
advertisingAdvertising spend
otherOther expenses

Approval Status

StatusDescription
pendingAwaiting approval
approvedApproved for billing
rejectedRejected

List Expenses

GET/v1/expensesList all expenses

Query Parameters

ParameterTypeDefaultDescription
pageinteger1Page number
per_pageinteger50Results per page (max: 100)
client_idstringFilter by client
project_idstringFilter by project
user_idstringFilter by submitter
categorystringFilter by category
fromdateExpense date from
todateExpense date to
billablebooleanFilter by billable status
billedbooleanFilter by billed status
approval_statusstringpending, approved, rejected

Request

curl "https://api.govantage.co/v1/expenses?client_id=cli_xxxxx&billable=true&billed=false" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx"

Response

{
  "data": [
    {
      "id": "exp_cuid123456",
      "client_id": "cli_xxxxx",
      "client_name": "Acme Corporation",
      "project_id": "prj_xxxxx",
      "project_title": "Website Redesign",
      "date": "2026-01-20",
      "description": "Adobe Creative Cloud - January",
      "category": "software",
      "amount": 54.99,
      "billing": {
        "billable": true,
        "billed": false,
        "billable_amount": 63.24
      },
      "approval": {
        "status": "approved"
      }
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 50,
    "total": 23
  },
  "summary": {
    "total_amount": 1250.00,
    "billable_amount": 1437.50,
    "pending_approval": 3
  }
}

Create an Expense

POST/v1/expensesCreate a new expense

Request Body

FieldTypeRequiredDescription
datedateYesExpense date
descriptionstringYesExpense description
amountdecimalYesAmount
client_idstringNoClient ID
project_idstringNoProject ID
categorystringNoCategory
vendorstringNoVendor name
billablebooleanNoIs billable (default: true)
markup_percentdecimalNoMarkup percentage
notesstringNoInternal notes
receipt_urlstringNoURL to receipt file

Request

curl -X POST "https://api.govantage.co/v1/expenses" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "date": "2026-01-20",
    "description": "Adobe Creative Cloud - January",
    "amount": 54.99,
    "client_id": "cli_xxxxx",
    "project_id": "prj_xxxxx",
    "category": "software",
    "vendor": "Adobe",
    "billable": true,
    "markup_percent": 15
  }'

Upload Receipt

POST/v1/expenses/:id/receiptUpload a receipt
curl -X POST "https://api.govantage.co/v1/expenses/exp_cuid123456/receipt" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx" \
  -F "file=@receipt.pdf"

Response

{
  "data": {
    "id": "exp_cuid123456",
    "receipt": {
      "url": "https://storage.govantage.co/receipts/...",
      "filename": "receipt.pdf",
      "uploaded_at": "2026-01-25T10:30:00Z"
    }
  }
}

Approve Expense

POST/v1/expenses/:id/approveApprove an expense
curl -X POST "https://api.govantage.co/v1/expenses/exp_cuid123456/approve" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx"

Reject Expense

POST/v1/expenses/:id/rejectReject an expense
curl -X POST "https://api.govantage.co/v1/expenses/exp_cuid123456/reject" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "reason": "Missing receipt - please resubmit with documentation"
  }'

Mark as Billed

POST/v1/expenses/mark-billedMark expenses as billed

Used when creating invoices outside Vantage.

curl -X POST "https://api.govantage.co/v1/expenses/mark-billed" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "expense_ids": ["exp_xxxxx", "exp_yyyyy"],
    "invoice_reference": "External Invoice #1234"
  }'

Expense Report

GET/v1/expenses/reportGet expense summary report
curl "https://api.govantage.co/v1/expenses/report?from=2026-01-01&to=2026-01-31&group_by=category" \
  -H "Authorization: Bearer vnt_sk_live_xxxxx"

Response

{
  "data": {
    "period": {
      "from": "2026-01-01",
      "to": "2026-01-31"
    },
    "totals": {
      "count": 45,
      "amount": 5250.00,
      "billable_amount": 6037.50,
      "markup_amount": 787.50
    },
    "by_category": [
      { "category": "software", "count": 12, "amount": 650.00 },
      { "category": "hosting", "count": 8, "amount": 2400.00 },
      { "category": "travel", "count": 5, "amount": 1200.00 }
    ]
  }
}

Webhooks

EventDescription
expense.createdExpense submitted
expense.approvedExpense approved
expense.rejectedExpense rejected
expense.billedExpense added to invoice

Next Steps