---
id: change/bcapps/11007
type: change
title: "#11007 Add Travel Request API lifecycle to Expense Agent"
summary: Travel Request API lifecycle management is integrated into the Expense Agent, enabling creation, approval, and rejection of travel requests through scoped OData endpoints with proper authorization and linked expense report generation.
tier: official
language: en
tags:
  - feature
  - main
  - bc30
  - page approver view api
  - page expense reports api
  - page expense users api
  - page spend request details api
  - page spend requests api
  - page travel request details api
system: development
review:
  state: reviewed
  by: opus
  at: "2026-10-08T02:06:00.681Z"
  flags: []
generated:
  at: "2026-10-08T01:26:53.141Z"
  pipeline: 0.2.0
  prompts:
    extract-change: 1
  input_hash: 96a6e9956b57ba6ec008f64824d8a3e4ca5500d4
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/pull/11007
    title: "microsoft/BCApps#11007: Add Travel Request API lifecycle to Expense Agent"
    date: "2026-09-09"
    commit: 96a6e9956b57ba6ec008f64824d8a3e4ca5500d4
    t: null
    quote: Extends the Expense Agent beta API so travel requests can be managed through the same scoped OData model as expenses and expense reports.
links:
  learn: []
  objects:
    - object/page/6969
    - object/page/6928
    - object/page/6918
    - object/page/7102
    - object/page/7099
    - object/page/7135
    - object/page/7134
    - object/page/7103
    - object/codeunit/6906
    - object/enum/6984
    - object/tableextension/6908
    - object/table/6906
    - object/table/6907
    - object/table/6915
    - object/table/6916
    - object/permissionset/6955
    - object/permissionset/6952
    - object/permissionset/6904
    - object/codeunit/6908
    - object/codeunit/7133
    - object/page/7129
    - object/page/7136
    - object/page/7137
  features: []
  topics: []
  localizations: []
  videos: []
  posts: []
  guidelines: []
  changes: []
number: 11007
repo: microsoft/BCApps
source_id: bcapps-prs
url: https://github.com/microsoft/BCApps/pull/11007
kind: pr
base_branch: main
major: "30"
merged_at: "2026-09-09T10:12:48Z"
author: claudiuciumedean
author_type: User
community_contribution: false
labels:
  - "AL: Apps (W1)"
  - ExpenseManagement
  - "Team: Finance"
change_class: code
change_kind: feature
behavior_change: true
breaking: false
files:
  count: 30
  additions: 2653
  deletions: 30
  al: 23
apps:
  - ExpenseAgent
objects_touched:
  - key: page/6969
    page: page/6969
    type: page
    id: 6969
    name: Approver View API
    app: ExpenseAgent
    status: modified
  - key: page/6928
    page: page/6928
    type: page
    id: 6928
    name: Expense Reports API
    app: ExpenseAgent
    status: modified
  - key: page/6918
    page: page/6918
    type: page
    id: 6918
    name: Expense Users API
    app: ExpenseAgent
    status: modified
  - key: page/7102
    page: page/7102
    type: page
    id: 7102
    name: Spend Request Details API
    app: ExpenseAgent
    status: modified
  - key: page/7099
    page: page/7099
    type: page
    id: 7099
    name: Spend Requests API
    app: ExpenseAgent
    status: modified
  - key: page/7135
    page: page/7135
    type: page
    id: 7135
    name: Travel Request Details API
    app: ExpenseAgent
    status: modified
  - key: page/7134
    page: page/7134
    type: page
    id: 7134
    name: Travel Requests API
    app: ExpenseAgent
    status: modified
  - key: page/7103
    page: page/7103
    type: page
    id: 7103
    name: Travelers API
    app: ExpenseAgent
    status: modified
  - key: codeunit/6906
    page: codeunit/6906
    type: codeunit
    id: 6906
    name: Expense Capabilities Provider
    app: ExpenseAgent
    status: modified
  - key: enum/6984
    page: enum/6984
    type: enum
    id: 6984
    name: Expense Capability
    app: ExpenseAgent
    status: modified
  - key: tableextension/6908
    page: tableextension/6908
    type: tableextension
    id: 6908
    name: Expense Spend Request
    app: ExpenseAgent
    status: modified
  - key: table/6906
    page: table/6906
    type: table
    id: 6906
    name: Expense Report Header
    app: ExpenseAgent
    status: modified
  - key: table/6907
    page: table/6907
    type: table
    id: 6907
    name: Expense Report Line
    app: ExpenseAgent
    status: modified
  - key: table/6915
    page: table/6915
    type: table
    id: 6915
    name: Posted Expense Report Header
    app: ExpenseAgent
    status: modified
  - key: table/6916
    page: table/6916
    type: table
    id: 6916
    name: Posted Expense Report Line
    app: ExpenseAgent
    status: modified
  - key: permissionset/6955
    page: permissionset/6955
    type: permissionset
    id: 6955
    name: Expense Agent - Data Depen.
    app: ExpenseAgent
    status: modified
  - key: permissionset/6952
    page: permissionset/6952
    type: permissionset
    id: 6952
    name: Expense Agent - Objects
    app: ExpenseAgent
    status: modified
  - key: permissionset/6904
    page: permissionset/6904
    type: permissionset
    id: 6904
    name: Expense Management - Objects
    app: ExpenseAgent
    status: renamed
  - key: codeunit/6908
    page: codeunit/6908
    type: codeunit
    id: 6908
    name: Expense Event Subscriber
    app: ExpenseAgent
    status: modified
  - key: codeunit/7133
    page: codeunit/7133
    type: codeunit
    id: 7133
    name: Travel Request Approval
    app: ExpenseAgent
    status: added
  - key: page/7129
    page: page/7129
    type: page
    id: 7129
    name: Travel Request Card
    app: ExpenseAgent
    status: modified
  - key: page/7136
    page: page/7136
    type: page
    id: 7136
    name: Travel Request List
    app: ExpenseAgent
    status: modified
  - key: page/7137
    page: page/7137
    type: page
    id: 7137
    name: Travel Request Subform
    app: ExpenseAgent
    status: modified
objects_unjoined: []
obsoletions: []
backports: []
fixes_issues: []
work_items:
  - 626966
systems:
  - development
quote: Extends the Expense Agent beta API so travel requests can be managed through the same scoped OData model as expenses and expense reports.
joined_against:
  major: "30"
  commit: ecbc028c25dbe83b61313bc566e6c1d41184bb1c
---

# #11007 Add Travel Request API lifecycle to Expense Agent

> Travel Request API lifecycle management is integrated into the Expense Agent, enabling creation, approval, and rejection of travel requests through scoped OData endpoints with proper authorization and linked expense report generation.

[Pull request](https://github.com/microsoft/BCApps/pull/11007) · merged into `main` (BC30) on 2026-09-09 by claudiuciumedean · 30 files (+2653 -30), 23 AL · feature · tier official · reviewed (checked by Opus)

## What changed

- Advertises the travelRequest capability and adds owner-scoped and approver-scoped travel request navigation in the API
- Adds bound submit, approve and reject actions with authorization checks, status guards and audit fields
- Approval creates one linked expense report; deleting a travel request is blocked while expense reports reference it
- Normalizes local currency on API reads and writes and prevents PATCH from changing status or ownership
- Emits submit, approve, auto-approve and reject usage events without identifiers; HTTP integration tests are disabled in CI
- Behaviour changes for users or extensions.

## AL objects touched

- [Page 6969 "Approver View API"](../../objects/page/6969.md), ExpenseAgent: modified
- [Page 6928 "Expense Reports API"](../../objects/page/6928.md), ExpenseAgent: modified
- [Page 6918 "Expense Users API"](../../objects/page/6918.md), ExpenseAgent: modified
- [Page 7102 "Spend Request Details API"](../../objects/page/7102.md), ExpenseAgent: modified
- [Page 7099 "Spend Requests API"](../../objects/page/7099.md), ExpenseAgent: modified
- [Page 7135 "Travel Request Details API"](../../objects/page/7135.md), ExpenseAgent: modified
- [Page 7134 "Travel Requests API"](../../objects/page/7134.md), ExpenseAgent: modified
- [Page 7103 "Travelers API"](../../objects/page/7103.md), ExpenseAgent: modified
- [Codeunit 6906 "Expense Capabilities Provider"](../../objects/codeunit/6906.md), ExpenseAgent: modified
- [Enum 6984 "Expense Capability"](../../objects/enum/6984.md), ExpenseAgent: modified
- [Table extension 6908 "Expense Spend Request"](../../objects/tableextension/6908.md), ExpenseAgent: modified
- [Table 6906 "Expense Report Header"](../../objects/table/6906.md), ExpenseAgent: modified
- [Table 6907 "Expense Report Line"](../../objects/table/6907.md), ExpenseAgent: modified
- [Table 6915 "Posted Expense Report Header"](../../objects/table/6915.md), ExpenseAgent: modified
- [Table 6916 "Posted Expense Report Line"](../../objects/table/6916.md), ExpenseAgent: modified
- [Permission set 6955 "Expense Agent - Data Depen."](../../objects/permissionset/6955.md), ExpenseAgent: modified
- [Permission set 6952 "Expense Agent - Objects"](../../objects/permissionset/6952.md), ExpenseAgent: modified
- [Permission set 6904 "Expense Management - Objects"](../../objects/permissionset/6904.md), ExpenseAgent: renamed
- [Codeunit 6908 "Expense Event Subscriber"](../../objects/codeunit/6908.md), ExpenseAgent: modified
- [Codeunit 7133 "Travel Request Approval"](../../objects/codeunit/7133.md), ExpenseAgent: added
- [Page 7129 "Travel Request Card"](../../objects/page/7129.md), ExpenseAgent: modified
- [Page 7136 "Travel Request List"](../../objects/page/7136.md), ExpenseAgent: modified
- [Page 7137 "Travel Request Subform"](../../objects/page/7137.md), ExpenseAgent: modified

## Context

- Work items: AB#626966
- Labels: AL: Apps (W1), ExpenseManagement, Team: Finance
- Systems: development
- From the description: "Extends the Expense Agent beta API so travel requests can be managed through the same scoped OData model as expenses and expense reports."

Source: metadata of a merged pull request in microsoft/BCApps (bcapps): title, labels, changed paths and counts, with a summary in our words. No source text and no description beyond one short quote (D10, D61).
