SAP Concur expense, invoice and purchase-request data API
SAP Concur is SAP SE's Fiori-styled Android client for employees who capture receipts, file expense reports, book trips, request cash advances and approve invoices or purchase requests from a phone. It is the mobile front of Concur Expense, Concur Travel, Invoice and Request, used by corporate travelers, expense delegates and managers at companies that run SAP Concur as their T&E system of record in the United States, Germany, France and India. The Android build is 10.34.2. It sits next to Expensify, Chrome River and Workday Expenses as the SAP-stack choice for mid-market and enterprise travel programs.
Omni report rows stamp claimedAmount against approvedAmount, carrying reportId, approvalStatus and paymentStatus for each traveler week. Cash-advance floats expose cashAdvanceId, requestAmount and requestCrnCode; vendor bills bring vendorInvoiceNo, invoiceAmount and poNumber; purchase-request approvals list id, total and hasExceptions. Trip rows add itinLocator, recordLocator and hotel dailyRate beside air flightNumber.
Finance close bots, treasury float monitors and AP matchers consume those objects to reconcile T&E to the GL, recover outstanding advances and flag unmatched POs. openData Studio turns the same fields into callable open data.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Issue OAuth2 access token
POST
/v1/session/tokenosintExchanges an authorization code or refresh token for accessToken, refreshToken and the tenant dataCenterURL that later expense, invoice and spend calls attach as Bearer.
Auth: OAuth2 authorization-code or refresh grant; clientId, redirectURI and optional PKCE code_verifier. No prior Bearer.
- accessToken
- refreshToken
- dataCenterURL
- grant_type
- client_id
- code
- redirect_uri
- code_verifier
POST /v1/session/token HTTP/1.1 Content-Type: application/x-www-form-urlencoded Accept: application/json grant_type=authorization_code&client_id=<clientId>&code=<authCode>&redirect_uri=concur://oauth2/callback&code_verifier=<pkceVerifier>{ "accessToken": "<accessToken>", "refreshToken": "<refreshToken>", "dataCenterURL": "https://<tenant-region>" }List Omni expense reports
POST
/v1/spend/reports/queryopenfinanceReturns the traveler Omni report list with reportId, claimedAmount/approvedAmount, approvalStatus, paymentStatus and AI-assisted expense counts.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- reportId
- name
- reportDate
- hasExceptions
- hasBlockingExceptions
- isSubmitted
- isPaymentConfirmed
- isSentBack
- isApproved
- canAddExpense
- reportType
- approvalStatus
- paymentStatus
- isReopened
- isPendingDelegatorReview
- isPendingApproval
- claimedAmount
- approvedAmount
- currencyCode
- value
- assistedExpenseCount
POST /v1/spend/reports/query HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json Content-Type: application/json { "filterByStatus": "UNSUBMITTED", "withAI": true, "contextType": "TRAVELER" }{ "reports": [ { "reportId": "rpt_8c21aa", "name": "Berlin week 38", "reportDate": "2026-09-18", "hasExceptions": false, "hasBlockingExceptions": false, "isSubmitted": false, "isPaymentConfirmed": false, "isSentBack": false, "isApproved": false, "canAddExpense": true, "reportType": "REGULAR", "approvalStatus": "Not Submitted", "paymentStatus": "Not Paid", "isReopened": false, "isPendingDelegatorReview": false, "isPendingApproval": false, "approver": { "firstName": "Maria", "lastName": "Keller", "middleInitial": "", "preferredName": "Maria" }, "claimedAmount": { "currencyCode": "EUR", "value": 842.15 }, "approvedAmount": { "currencyCode": "EUR", "value": 0 }, "ai": { "assistedExpenseCount": 3, "assisted": true } } ] }Create traveler quick expense
POST
/v1/spend/entriesopenfinanceCreates a traveler quick expense with expenseTypeId, transactionDate, entryDetails and transactionAmount before it is moved onto a report.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- expenseTypeId
- transactionDate
- entryDetails
- transactionAmount
- currencyCode
- value
POST /v1/spend/entries HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json Content-Type: application/json { "expenseTypeId": "EXP_MEALS", "transactionDate": "2026-09-17", "entryDetails": "Customer dinner Berlin", "transactionAmount": { "currencyCode": "EUR", "value": 64.8 } }{ "expenseTypeId": "EXP_MEALS", "transactionDate": "2026-09-17", "entryDetails": "Customer dinner Berlin", "transactionAmount": { "currencyCode": "EUR", "value": 64.8 } }List pending purchase requests
GET
/v1/procurement/requestsopenfinanceLists purchase requests waiting on the approver queue with id, description, status, total, hasExceptions and requestedDate.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- id
- description
- status
- total
- hasExceptions
- requestedDate
- currencyCode
GET /v1/procurement/requests?view=pending HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "items": [ { "id": "pr_4412", "description": "Q4 laptop refresh", "status": "PENDING_APPROVAL", "total": 4280.0, "hasExceptions": false, "requestedDate": "2026-09-12", "currencyCode": { "code": "USD", "symbol": "$" } } ] }Get purchase request details
GET
/v1/procurement/requests/{requestId}openfinanceLoads one purchase request for the approver, including purchaseRequestNumber, total, status and hasExceptions.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- id
- description
- status
- total
- hasExceptions
- requestedDate
- currencyCode
- purchaseRequestNumber
GET /v1/procurement/requests/pr_4412 HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "id": "pr_4412", "description": "Q4 laptop refresh", "status": "PENDING_APPROVAL", "total": 4280.0, "hasExceptions": false, "requestedDate": "2026-09-12", "currencyCode": { "code": "USD", "symbol": "$" }, "purchaseRequestNumber": "PR-4412" }List purchase-request line items
GET
/v1/procurement/requests/{requestId}/linesopenfinanceReturns line items on a purchase request waiting for approver action, with id, expenseName, quantity, unitPrice, total and neededByDate.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- id
- currencyCode
- description
- expenseType
- expenseName
- vendorAddressId
- quantity
- unitPrice
- total
- neededByDate
- totalAllocations
GET /v1/procurement/requests/pr_4412/lines HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "items": [ { "id": "li_01", "currencyCode": "USD", "description": "ThinkPad T14s", "expenseType": "HARDWARE", "expenseName": "Laptop", "vendorAddressId": "va_88", "quantity": 2.0, "unitPrice": 2140.0, "total": 4280.0, "neededByDate": "2026-10-01", "totalAllocations": 1 } ] }List purchase-request comments
GET
/v1/procurement/requests/{requestId}/notesopendataReturns the comment thread on a purchase request, with commentId, comment, userFormattedName, creationDate and latest.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- purchaseRequestId
- commentId
- comment
- userId
- userFormattedName
- creationDate
- latest
GET /v1/procurement/requests/pr_4412/notes HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json[ { "purchaseRequestId": "pr_4412", "commentId": "cmt_19", "comment": "Please confirm docking-station SKU", "userId": "emp_88", "userFormattedName": "Alex Chen", "creationDate": "2026-09-13T09:41:00Z", "latest": true } ]Get purchase-request workflow steps
GET
/v1/procurement/requests/{requestId}/stagesopendataReturns the approval workflow for a purchase request, including allowedActions, currentSequence, lastStepSequence and workflowSteps.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- allowedActions
- currentSequence
- exceptionMessage
- lastStepSequence
- workflowSteps
GET /v1/procurement/requests/pr_4412/stages HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "allowedActions": [ "APPROVE", "SEND_BACK" ], "currentSequence": 2, "exceptionMessage": null, "lastStepSequence": 4, "workflowSteps": [ { "sequence": 1, "status": "COMPLETE" }, { "sequence": 2, "status": "PENDING" } ] }Get cash advance by id
POST
/v1/treasury/advances/lookupopenbankingReads a cash-advance header by cashAdvanceId, returning requestAmount, requestCrnCode, requestDate and statKey.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- action
- method
- cashAdvanceId
- caKey
- caFormKey
- arKey
- name
- requestAmount
- requestCrnCode
- requestCrnKey
- requestDate
- crnCode
- crnKey
- statKey
POST /v1/treasury/advances/lookup HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json Content-Type: application/json { "action": "CashAdvance", "method": "lookupById", "cashAdvanceId": "ca_7701" }{ "cashAdvance": { "arKey": "ar_12", "caFormKey": 4, "caKey": 7701, "cashAdvanceId": "ca_7701", "crnCode": "EUR", "crnKey": 32, "name": "Berlin trip float", "requestAmount": 1500.0, "requestCrnCode": "EUR", "requestCrnKey": 32, "requestDate": "2026-09-10", "statKey": "PEND" } }List invoice payment requests
GET
/v1/payables/invoicesopenfinanceReturns the queue of invoices waiting on the signed-in approver, with vendorInvoiceNo, vendorName, totalAmountDisplay and statusName.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- requestId
- reqKey
- title
- vendorName
- vendorInvoiceNo
- invoiceDate
- submitDate
- totalAmountDisplay
- crnCode
- status
- statusName
- visibleExceptionsCount
- hasAllocations
- apsKey
- firstName
- lastName
GET /v1/payables/invoices HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "items": [ { "requestId": "INV-90821", "reqKey": "rk_90821", "title": "September SaaS", "vendorName": "Acme Cloud GmbH", "vendorInvoiceNo": "AC-44190", "invoiceDate": "2026-09-01", "submitDate": "2026-09-04", "totalAmountDisplay": "12840.00", "crnCode": "EUR", "status": "PAAP", "statusName": "Pending Approval", "visibleExceptionsCount": 0, "hasAllocations": "Y", "apsKey": "aps_12", "firstName": "Maria", "lastName": "Keller" } ] }Get invoice payment-request detail
GET
/v1/payables/invoices/{invoiceId}openfinanceLoads header fields for one invoice: venInvoiceNumber, invoiceAmount, paymentDueDate, poNumber, buyerCostCenter and lineItemTotal.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- requestId
- title
- venInvoiceNumber
- invoiceAmount
- invoiceDate
- paymentDueDate
- lineItemTotal
- total
- poNumber
- buyerCostCenter
- numLineItems
- totalApprovedAmount
- transactionId
GET /v1/payables/invoices/INV-90821 HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "requestId": "INV-90821", "title": "September SaaS", "venInvoiceNumber": "AC-44190", "invoiceAmount": "12840.00", "invoiceDate": "2026-09-01", "paymentDueDate": "2026-09-30", "lineItemTotal": "12840.00", "total": "12840.00", "poNumber": "PO-22011", "buyerCostCenter": "IT-440", "numLineItems": 3, "totalApprovedAmount": "0.00", "transactionId": "txn_90821" }Resolve receipt image URL
GET
/v1/imaging/receipts/{imageId}opendataResolves an ExpenseIt / receipt-viewer image id to a fetchable receipt URL that a report entry can attach.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- id
- url
GET /v1/imaging/receipts/img_9aa01 HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "id": "img_9aa01", "url": "https://<receipt-store>/receipts/img_9aa01" }Get expense-report PDF URL
GET
/v1/spend/reports/{reportId}/exportopendataResolves a printable expense-report PDF URL for a given reportId and policy key.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- reportId
- polKey
- url
GET /v1/spend/reports/rpt_8c21aa/export?polKey=pol_std HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "reportId": "rpt_8c21aa", "polKey": "pol_std", "url": "https://<document-store>/reports/rpt_8c21aa.pdf" }List available expenses
GET
/v1/spend/inboxopenfinanceLists the traveler's available-expense inbox (receipts, card charges, mileage) with lik, vendor, amount, currency, expenseType and cardType before they are moved onto a report.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- lik
- breed
- state
- sortDate
- imageId
- expenseType
- date
- vendor
- currency
- amount
- location
- comment
- cardType
- pendingCardUpdate
- smartExpenseId
- distance
- routeId
- carKey
GET /v1/spend/inbox HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json[ { "lik": "sel_4419", "breed": "EXPENSE", "state": "READY", "sortDate": "2026-09-17T18:04:00Z", "imageId": "img_9aa01", "expenseType": "Meals", "date": "2026-09-17", "vendor": "Café Einstein", "currency": "EUR", "amount": 64.8, "location": "Berlin", "comment": "Customer dinner", "cardType": "CORP", "pendingCardUpdate": false, "smartExpenseId": "se_118", "distance": null, "routeId": null, "carKey": null } ]List traveler expense types
GET
/v1/config/expense-typesopendataReturns the traveler's policy expense-type catalog with expenseTypeId, expenseTypeName, spendCategoryCode, showOnMobile and attendee-edit flags used by Quick Expense and inbox create flows.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- expenseCode
- expenseTypeId
- expenseTypeName
- parentName
- visibilityCode
- spendCategoryCode
- showOnMobile
- isActive
- hasChildren
- parentExpenseTypeId
- policyId
- allowEditAttendeeAmount
- allowEditAttendeeCount
- allowNoShows
- description
- isCategory
GET /v1/config/expense-types HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json[ { "expenseCode": "MEALS", "expenseTypeId": "EXP_MEALS", "expenseTypeName": "Meals", "parentName": "Food", "visibilityCode": "ALWAYS", "spendCategoryCode": "MEALS", "showOnMobile": true, "isActive": true, "hasChildren": false, "parentExpenseTypeId": null, "policyId": "pol_std", "adjustedAmountCalculationMethod": null, "allowEditAttendeeAmount": true, "allowEditAttendeeCount": true, "allowNoShows": false, "description": "Business meals", "isCategory": false } ]List traveler expense policies
GET
/v1/config/policiesopendataReturns the traveler's expense policies with policyId, policyName, default flag, reportFormId and workflowProcessId that gate report create and submit.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- reportFormId
- policyId
- policyName
- isDefault
- workflowProcessId
- receiptImaging
GET /v1/config/policies HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json[ { "reportFormId": "form_exp", "policyId": "pol_std", "policyName": "Standard US T&E", "isDefault": true, "workflowProcessId": "wf_exp_std", "receiptImaging": { "required": true } } ]Run traveler Expense Assistant
POST
/v1/spend/assistant/runopendataRuns the traveler Expense Assistant (CALENDAR, TRIP or PROMPT) and returns matched SmartExpense rows with creditCardTransactionId, quickExpenseId, isAutoCreated and linked receipts.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- assistant
- creditCardTransactionId
- personalCardTransactionId
- quickExpenseId
- isAutoCreated
- trip
- receipts
POST /v1/spend/assistant/run HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json Content-Type: application/json { "assistant": "CALENDAR" }{ "creditCardTransactionId": "cct_9012", "personalCardTransactionId": null, "quickExpenseId": "qe_441", "isAutoCreated": true, "trip": { "tripId": "tr_Berlin38" }, "receipts": [ { "imageId": "img_9aa01" } ] }List traveler trips
GET
/v1/travel/tripsopendataReturns the traveler's upcoming and past trip list with tripName, itinLocator, cityCode, recordLocator and local start/end dates used by the Fiori trip list.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- tripName
- tripStartDate
- tripEndDate
- itinLocator
- tripLocator
- cliqbookTripId
- city
- cityCode
- recordLocator
- startDateLocal
- endDateLocal
- latitude
- longitude
- clientLocator
GET /v1/travel/trips HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "trips": [ { "tripName": "Berlin week 38", "tripStartDate": "2026-09-15", "tripEndDate": "2026-09-19", "itinLocator": "itin_berlin38", "tripLocator": "trl_8c21", "cliqbookTripId": "cb_44190", "city": "Berlin", "cityCode": "BER", "recordLocator": "ABC123", "startDateLocal": "2026-09-15T08:10:00", "endDateLocal": "2026-09-19T18:40:00", "latitude": "52.5200", "longitude": "13.4050", "clientLocator": "cl_berlin38" } ] }Get single itinerary V2
POST
/v1/travel/itineraries/lookupopendataLoads one itinerary by itinLocator/tripLocator with tripUUID, recordLocator, air segments (flightNumber, confirmationNumber, seat) and hotel segments (checkin, checkout, dailyRate).
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- itinLocator
- tripUUID
- tripName
- recordLocator
- cliqbookTripId
- cityCode
- state
- startDateLocal
- endDateLocal
- bookings
- flightNumber
- confirmationNumber
- startCityCode
- endCityCode
- classOfService
- seat
- hotel
- checkin
- checkout
- dailyRate
POST /v1/travel/itineraries/lookup HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json Content-Type: application/json { "itinLocator": "itin_berlin38", "tripLocator": "trl_8c21", "t2TripId": "t2_44190", "forApprover": false }{ "itinLocator": "itin_berlin38", "tripUUID": "t2_44190", "tripName": "Berlin week 38", "recordLocator": "ABC123", "cliqbookTripId": "cb_44190", "cityCode": "BER", "state": "CONFIRMED", "startDateLocal": "2026-09-15T08:10:00", "endDateLocal": "2026-09-19T18:40:00", "bookings": [ { "air": { "flightNumber": "LH184", "confirmationNumber": "LH-9AA01", "startCityCode": "FRA", "endCityCode": "BER", "classOfService": "Y", "seat": "12A", "vendorName": "Lufthansa" }, "hotel": { "hotel": "Hotel Adlon", "confirmationNumber": "ADL-22011", "checkin": "2026-09-15", "checkout": "2026-09-19", "dailyRate": "240.00", "vendor": "Kempinski" } } ] }List expense reports to approve
GET
/v1/approvals/reportsopenfinanceReturns the manager expense-approval queue with employeeName, totalClaimedAmount, totalPostedAmount, crnCode, hasException and polKey.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- reportName
- employeeName
- reportDate
- submitDate
- totalClaimedAmount
- totalPostedAmount
- crnCode
- hasException
- everSentBack
- polKey
- purpose
- receiptImageAvailable
- pdfUrl
- apsKey
- processInstanceKey
- severityLevel
GET /v1/approvals/reports HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "items": [ { "reportName": "Berlin week 38", "employeeName": "Alex Chen", "reportDate": "2026-09-18", "submitDate": "2026-09-19", "totalClaimedAmount": 842.15, "totalPostedAmount": 842.15, "crnCode": "EUR", "hasException": "N", "everSentBack": false, "polKey": "pol_std", "purpose": "Customer meetings", "receiptImageAvailable": true, "pdfUrl": "https://<document-store>/reports/rpt_8c21aa.pdf", "apsKey": "aps_44", "processInstanceKey": "pi_8821", "severityLevel": "NONE" } ] }Get home count summary
GET
/v1/home/badgesopendataReturns the Fiori home badge counts: reports/invoices/purchase-requests/trips waiting on the signed-in user, plus unsubmittedReportsTotal and card-transaction counts.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- reportsToApproveCount
- invoicesToApproveCount
- purchaseRequestsToApproveCount
- tripsToApproveCount
- travelRequestApprovalCount
- unsubmittedReportsCount
- unsubmittedReportsTotal
- unsubmittedReportsCrnCode
- corporateCardTransactionCount
- personalCardTransactionCount
- receiptCaptureCount
- mobileEntryCount
- invoicesToSubmitCount
GET /v1/home/badges?includeSubmitted=true HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "reportsToApproveCount": 4, "invoicesToApproveCount": 2, "purchaseRequestsToApproveCount": 1, "tripsToApproveCount": 1, "travelRequestApprovalCount": 0, "unsubmittedReportsCount": 3, "unsubmittedReportsTotal": 1842.15, "unsubmittedReportsCrnCode": "EUR", "corporateCardTransactionCount": 7, "personalCardTransactionCount": 1, "receiptCaptureCount": 5, "mobileEntryCount": 2, "invoicesToSubmitCount": 0 }List trips awaiting approval
GET
/v1/approvals/tripsopendataReturns trips waiting on the signed-in approver with tripName, travellerName, totalTripCost, approvalStatus, approvalDeadline and approvalMode.
Auth: Bearer accessToken from the session issue call (Authorization: Bearer). Tenant routing follows dataCenterURL.
- tripName
- travellerName
- totalTripCost
- approvalRequired
- approvalStatus
- approvalDeadline
- approvalMode
- approverComments
- actionedAt
- itinLocator
- validApprovers
- redirectUrl
GET /v1/approvals/trips HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "trips": [ { "tripName": "Berlin week 38", "travellerName": "Alex Chen", "totalTripCost": "1840.00 EUR", "approvalRequired": true, "approvalStatus": "PENDING", "approvalDeadline": "2026-09-12T17:00:00Z", "approvalMode": "MANAGER", "approverComments": null, "actionedAt": null, "itinLocator": "itin_berlin38", "validApprovers": [ "mgr_12" ], "redirectUrl": "https://<tenant-region>/trips/itin_berlin38" } ] }
Data categories
- expense reports
- cash advances
- invoices
- purchase requests
- purchase-request comments
- approval workflows
- receipts
- available expenses
- expense types
- expense policies
- expense assistant
- trips
- itineraries
- reports to approve
- home counts
Where teams use this data
T&E close against the GL
Nightly jobs pull Omni reports by reportId with claimedAmount.value, approvedAmount.value, approvalStatus and paymentStatus, then match posted totals to SAP or Oracle journal lines for the same traveler and reportDate.
Cash-advance float monitoring
Treasury watches cashAdvanceId rows for requestAmount, requestCrnCode and statKey so outstanding floats are recovered when the matching expense report is paid.
AP invoice and PO match
Accounts payable reads vendorInvoiceNo, vendorName, invoiceAmount, paymentDueDate, poNumber and lineItemTotal to flag unmatched vendor bills before payment.
Purchase-request approval desk
Procurement bots page PURCH_APRVR queues by id, total, hasExceptions and purchaseRequestNumber so managers clear laptop and services requests from the phone queue into the PO system.
Frequently asked questions
What expense-report fields does SAP Concur expose?
The Omni reports call returns reportId, name, reportDate, claimedAmount and approvedAmount (each with currencyCode and value), plus approvalStatus, paymentStatus, hasExceptions and isSubmitted. Available-expense inbox rows add lik, vendor, amount and cardType before they land on a report.
Which invoice and purchase-request fields are available?
Invoice approval lists vendorInvoiceNo, vendorName, totalAmountDisplay, invoiceDate and statusName; the detail header adds venInvoiceNumber, invoiceAmount, paymentDueDate, poNumber and buyerCostCenter. Purchase requests waiting on an approver carry id, total, hasExceptions, requestedDate and purchaseRequestNumber.
Where do cash-advance amounts live?
A cash-advance lookup returns cashAdvanceId, requestAmount, requestCrnCode, requestDate, name and statKey for a single advance.
Which trip and itinerary fields are available?
The trip list returns tripName, itinLocator, cityCode and recordLocator. Itinerary detail adds tripUUID, air flightNumber/confirmationNumber/seat and hotel checkin, checkout and dailyRate. The trip-approval queue lists pending trips with travellerName, totalTripCost and approvalDeadline.
Apps similar to SAP Concur
- Expensify — Expensify is a Portland expense-management company whose product covers receipt capture, expense reports, reimbursements, in-app travel booking and a corporate card.
- Workday — Workday Travel & Expenses lets employees capture receipts, book trips and submit expense reports on the same Workday HR and finance platform.
- Navan — Navan (formerly TripActions) is a Palo Alto corporate-travel company whose platform combines travel booking, corporate cards, expense reporting and analytics.
- Emburse Enterprise — Emburse Enterprise, the product formerly sold as Chrome River, is enterprise software for expense and invoice workflows across entities, regions and systems.
- Ramp — Ramp is spend-management software that issues policy-controlled corporate cards, captures receipts when a card is swiped, and automates expense reports and reimbursements.
- Zoho Expense — Zoho Expense is Zoho's travel-and-expense product that captures receipts, builds reports, routes approvals and books travel with policy controls in one system.
- Rydoo — Rydoo is European expense-management software for receipt scanning, policy-based approvals, card reconciliation and reimbursements, and it publishes SAP connectivity.
- Brex — Brex is expense-management software that auto-enforces spend limits across cards, bill pay, travel and reimbursements and generates receipts and memos for each transaction.
Topics
- SAP Concur API
- Concur expense reportId
- Concur claimedAmount
- Concur cashAdvanceId
- Concur vendorInvoiceNo
- Concur purchase request total
- Concur expenseTypeId
- Concur available expense lik
- Concur itinLocator
- Concur recordLocator
- Concur flightNumber
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use