---
title: "Create a new expense"
method: POST
path: "/expenses"
tags: ["Expenses"]
---

# Create a new expense

`POST /expenses`

## Request body

- ExpenseInput
  - `amount` number, required — Monetary value in EUR
  - `title` string, required
  - `payerAccount` string, required
  - `beneficiaryAccount` string, required
  - `beneficiaryAddress` string, required
  - `scheduledAt` string, date-time, required

## Response `201`

Expense created successfully

- Expense
  - `id` string, required
  - `amount` number, required — Monetary value in EUR
  - `title` string, required
  - `payerAccount` string, required
  - `beneficiaryAccount` string, required
  - `beneficiaryAddress` string, required
  - `scheduledAt` string, date-time, required

## Other responses

- `400` — Invalid expense input request body @see {@link ExpenseInput}
- `409` — Expense with this ID already exists
- `422` — Invalid account numbers or scheduling date in the past
- `500` — An internal server error occurred.
- `503` — The service is temporarily unavailable. Maybe there is maintenance?

## Changes

- **2025-01-17** `4573748c6338` — 5 info
  - added the optional property `errorGUID` to the response with the `400` status
  - added the optional property `errorGUID` to the response with the `409` status
  - added the optional property `errorGUID` to the response with the `422` status
  - added the optional property `errorGUID` to the response with the `500` status
  - …1 more
- **2025-01-09** `a59b7402c514` — 3 breaking, 2 info
  - the response property `code` became optional for the status `400`
  - the response property `code` became optional for the status `500`
  - the response property `code` became optional for the status `503`
  - added the non-success response with the status `409`
  - …1 more
- **2025-01-09** `29074eeb2bb5` — 3 info
  - added the media type `application/json` for the response with the status `400`
  - added the non-success response with the status `500`
  - added the non-success response with the status `503`
- **2025-01-07** `659ddbe31a58` — 1 breaking, 4 info
  - removed the media type `application/json` for the response with the status `400`
  - removed the non-success response with the status `409`
  - removed the non-success response with the status `422`
  - removed the non-success response with the status `500`
  - …1 more

[Change history](https://skmtc.dev/ducin-public/apis/itcorpo-api/changes/expenses/post.md)

---

[API](https://skmtc.dev/ducin-public/apis/itcorpo-api.md) · [All operations](https://skmtc.dev/ducin-public/apis/itcorpo-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/ducin-public/itcorpo-api/revisions/80675117301b/schema)
