SAP Concur Expense · Agentic Access
SAP Concur Expense Agentic Access
x-agentic-access
generated
SAP Concur Expense exposes 23 API operations that an AI agent could call, of which 11 are state-changing ‘acting’ operations. This is a recommended x-agentic-access execution contract — the scope, audience, consequence tier, short-lived token constraints, and escalation each action should carry before it is handed to an autonomous agent.
By consequence: 12 read and 11 write.
Contracts are classified heuristically from the provider’s OpenAPI and refresh on every APIs.io network build; audience is bound per deployment. The model follows Curity’s Access Intelligence (apidays Munich 2026). Browse every provider’s agent contracts at agentic-access.apis.io.
Expense ManagementFinancial ManagementReceiptsReimbursementReportingSAPTravel
Operations: 23
Acting: 11
Human-in-the-loop: 0
Method: generated
By consequence
read 12
write 11
Source
Agentic Access
generated: '2026-07-15'
method: generated
source: openapi/sap-concur-expense-report-openapi.yml
description: Recommended x-agentic-access execution contracts, classified heuristically from
the OpenAPI. A governance starting point for exposing this API to AI agents — review and bind
audience per deployment. See research/curity/agentic-governance/.
summary:
operations: 23
by_action_class:
connected: 12
acting: 11
by_consequence:
read: 12
write: 11
human_in_the_loop_required: 0
operations:
- path: /expense/reports
method: get
operationId: listExpenseReports
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
scope:
- expense.report.read
- expense.report.write
- path: /expense/reports
method: post
operationId: createExpenseReport
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
scope:
- expense.report.read
- expense.report.write
- path: /expense/reports/{id}
method: get
operationId: getExpenseReport
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
scope:
- expense.report.read
- expense.report.write
- path: /expense/reports/{id}
method: put
operationId: updateExpenseReport
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
scope:
- expense.report.read
- expense.report.write
- path: /expense/reports/{id}
method: delete
operationId: deleteExpenseReport
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
scope:
- expense.report.read
- expense.report.write
- path: /expense/entries
method: get
operationId: listExpenseEntries
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
scope:
- expense.report.read
- expense.report.write
- path: /expense/entries
method: post
operationId: createExpenseEntry
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
scope:
- expense.report.read
- expense.report.write
- path: /expense/entries/{id}
method: get
operationId: getExpenseEntry
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
scope:
- expense.report.read
- expense.report.write
- path: /expense/entries/{id}
method: put
operationId: updateExpenseEntry
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
scope:
- expense.report.read
- expense.report.write
- path: /expense/entries/{id}
method: delete
operationId: deleteExpenseEntry
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
scope:
- expense.report.read
- expense.report.write
- path: /expense/quickexpenses
method: get
operationId: listQuickExpenses
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
scope:
- expense.report.read
- expense.report.write
- path: /expense/quickexpenses
method: post
operationId: createQuickExpense
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
scope:
- expense.report.read
- expense.report.write
- path: /expense/quickexpenses/{id}
method: get
operationId: getQuickExpense
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
scope:
- expense.report.read
- expense.report.write
- path: /expense/quickexpenses/{id}
method: put
operationId: updateQuickExpense
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
scope:
- expense.report.read
- expense.report.write
- path: /expense/quickexpenses/{id}
method: delete
operationId: deleteQuickExpense
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
scope:
- expense.report.read
- expense.report.write
- path: /expense/receiptimages
method: get
operationId: listReceiptImages
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
scope:
- expense.report.read
- expense.report.write
- path: /expense/receiptimages
method: post
operationId: createReceiptImage
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
scope:
- expense.report.read
- expense.report.write
- path: /expense/receiptimages/{id}
method: get
operationId: getReceiptImage
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
scope:
- expense.report.read
- expense.report.write
- path: /expense/receiptimages/{id}
method: delete
operationId: deleteReceiptImage
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
scope:
- expense.report.read
- expense.report.write
- path: /expense/allocations
method: get
operationId: listAllocations
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
scope:
- expense.report.read
- expense.report.write
- path: /expense/expensegroupconfigurations
method: get
operationId: listExpenseGroupConfigurations
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
scope:
- expense.report.read
- expense.report.write
- path: /expense/expensegroupconfigurations/{id}
method: get
operationId: getExpenseGroupConfiguration
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
scope:
- expense.report.read
- expense.report.write
- path: /expense/paymentbatches
method: get
operationId: listPaymentBatches
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
scope:
- expense.report.read
- expense.report.write