openapi: 3.1.0 info: title: Remote Benefits Benefit Offers Expenses API description: 'List, select, and renew localized employee benefits across the countries Remote supports. Benefit offers and renewal requests use JSON Schema forms that vary per country and employment. ' version: '2026-05-22' contact: name: Remote API Support url: https://support.remote.com/ x-logo: url: https://remote.com/favicon.ico servers: - url: https://gateway.remote.com/v1 description: Production - url: https://gateway.remote-sandbox.com/v1 description: Sandbox security: - BearerAuth: [] tags: - name: Expenses description: Employee expense reimbursements paths: /expenses: get: summary: List Expenses operationId: listExpenses tags: - Expenses parameters: - name: employment_id in: query schema: type: string format: uuid - name: status in: query schema: $ref: '#/components/schemas/ExpenseStatus' responses: '200': description: Expenses. content: application/json: schema: $ref: '#/components/schemas/ExpenseList' post: summary: Create An Expense operationId: createExpense tags: - Expenses requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpenseCreateRequest' responses: '201': description: Created. content: application/json: schema: $ref: '#/components/schemas/ExpenseEnvelope' /expenses/{expense_id}: parameters: - name: expense_id in: path required: true schema: type: string format: uuid get: summary: Show An Expense operationId: showExpense tags: - Expenses responses: '200': description: Expense. content: application/json: schema: $ref: '#/components/schemas/ExpenseEnvelope' patch: summary: Update An Expense operationId: updateExpense tags: - Expenses requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExpenseCreateRequest' responses: '200': description: Updated. content: application/json: schema: $ref: '#/components/schemas/ExpenseEnvelope' delete: summary: Delete An Expense operationId: deleteExpense tags: - Expenses responses: '204': description: Deleted. /expenses/{expense_id}/approve: parameters: - name: expense_id in: path required: true schema: type: string format: uuid post: summary: Approve An Expense operationId: approveExpense tags: - Expenses responses: '200': description: Approved. content: application/json: schema: $ref: '#/components/schemas/ExpenseEnvelope' /expenses/{expense_id}/decline: parameters: - name: expense_id in: path required: true schema: type: string format: uuid post: summary: Decline An Expense operationId: declineExpense tags: - Expenses requestBody: required: true content: application/json: schema: type: object required: - reason properties: reason: type: string responses: '200': description: Declined. content: application/json: schema: $ref: '#/components/schemas/ExpenseEnvelope' components: schemas: ExpenseEnvelope: type: object properties: data: type: object properties: expense: $ref: '#/components/schemas/Expense' ExpenseCreateRequest: type: object required: - employment_id - category - amount - currency - expense_date properties: employment_id: type: string format: uuid category: type: string amount: type: integer currency: type: string expense_date: type: string format: date description: type: string receipt_url: type: string format: uri ExpenseStatus: type: string enum: - submitted - approved - declined - reimbursed - deleted ExpenseList: type: object properties: data: type: object properties: expenses: type: array items: $ref: '#/components/schemas/Expense' Expense: type: object properties: id: type: string format: uuid employment_id: type: string format: uuid category: type: string amount: type: integer currency: type: string status: $ref: '#/components/schemas/ExpenseStatus' expense_date: type: string format: date description: type: string receipt_url: type: string format: uri nullable: true securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: JWT