Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/visma-expensereceipt-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Visma.net ERP Expense Receipt API
version: v1
servers:
- url: https://api.finance.visma.net
tags:
- name: ExpenseReceipt
paths:
/v1/expenseReceipt/{receiptNumber}:
get:
tags:
- ExpenseReceipt
summary: Get a specific ExpenseReceipt
description: 'Data for a single expense receipt
The response headers include an ETag after a successful GET operation.'
operationId: ExpenseReceipt_GetByreceiptNumber
parameters:
- name: receiptNumber
in: path
description: Identifies the ExpenseReceipt
required: true
schema:
type: string
- name: erp-api-background
in: header
description: 'Accepts the request and queues it to be executed in the background by our least busy worker. Responds with 202 Accepted and a document containing a JobId reference and details state location.
Supported values:
* a URL: when the background operation is finished, a notification will be posted to the URL with a document containing a reference id, status code and a details state location.
* "none" (without quotes): Fire and forget; no notification will be sent when background operation is finished.
* "subscription[:<name_1>=<value_1>,..,<name_n>=<value_n>]" (without quotes): when the background operation is finsihed, a notification is posted to the Webhook subscription set up in Developer Portal for your integration client.
Optionally a set of name-value pairs can be added. These will be sent as headers in the POST request to the Webhook subscription''s url.
To find status and details of a background-api operation, GET .. v1/background/{id}. To get the response payload of a background-api operation, if any, GET .. v1/background/{id}/content'
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ExpenseReceiptDto'
text/json:
schema:
$ref: '#/components/schemas/ExpenseReceiptDto'
'202':
description: Server accepted and queued the request for background execution.
content:
application/json:
schema:
$ref: '#/components/schemas/BackgroundApiAcceptedDto'
text/json:
schema:
$ref: '#/components/schemas/BackgroundApiAcceptedDto'
security:
- interactiveapi: []
put:
tags:
- ExpenseReceipt
summary: Update a Expense Receipt
description: 'Response Message has StatusCode NoContent if PUT operation succeed.
Response Message has StatusCode BadRequest if PUT operation failed.
The response headers include an ETag after a successful PUT operation.'
operationId: ExpenseReceipt_PutByreceiptNumber
parameters:
- name: receiptNumber
in: path
description: Identifies the ExpenseReceipt
required: true
schema:
type: string
- name: erp-api-background
in: header
description: 'Accepts the request and queues it to be executed in the background by our least busy worker. Responds with 202 Accepted and a document containing a JobId reference and details state location.
Supported values:
* a URL: when the background operation is finished, a notification will be posted to the URL with a document containing a reference id, status code and a details state location.
* "none" (without quotes): Fire and forget; no notification will be sent when background operation is finished.
* "subscription[:<name_1>=<value_1>,..,<name_n>=<value_n>]" (without quotes): when the background operation is finsihed, a notification is posted to the Webhook subscription set up in Developer Portal for your integration client.
Optionally a set of name-value pairs can be added. These will be sent as headers in the POST request to the Webhook subscription''s url.
To find status and details of a background-api operation, GET .. v1/background/{id}. To get the response payload of a background-api operation, if any, GET .. v1/background/{id}/content'
schema:
type: string
- name: If-Match
in: header
description: 'The If-Match HTTP header allows clients to update a resource only if its current version matches a specific ETag. This mechanism helps prevent conflicts when multiple clients attempt to modify the same resource simultaneously.
The If-Match header should be included in the request headers using the following syntax: If-Match: "etag_value"
* If the update is successful, the server responds with 204 No Content and includes the new ETag value in the response headers.
* If the ETag on the server does not match the value provided in the If-Match header, the server responds with 412 Precondition Failed.'
schema:
type: string
requestBody:
description: Defines the data for the Expense Receipt to create
content:
application/json:
schema:
$ref: '#/components/schemas/ExpenseReceiptUpdateDto'
text/json:
schema:
$ref: '#/components/schemas/ExpenseReceiptUpdateDto'
application/xml:
schema:
$ref: '#/components/schemas/ExpenseReceiptUpdateDto'
text/xml:
schema:
$ref: '#/components/schemas/ExpenseReceiptUpdateDto'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ExpenseReceiptUpdateDto'
required: true
x-bodyName: expenseReceiptUpdateDto
responses:
'204':
description: NoContent
content:
application/json:
schema:
type: object
text/json:
schema:
type: object
'412':
description: Expense Receipt version does not match with If-Match header
content:
application/json: {}
text/json: {}
'202':
description: Server accepted and queued the request for background execution.
content:
application/json:
schema:
$ref: '#/components/schemas/BackgroundApiAcceptedDto'
text/json:
schema:
$ref: '#/components/schemas/BackgroundApiAcceptedDto'
security:
- interactiveapi: []
delete:
tags:
- ExpenseReceipt
summary: Deletes a specific Expense Receipt
description: Response Message has StatusCode NoContent if DELETE operation succeed
operationId: ExpenseReceipt_DeleteByreceiptNumber
parameters:
- name: receiptNumber
in: path
description: Identifies the Expense Receipt to delete
required: true
schema:
type: string
- name: erp-api-background
in: header
description: 'Accepts the request and queues it to be executed in the background by our least busy worker. Responds with 202 Accepted and a document containing a JobId reference and details state location.
Supported values:
* a URL: when the background operation is finished, a notification will be posted to the URL with a document containing a reference id, status code and a details state location.
* "none" (without quotes): Fire and forget; no notification will be sent when background operation is finished.
* "subscription[:<name_1>=<value_1>,..,<name_n>=<value_n>]" (without quotes): when the background operation is finsihed, a notification is posted to the Webhook subscription set up in Developer Portal for your integration client.
Optionally a set of name-value pairs can be added. These will be sent as headers in the POST request to the Webhook subscription''s url.
To find status and details of a background-api operation, GET .. v1/background/{id}. To get the response payload of a background-api operation, if any, GET .. v1/background/{id}/content'
schema:
type: string
responses:
'204':
description: NoContent
content:
application/json:
schema:
type: object
text/json:
schema:
type: object
'202':
description: Server accepted and queued the request for background execution.
content:
application/json:
schema:
$ref: '#/components/schemas/BackgroundApiAcceptedDto'
text/json:
schema:
$ref: '#/components/schemas/BackgroundApiAcceptedDto'
security:
- interactiveapi: []
/v1/expenseReceipt:
get:
tags:
- ExpenseReceipt
summary: Get a range of Expense Receipts, a filter needs to be specified.
operationId: ExpenseReceipt_GetAll
parameters:
- name: date
in: query
description: The date of the document
schema:
type: string
- name: dateCondition
in: query
schema:
type: string
- name: inventory
in: query
description: Identifies the inventory item from the document
schema:
type: string
- name: project
in: query
description: Identifies the project from the document
schema:
type: string
- name: claimedBy
in: query
description: Identifies the employee from the document
schema:
type: string
- name: projectTask
in: query
description: Filter on Task ID.
schema:
type: string
- name: invoiceable
in: query
description: If the document is invoiceable
schema:
type: boolean
- name: status
in: query
description: The status of the document.
schema:
enum:
- Open
- Pending
- Approved
- Rejected
- Released
type: string
- name: customer
in: query
description: Identifies the customer from the document
schema:
type: string
- name: erp-api-background
in: header
description: 'Accepts the request and queues it to be executed in the background by our least busy worker. Responds with 202 Accepted and a document containing a JobId reference and details state location.
Supported values:
* a URL: when the background operation is finished, a notification will be posted to the URL with a document containing a reference id, status code and a details state location.
* "none" (without quotes): Fire and forget; no notification will be sent when background operation is finished.
* "subscription[:<name_1>=<value_1>,..,<name_n>=<value_n>]" (without quotes): when the background operation is finsihed, a notification is posted to the Webhook subscription set up in Developer Portal for your integration client.
Optionally a set of name-value pairs can be added. These will be sent as headers in the POST request to the Webhook subscription''s url.
To find status and details of a background-api operation, GET .. v1/background/{id}. To get the response payload of a background-api operation, if any, GET .. v1/background/{id}/content'
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ExpenseReceiptDto'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/ExpenseReceiptDto'
'202':
description: Server accepted and queued the request for background execution.
content:
application/json:
schema:
$ref: '#/components/schemas/BackgroundApiAcceptedDto'
text/json:
schema:
$ref: '#/components/schemas/BackgroundApiAcceptedDto'
security:
- interactiveapi: []
post:
tags:
- ExpenseReceipt
summary: Create a Expense Receipt
description: 'Response Message has StatusCode Created if POST operation succeed.
Response Message has StatusCode BadRequest or InternalServerError if POST operation failed.
The response headers include an ETag after a successful POST operation.'
operationId: ExpenseReceipt_Post
parameters:
- name: erp-api-background
in: header
description: 'Accepts the request and queues it to be executed in the background by our least busy worker. Responds with 202 Accepted and a document containing a JobId reference and details state location.
Supported values:
* a URL: when the background operation is finished, a notification will be posted to the URL with a document containing a reference id, status code and a details state location.
* "none" (without quotes): Fire and forget; no notification will be sent when background operation is finished.
* "subscription[:<name_1>=<value_1>,..,<name_n>=<value_n>]" (without quotes): when the background operation is finsihed, a notification is posted to the Webhook subscription set up in Developer Portal for your integration client.
Optionally a set of name-value pairs can be added. These will be sent as headers in the POST request to the Webhook subscription''s url.
To find status and details of a background-api operation, GET .. v1/background/{id}. To get the response payload of a background-api operation, if any, GET .. v1/background/{id}/content'
schema:
type: string
requestBody:
description: Defines the data for the Expense Receipt to create
content:
application/json:
schema:
$ref: '#/components/schemas/ExpenseReceiptUpdateDto'
text/json:
schema:
$ref: '#/components/schemas/ExpenseReceiptUpdateDto'
application/xml:
schema:
$ref: '#/components/schemas/ExpenseReceiptUpdateDto'
text/xml:
schema:
$ref: '#/components/schemas/ExpenseReceiptUpdateDto'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ExpenseReceiptUpdateDto'
required: true
x-bodyName: expenseReceiptUpdateDto
responses:
'201':
description: Created
content:
application/json:
schema:
type: object
text/json:
schema:
type: object
'202':
description: Server accepted and queued the request for background execution.
content:
application/json:
schema:
$ref: '#/components/schemas/BackgroundApiAcceptedDto'
text/json:
schema:
$ref: '#/components/schemas/BackgroundApiAcceptedDto'
security:
- interactiveapi: []
/v1/expenseReceipt/{receiptNumber}/attachment:
post:
tags:
- ExpenseReceipt
summary: Creates an attachment and associates it with an expense receipt.
description: 'The action result dto contains information about the result of running the action.
Response Message has StatusCode BadRequest or InternalServerError if POST operation failed.
In this endpoint, If-Match can be checked against resource current version when calling with ''erp-api-background'' HTTP header.'
operationId: ExpenseReceipt_CreateAttachmentByreceiptNumber
parameters:
- name: receiptNumber
in: path
description: Identifies the credit note
required: true
schema:
type: string
- name: erp-api-background
in: header
description: 'Accepts the request and queues it to be executed in the background by our least busy worker. Responds with 202 Accepted and a document containing a JobId reference and details state location.
Supported values:
* a URL: when the background operation is finished, a notification will be posted to the URL with a document containing a reference id, status code and a details state location.
* "none" (without quotes): Fire and forget; no notification will be sent when background operation is finished.
* "subscription[:<name_1>=<value_1>,..,<name_n>=<value_n>]" (without quotes): when the background operation is finsihed, a notification is posted to the Webhook subscription set up in Developer Portal for your integration client.
Optionally a set of name-value pairs can be added. These will be sent as headers in the POST request to the Webhook subscription''s url.
To find status and details of a background-api operation, GET .. v1/background/{id}. To get the response payload of a background-api operation, if any, GET .. v1/background/{id}/content'
schema:
type: string
- name: If-Match
in: header
description: 'The If-Match HTTP header allows clients to update a resource only if its current version matches a specific ETag. This mechanism helps prevent conflicts when multiple clients attempt to modify the same resource simultaneously.
The If-Match header should be included in the request headers using the following syntax: If-Match: "etag_value"
* If the POST operation is successful, the server responds with 200 OK and includes the new ETag value in the response headers.
* If the ETag on the server does not match the value provided in the If-Match header, the server responds with 412 Precondition Failed.'
schema:
type: string
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/BackgroundApiAcceptedDto'
text/json:
schema:
$ref: '#/components/schemas/BackgroundApiAcceptedDto'
'412':
description: Expense Receipt version does not match with If-Match header
content:
application/json: {}
text/json: {}
'202':
description: Server accepted and queued the request for background execution.
content:
application/json:
schema:
$ref: '#/components/schemas/BackgroundApiAcceptedDto'
text/json:
schema:
$ref: '#/components/schemas/BackgroundApiAcceptedDto'
security:
- interactiveapi: []
components:
schemas:
BackgroundApiAcceptedDto:
type: object
properties:
id:
type: string
stateLocation:
type: string
expenseClaimInExpenseReceiptDto:
properties:
number:
type: string
description: Number of item
description:
type: string
description: Name of item/description
description: Receipt details tab > Expense details section > Expense claim > The expense claim with which the expense receipt is associated.
expenseAccountInExpenseReceiptDto:
properties:
type:
type: string
number:
type: string
description: Number of item
description:
type: string
description: Name of item/description
description: Receipt details tab > Financial details section > Expense account > The expense account to which the system records the part of the expense to be paid back to the employee.
contactInEmployeeDto:
properties:
employeeContact:
type: string
description: Employee contact > The link to the contact record associated with the employee.
title:
enum:
- Doctor
- Miss
- Mr
- Mrs
- Ms
- Prof
type: string
description: Title > The courtesy title to be used for the employee.
firstName:
type: string
description: First name > The first name of the employee.
midName:
type: string
description: Middle name > The middle name of the employee.
lastName:
type: string
description: 'Mandatory field: Last name* > The last name of the employee.'
phone3:
type: string
description: Phone 3 > An additional phone number of the employee.
contactId:
type: integer
format: int32
name:
type: string
description: Name > The legal name of to appear on the documents.
attention:
type: string
description: Attention > The attention line as it is used in your customer's/supplier's/company's business letters. The intention of this line is to direct the letter to the right person if the letter is not addressed to any specific person.
email:
type: string
description: Email > The email address of the customer/supplier/company as a business entity.
web:
type: string
description: Web > The website of the company, if one exists.
phone1:
type: string
description: Phone 1 > The default phone number.
phone2:
type: string
description: Phone 2 > An additional phone number.
fax:
type: string
description: Fax > The fax number.
description: General information tab > Contact section >
DtoValueOfNullableOfDateTime:
type: object
properties:
value:
type: string
format: date-time
projectInExpenseReceiptDto:
properties:
internalId:
type: integer
description: The internal identifier.
format: int32
id:
type: string
description: Click on the magnifier. > The identifier.
description:
type: string
description: Click on the magnifier. > The description.
description: Receipt details tab > Expense details section > Project/contract > The project or contract, which should be specified if the employee incurred the expenses while working on a particular project or contract.
DtoValueOfNullableOfBoolean:
type: object
properties:
value:
type: boolean
branchInExpenseReceiptDto:
properties:
number:
type: string
description: Click the magnifier. > The identifier.
name:
type: string
description: Click the magnifier. > The name.
description: 'Mandatory field: The top part > Branch > The company branch that will incur the expenses.'
countryInAddressDto:
properties:
id:
type: string
description: 'Mandatory field: Country ID* > The unique two-letter country ID according to international standard ISO 3166.'
name:
type: string
description: 'Mandatory field: Country name* > The complete name of the country.'
errorInfo:
type: string
metadata:
$ref: '#/components/schemas/MetadataDto'
description: Country > The country.
taxCategoryInExpenseReceiptDto:
properties:
number:
type: string
description: Number of item
description:
type: string
description: Name of item/description
description: Receipt details tab > Expense details section > VAT category > The tax category for the expense receipt.
addressInEmployeeDto:
properties:
addressId:
type: integer
format: int32
addressLine1:
type: string
description: Address 1 > The first line of the customer's/supplier's/company's/employee's contact address.
addressLine2:
type: string
description: Address 2 > The second line of the address.
addressLine3:
type: string
description: Address 3 > The third line of the address.
postalCode:
type: string
description: Postcode > The postcode.
city:
type: string
description: City > The city.
country:
$ref: '#/components/schemas/countryInAddressDto'
county:
$ref: '#/components/schemas/countyInAddressDto'
description: General information tab > Address info section >
ExpenseReceiptDto:
type: object
properties:
internalId:
type: integer
format: int32
receiptId:
type: string
description: "The top part > Employee > \tThe identifier of the employee whose expense receipts you want to manage."
date:
type: string
description: Both tabs > Date > The date of the expense receipt.
format: date-time
taxTotal:
type: number
description: The top part > VAT total > The total amount of VAT or taxes calculated for the expense receipt.
format: double
currency:
$ref: '#/components/schemas/currencyInExpenseReceiptDto'
refNbr:
type: string
description: Both tabs > Ref. no. > The reference number, which usually matches the number of the original receipt.
inventory:
$ref: '#/components/schemas/InventoryNumberDescriptionDto'
description:
type: string
description: 'Open the receipt
Mandatory field: Receipt details tab > Expense details section > Description* > The expense description, which is displayed as a link.'
uom:
type: string
description: Receipt details tab > Expense details section > UoM > The unit of measure of the expense item.
quantity:
type: number
description: Receipt details tab > Expense details section > Quantity > The quantity of the expense item that the employee purchased according to the receipt.
format: double
unitCost:
type: number
description: Receipt details tab > Expense details section > Unit cost > The cost of one unit of the expense item.
format: double
totalAmount:
type: number
description: Receipt details tab > Expense details section > Amount > The total amount of the receipt (for VAT-inclusive taxes), or the total amount before taxes (for VAT-exclusive taxes).
format: double
employeePart:
type: number
description: Receipt details tab > Expense details section > Employee part > The part of the total amount that will not be paid back to the employee.
format: double
claimAmount:
type: number
description: Receipt details tab > Expense details section > Expense claim > The expense claim with which the expense receipt is associated.
format: double
status:
enum:
- Open
- Pending
- Approved
- Rejected
- Released
type: string
description: 'Receipt details tab > Expense details section > Expense claim status > The current status of the associated expense claim, which can be one of the following options: On hold, Pending apporval, Approved, Rejected, Released.'
claimedBy:
$ref: '#/components/schemas/claimedByInExpenseReceiptDto'
branch:
$ref: '#/components/schemas/branchInExpenseReceiptDto'
expenseClaim:
$ref: '#/components/schemas/expenseClaimInExpenseReceiptDto'
invoiceable:
type: boolean
description: Receipt details tab > Financial details section > Invoiceable > A check box that indicates (if selected) that the customer should be invoiced for the claim amount.
project:
$ref: '#/components/schemas/projectInExpenseReceiptDto'
projectTask:
$ref: '#/components/schemas/projectTaskInExpenseReceiptDto'
customer:
$ref: '#/components/schemas/customerInExpenseReceiptDto'
location:
$ref: '#/components/schemas/locationInExpenseReceiptDto'
expenseAccount:
$ref: '#/components/schemas/expenseAccountInExpenseReceiptDto'
expenseSub:
$ref: '#/components/schemas/expenseSubInExpenseReceiptDto'
salesAccount:
$ref: '#/components/schemas/salesAccountInExpenseReceiptDto'
salesSub:
$ref: '#/components/schemas/salesSubInExpenseReceiptDto'
taxCategory:
$ref: '#/components/schemas/taxCategoryInExpenseReceiptDto'
image:
$ref: '#/components/schemas/imageInExpenseReceiptDto'
timeStamp:
type: string
description: 'Identifier that represents a specific version of the resource.
It helps to prevent simultaneous updates of the resource from overwriting each other (by using ETags and If-Match headers)'
format: byte
description: This class represents a Expense Receipt in ExpenseReceiptController. Used by getting data.
projectTaskInExpenseReceiptDto:
properties:
internalId:
type: integer
description: The internal identifier.
format: int32
id:
type: string
description: Click on the magnifier. > The identifier.
description:
type: string
description: Click on the magnifier. > The description.
description: Receipt details tab > Expense details section > Project task > The project task to which the expenses are related.
salesAccountInExpenseReceiptDto:
properties:
type:
type: string
number:
type: string
description: Number of item
description:
type: string
description: Name of item/description
description: Receipt details tab > Financial details section > Sales account > The sales account to which the system records the part of the amount to charge the customer for.
MetadataDto:
type: object
properties:
totalCount:
type: integer
format: int64
maxPageSize:
type: integer
format: int64
BranchNumberDto:
type: object
properties:
number:
type: string
description: Click the magnifier. > The identifier.
name:
type: string
description: Click the magnifier. > The name.
currencyInExpenseReceiptDto:
properties:
id:
type: string
description: Click on the magnifier. > The identifier.
description:
type: string
description: Click on the magnifier. > The description.
description: Both tabs > Currency > The currency of the expense receipt.
DtoValueOfString:
type: object
properties:
value:
type: string
DtoValueOfNullableOfDecimal:
type: object
properties:
value:
type: number
format: double
claimedByInExpenseReceiptDto:
properties:
employeeUserId:
type: string
description: Employee internal user ID. This is the ID of the user linked to the employee
format: uuid
example: 00000000-0000-0000-0000-000000000000
employeeId:
type: integer
description: 'Mandatory field: The top part > Employee ID* > The unique identifier, which is assigned to the employee in accordance with the configuration of the EMPLOYEE segmented key.'
format: int32
employeeNumber:
type: string
description: General information tab > Employee settings section > Employee ref. no. > A reference number for the employee.
employeeName:
type: st
# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/visma/refs/heads/main/openapi/visma-expensereceipt-api-openapi.yml