Light v1 - Expenses API
The v1 - Expenses API from Light — 8 operation(s) for v1 - expenses.
The v1 - Expenses API from Light — 8 operation(s) for v1 - expenses.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/light-v1-expenses-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: Light Authorization v1 - Expenses API
version: 1.0.0
servers:
- url: https://api.light.inc
description: Base URL declared by the provider in apis.yml (roadmap#122).
security:
- apiKeyAuth: []
- bearerAuth: []
tags:
- name: v1 - Expenses
paths:
/v1/expenses/{expenseId}/cancel:
post:
tags:
- v1 - Expenses
summary: Cancel expense
description: Cancels an existing expense
operationId: cancelExpense
parameters:
- name: expenseId
in: path
required: true
schema:
type: string
format: uuid
responses:
default:
description: default response
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ExternalExpenseV1Model'
/v1/expenses/{expenseId}/line-items:
post:
tags:
- v1 - Expenses
summary: Create line item
description: Creates a new line item
operationId: createExpenseLineItem
parameters:
- name: expenseId
in: path
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/CreateExpenseLineItemRequestV1Model'
responses:
default:
description: default response
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ExternalExpenseLineItemV1Model'
/v1/expenses/{expenseId}/line-items/{lineItemId}:
delete:
tags:
- v1 - Expenses
summary: Delete line item
description: Deletes an existing line item
operationId: deleteExpenseLineItem
parameters:
- name: expenseId
in: path
required: true
schema:
type: string
format: uuid
- name: lineItemId
in: path
required: true
schema:
type: string
format: uuid
responses:
default:
description: default response
content:
application/json;charset=UTF-8: {}
patch:
tags:
- v1 - Expenses
summary: Update line item
description: Updates an existing expense line item
operationId: updateExpenseLineItem
parameters:
- name: expenseId
in: path
required: true
schema:
type: string
format: uuid
- name: lineItemId
in: path
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/UpdateExpenseLineItemRequestV1Model'
responses:
default:
description: default response
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ExternalExpenseLineItemV1Model'
/v1/expenses/upload-url:
post:
tags:
- v1 - Expenses
summary: Create upload URL
description: Creates a pre-signed URL for uploading an expense receipt document
operationId: generateUploadUrl
requestBody:
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ExternalExpenseReceiptUploadUrlRequestV1Model'
responses:
default:
description: default response
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ExternalExpenseReceiptUploadUrlResponseV1Model'
/v1/expenses/{expenseId}:
get:
tags:
- v1 - Expenses
summary: Get expense
description: Returns an expense by ID including all line items
operationId: getExpense
parameters:
- name: expenseId
in: path
required: true
schema:
type: string
format: uuid
responses:
default:
description: default response
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ExternalExpenseV1Model'
patch:
tags:
- v1 - Expenses
summary: Update expense
description: Updates an existing expense
operationId: updateExpense
parameters:
- name: expenseId
in: path
required: true
schema:
type: string
format: uuid
requestBody:
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ExternalUpdateExpenseRequestV1Model'
responses:
default:
description: default response
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ExternalExpenseV1Model'
/v1/expenses/{expenseId}/document:
get:
tags:
- v1 - Expenses
summary: Get expense document
description: Returns the attached receipt document as a PDF download
operationId: getAttachedDocument_1
parameters:
- name: expenseId
in: path
required: true
schema:
type: string
format: uuid
responses:
default:
description: default response
content:
application/pdf: {}
/v1/expenses:
get:
tags:
- v1 - Expenses
summary: List expenses
description: Returns a paginated list of expenses
operationId: listExpenses
parameters:
- name: sort
in: query
schema:
type: string
description: "Sort string in the format `field:direction`. To provide multiple sort fields, separate them with commas.\n\nAvailable directions: `asc`, `desc`. \n\nAvailable fields: `userId`, `status`, `performedDate`, `createdAt`."
example: amount:desc,createdAt:asc
- name: filter
in: query
schema:
type: string
description: "Filter string in the format `field:operator:value`. To provide multiple filters, separate them with commas.\n\nAvailable operators: `eq`, `ne`, `in`, `not_in`, `gt`, `gte`, `lt`, `lte`.\n - For `in` and `not_in` operators, provide multiple values separated by the pipe character (`|`). \n\nAvailable fields: `id`, `userId`, `status`, `performedDate`, `createdAt`, `updatedAt`."
example: state:in:IN_DRAFT|SCHEDULED|PAID,amount:gte:500,vendorId:ne:null
- name: limit
in: query
description: Maximum number of items to return. Default is 50, maximum is 200.
schema:
maximum: 200
type: integer
format: int32
- name: offset
in: query
description: Number of items to skip before starting to collect the result set. Deprecated, use 'cursor' instead.
deprecated: true
schema:
type: integer
format: int64
- name: cursor
in: query
description: 'The cursor position to start returning results from.
To opt-in into cursor-based pagination, provide `0` for the initial request.
For subsequent requests, use `nextCursor` and `prevCursor` from the previous response to navigate.
Cursor values are opaque and should not be constructed manually.'
schema:
type: string
responses:
default:
description: default response
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/GetExternalExpensesResponseV1Model'
/v1/expenses/submit:
post:
tags:
- v1 - Expenses
summary: Submit reimbursement
description: Submits all pending expenses from the current user for administrator review and approval
operationId: submitReimbursement
responses:
default:
description: default response
content:
application/json;charset=UTF-8: {}
components:
schemas:
ExternalExpenseReceiptUploadUrlResponseV1Model:
type: object
properties:
uploadUrl:
type: string
format: url
key:
type: string
metadata:
type:
- object
- 'null'
additionalProperties:
type: string
UpdateExpenseLineItemRequestV1Model:
type: object
properties:
originalAmount:
type:
- integer
- 'null'
format: int64
billingAmount:
type:
- integer
- 'null'
format: int64
accountId:
type:
- string
- 'null'
format: uuid
costCenterId:
type:
- string
- 'null'
format: uuid
description:
type:
- string
- 'null'
reimbursementCategoryId:
type:
- string
- 'null'
format: uuid
ExternalExpenseV1Model:
type: object
properties:
id:
type: string
format: uuid
receiptDocumentKey:
type: string
originalCurrency:
type: string
example: USD
billingCurrency:
type: string
example: USD
status:
type: string
description: ⚠️ This enum is not exhaustive; new values may be added in the future.
enum:
- CREATED
- IN_DRAFT
- SUBMITTED_FOR_REVIEW
- CANCELLED
userId:
type: string
format: uuid
companyId:
type: string
format: uuid
performedDate:
type: string
format: date
lineItems:
type: array
items:
$ref: '#/components/schemas/ExternalExpenseLineItemV1Model'
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
CreateExpenseLineItemRequestV1Model:
type: object
properties:
originalAmount:
type:
- integer
- 'null'
format: int64
billingAmount:
type:
- integer
- 'null'
format: int64
accountId:
type:
- string
- 'null'
format: uuid
costCenterId:
type:
- string
- 'null'
format: uuid
description:
type:
- string
- 'null'
reimbursementCategoryId:
type:
- string
- 'null'
format: uuid
ExternalExpenseReceiptUploadUrlRequestV1Model:
type: object
properties:
filename:
type: string
contentType:
type: string
ExternalExpenseLineItemV1Model:
type: object
properties:
id:
type: string
format: uuid
expenseId:
type: string
format: uuid
originalAmount:
type: integer
format: int64
billingAmount:
type: integer
format: int64
accountId:
type: string
format: uuid
costCenterId:
type: string
format: uuid
description:
type: string
reimbursementCategoryId:
type: string
format: uuid
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
ExternalUpdateExpenseRequestV1Model:
type: object
properties:
originalCurrency:
type:
- string
- 'null'
example: USD
performedDate:
type:
- string
- 'null'
format: date
GetExternalExpensesResponseV1Model:
type: object
properties:
billingAmountTotal:
type: integer
format: int64
records:
type: array
description: List of records for the current page
items:
$ref: '#/components/schemas/ExternalExpenseV1Model'
hasMore:
type: boolean
description: Boolean flag indicating if there are more records available
total:
type:
- integer
- 'null'
description: Total number of records (only for offset pagination). This field is not guaranteed to be returned and only available for offset pagination, please do not rely on it and migrate to cursor pagination.
format: int64
deprecated: true
nextCursor:
type:
- string
- 'null'
description: Cursor for fetching the next page (only for cursor pagination)
prevCursor:
type:
- string
- 'null'
description: Cursor for fetching the previous page (only for cursor pagination)
securitySchemes:
apiKeyAuth:
type: apiKey
description: Basic authentication header of the form **Basic** **<api_key>**, where **<api_key>** is your api key.
name: Authorization
in: header
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT