SAP Concur icon

SAP Concur expense, invoice and purchase-request data API

SAP SE · Business

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

  • SAP Concur screenshot 1
  • SAP Concur screenshot 2
  • SAP Concur screenshot 3
  • SAP Concur screenshot 4
  • SAP Concur screenshot 5
  • SAP Concur screenshot 6
  • SAP Concur screenshot 7
  • SAP Concur screenshot 8

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/token osint

    Exchanges 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/query openfinance

    Returns 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/entries openfinance

    Creates 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/requests openfinance

    Lists 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} openfinance

    Loads 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}/lines openfinance

    Returns 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}/notes opendata

    Returns 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}/stages opendata

    Returns 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/lookup openbanking

    Reads 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/invoices openfinance

    Returns 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} openfinance

    Loads 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} opendata

    Resolves 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}/export opendata

    Resolves 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/inbox openfinance

    Lists 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-types opendata

    Returns 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/policies opendata

    Returns 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/run opendata

    Runs 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/trips opendata

    Returns 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/lookup opendata

    Loads 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/reports openfinance

    Returns 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/badges opendata

    Returns 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/trips opendata

    Returns 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

Get a quote