SAP Concur Expense · Arazzo Workflow

SAP Concur Create Report and Add Entry

Version 1.0.0

Create a draft expense report, add an expense entry to it, then read the report back.

1 workflow 2 source APIs 1 provider
View Spec View on GitHub Expense ManagementFinancial ManagementReceiptsReimbursementReportingSAPTravelArazzoWorkflows

Provider

sap-concur-expense

Workflows

create-report-add-entry
Create a draft expense report and add an expense entry to it.
Creates a report header, then creates a child expense entry referencing the new report ID, and finally reads the report header back to verify the result.
3 steps inputs: businessPurpose, comment, expenseTypeCode, policyID, reportName, transactionAmount, transactionCurrencyCode, transactionDate, vendorDescription outputs: entryID, reportID, total
1
createReport
Create the draft expense report header.
2
addEntry
Add an expense entry to the newly created report.
3
getReport
Read the report header back to confirm the entry was attached.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
arazzo: 1.0.1
info:
  title: SAP Concur Create Report and Add Entry
  summary: Create a draft expense report, add an expense entry to it, then read the report back.
  description: >-
    The foundational SAP Concur Expense flow. It creates a new draft expense
    report header, adds a single expense line item (entry) to that report using
    the returned report ID, and then retrieves the report header to confirm the
    entry was attached and the running total updated. Every step spells out its
    request inline so the flow can be read and executed without opening the
    underlying OpenAPI description.
  version: 1.0.0
sourceDescriptions:
- name: expenseEntriesApi
  url: ../openapi/sap-concur-expense-expense-entries-api-openapi.yml
  type: openapi
- name: expenseReportsApi
  url: ../openapi/sap-concur-expense-expense-reports-api-openapi.yml
  type: openapi
workflows:
- workflowId: create-report-add-entry
  summary: Create a draft expense report and add an expense entry to it.
  description: >-
    Creates a report header, then creates a child expense entry referencing the
    new report ID, and finally reads the report header back to verify the result.
  inputs:
    type: object
    required:
    - reportName
    - expenseTypeCode
    - transactionDate
    - transactionAmount
    - transactionCurrencyCode
    properties:
      reportName:
        type: string
        description: The name of the new expense report.
      comment:
        type: string
        description: Optional comment for the report header.
      policyID:
        type: string
        description: Optional expense policy ID to apply to the report.
      expenseTypeCode:
        type: string
        description: Expense type code for the entry (e.g. BUSML, AIRFR, HOTEL).
      transactionDate:
        type: string
        description: Date of the expense transaction (YYYY-MM-DD).
      transactionAmount:
        type: number
        description: Amount of the transaction in the transaction currency.
      transactionCurrencyCode:
        type: string
        description: ISO 4217 currency code of the transaction (e.g. USD).
      vendorDescription:
        type: string
        description: Optional vendor or merchant name for the entry.
      businessPurpose:
        type: string
        description: Optional business purpose for the entry.
  steps:
  - stepId: createReport
    description: Create the draft expense report header.
    operationId: createExpenseReport
    requestBody:
      contentType: application/json
      payload:
        Name: $inputs.reportName
        Comment: $inputs.comment
        PolicyID: $inputs.policyID
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      reportID: $response.body#/ID
      reportURI: $response.body#/URI
  - stepId: addEntry
    description: Add an expense entry to the newly created report.
    operationId: createExpenseEntry
    requestBody:
      contentType: application/json
      payload:
        ReportID: $steps.createReport.outputs.reportID
        ExpenseTypeCode: $inputs.expenseTypeCode
        TransactionDate: $inputs.transactionDate
        TransactionAmount: $inputs.transactionAmount
        TransactionCurrencyCode: $inputs.transactionCurrencyCode
        VendorDescription: $inputs.vendorDescription
        BusinessPurpose: $inputs.businessPurpose
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      entryID: $response.body#/ID
  - stepId: getReport
    description: Read the report header back to confirm the entry was attached.
    operationId: getExpenseReport
    parameters:
    - name: id
      in: path
      value: $steps.createReport.outputs.reportID
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      total: $response.body#/Total
      approvalStatusCode: $response.body#/ApprovalStatusCode
  outputs:
    reportID: $steps.createReport.outputs.reportID
    entryID: $steps.addEntry.outputs.entryID
    total: $steps.getReport.outputs.total

Work with this as data

Every workflow here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for arazzo workflows

4 MCP tools reach this
  • find_arazzoBrowse and filter every workflow in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This workflow
curl "https://apis.io/api/v1/arazzo/sap-concur-expense-create-report-add-entry-workflow"
All arazzo workflows
curl "https://apis.io/api/v1/arazzo?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.