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.
openapi: 3.0.1
info:
title: Light Authorization v1 - Expenses API
version: 1.0.0
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:
UpdateExpenseLineItemRequestV1Model:
type: object
properties:
originalAmount:
type: integer
format: int64
nullable: true
billingAmount:
type: integer
format: int64
nullable: true
accountId:
type: string
format: uuid
nullable: true
costCenterId:
type: string
format: uuid
nullable: true
description:
type: string
nullable: true
reimbursementCategoryId:
type: string
format: uuid
nullable: true
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
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
nullable: true
deprecated: true
nextCursor:
type: string
description: Cursor for fetching the next page (only for cursor pagination)
nullable: true
prevCursor:
type: string
description: Cursor for fetching the previous page (only for cursor pagination)
nullable: true
ExternalUpdateExpenseRequestV1Model:
type: object
properties:
originalCurrency:
type: string
nullable: true
example: USD
performedDate:
type: string
format: date
nullable: true
ExternalExpenseReceiptUploadUrlRequestV1Model:
type: object
properties:
filename:
type: string
contentType:
type: string
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
format: int64
nullable: true
billingAmount:
type: integer
format: int64
nullable: true
accountId:
type: string
format: uuid
nullable: true
costCenterId:
type: string
format: uuid
nullable: true
description:
type: string
nullable: true
reimbursementCategoryId:
type: string
format: uuid
nullable: true
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
ExternalExpenseReceiptUploadUrlResponseV1Model:
type: object
properties:
uploadUrl:
type: string
format: url
key:
type: string
metadata:
type: object
additionalProperties:
type: string
nullable: true
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