SAP Concur Expense Reports v3.0

This reference is readable without JavaScript. Download the OpenAPI document.

Runtime

/api/purple-suite/{instanceId}/contracts/expense/concur
[
  {
    "method": "get",
    "path": "/expense/reports",
    "operationId": "get_expense_reports"
  },
  {
    "method": "post",
    "path": "/expense/reports",
    "operationId": "post_expense_reports"
  },
  {
    "method": "get",
    "path": "/expense/reports/:id",
    "operationId": "get_expense_reports_id"
  },
  {
    "method": "put",
    "path": "/expense/reports/:id",
    "operationId": "put_expense_reports_id"
  }
]

Credentials

Coverage and limitations

{
  "documentScope": "full",
  "runtimeFidelity": "modeled",
  "counts": {
    "operations": 4
  },
  "notes": [
    "All 4 operations declared by the pinned Reports document are mounted as `modeled-core`: list, create, retrieve and update an expense report. 20 of the 33 declared list filters are removed from the served operation because they select on Concur configuration or sub-resources this contract does not model; `coverage.md` names each one.",
    "`PUT /expense/reports/{id}` follows the document's own rule — only the supplied fields are updated, missing fields are not altered — and answers 200 with the declared empty `Void` body. The pinned document declares no 404 for `GET /expense/reports/{id}`; an unknown report answers 404 with an empty body rather than fabricating a record.",
    "Provenance `oas`: a vendor-published Swagger 2.0 document from SAP's own documentation repository. `runtimeFidelity` is `modeled`, not `exact`: the served request schema is deliberately narrowed and the runtime is deterministic synthetic state, not captured Concur tenant behaviour.",
    "Swagger 2.0 `basePath` cannot template a variable, so the instance-scoped prefix is expressed as a literal `/api/purple-suite/{instanceId}/contracts/expense/concur` basePath with `host`, `schemes` and the vendor `x-servers` block removed. The reference viewer supplies a templated server that overrides it, so a Scalar try-it-out still targets a concrete instance; the cost falls on a strict Swagger 2.0 client reading the raw document, which treats `{instanceId}` as a literal path segment.",
    "Vendor-document defect repaired in the served projection only: the pinned collection definition declares `Items` as a single `$ref` object while its sibling `NextPage` is documented as \"The URI of the next page of results, if any.\" The projection declares `Items` as an array of the pinned item schema; `sources/` is unchanged.",
    "Concur's report/entry approval workflow, and every other Concur product surface, declares no operation in these documents and is therefore not modeled rather than faked."
  ]
}

Provides access to expense report data for individual users or across an entire company. Supports creating report headers, retrieving reports with rich filtering by approval status, payment status, and date ranges, and updating existing reports. Suited for ERP integrations and travel management tools that need to read or manage expense reports within the SAP Concur platform.

Servers

[]

Authentication schemes

{}

Each operation lists its security requirements. An empty security array permits an unauthenticated request. Use the scheme and headers declared for the selected contract.

Operations

GET /expense/reports

Gets all reports

Returns all reports owned by the user based on the search criteria. Executable core. Requests are narrowed to the published parameters listed here (exact-value filters, no wildcards; `YYYY-MM-DD` date bounds; `limit` 1-100) and to the declared request properties. The `Items` array shape is the served repair of the pinned document's own cursor inconsistency. The PurpleSuite instance key stands in for a Concur OAuth access token on the vendor's `Authorization: Bearer` transport; no token-exchange operation is pinned in this document.

Authentication

[
  {
    "OAuth2": []
  }
]

Request, responses and operation details

{
  "tags": [
    "Resources"
  ],
  "summary": "Gets all reports",
  "description": "Returns all reports owned by the user based on the search criteria.\n\nExecutable core. Requests are narrowed to the published parameters listed here (exact-value filters, no wildcards; `YYYY-MM-DD` date bounds; `limit` 1-100) and to the declared request properties. The `Items` array shape is the served repair of the pinned document's own cursor inconsistency. The PurpleSuite instance key stands in for a Concur OAuth access token on the vendor's `Authorization: Bearer` transport; no token-exchange operation is pinned in this document.",
  "parameters": [
    {
      "name": "offset",
      "in": "query",
      "description": "Starting page offset",
      "required": false,
      "type": "string",
      "maxLength": 256,
      "pattern": "^[A-Za-z0-9_.:-]*$"
    },
    {
      "name": "limit",
      "in": "query",
      "description": "Number of records to return (default 25)",
      "required": false,
      "type": "integer",
      "format": "int32",
      "minimum": 1,
      "maximum": 100,
      "default": 25
    },
    {
      "name": "user",
      "in": "query",
      "description": "Optional. The login ID of the report owner(s) to use when searching for reports. If the value is set to LoginID, reports for the report owner with this login ID value are returned. If the value is set to ALL, reports for all report owners are returned. If this parameter is not specified, reports for the OAuth Consumer are returned. The access token owner (OAuth Consumer) must have the Web Services Admin role to use this parameter.",
      "required": false,
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[^*%]*$"
    },
    {
      "name": "approvalStatusCode",
      "in": "query",
      "description": "The status code for the Approval Status. The values can include Concur Expense standard codes or custom codes. The Concur Expense standard code values are: A_AAFH - Report submission triggered an anomaly and fraud check; A_ACCO - Report is pending reviews; A_APPR - Report has been approved; A_EXTV - Report is pending external validation; A_FILE - Report has been submitted; A_NOTF - Report has not been submitted; A_PBDG - Report approval is pending Budget approval; A_PECO - Report approval is pending Cost object approval; A_PEND - Report is pending manager approval; A_PVAL - Report is pending prepayment validation; A_RESU - Report needs to be resubmitted; A_RHLD - Report submission is pending receipt images; A_TEXP - Report expired in approval queue. For custom codes, contact Concur Developer Support.",
      "required": false,
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[^*%]*$"
    },
    {
      "name": "paymentStatusCode",
      "in": "query",
      "description": "The payment status code for the report. The values can include Concur Expense standard codes or custom codes. The Concur Expense standard code values are: P_HOLD - Report payment is on hold; P_NOTP - Report has not been paid; P_PAID - Report has been paid; P_PAYC - Payment is confirmed. Some or all of the report expenses have been paid; P_PROC - Report is in process to be paid. For custom codes, contact Concur Developer Support.",
      "required": false,
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[^*%]*$"
    },
    {
      "name": "currencyCode",
      "in": "query",
      "description": "The 3-letter ISO 4217 currency code for the report currency. Example: USD.",
      "required": false,
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[^*%]*$"
    },
    {
      "name": "approverLoginID",
      "in": "query",
      "description": "The login ID for the report approver that is the current approver assigned to the report.",
      "required": false,
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[^*%]*$"
    },
    {
      "name": "countryCode",
      "in": "query",
      "description": "The report country. Maximum 2 characters. Format: The ISO 3166-1 alpha-2 country code. Example: United States is US.",
      "required": false,
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[^*%]*$"
    },
    {
      "name": "createDateBefore",
      "in": "query",
      "description": "The report create date is before this date.Format: YYYY-MM-DD",
      "required": false,
      "type": "string",
      "format": "date-time",
      "maxLength": 10,
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    {
      "name": "createDateAfter",
      "in": "query",
      "description": "The report create date is after this date.Format: YYYY-MM-DD",
      "required": false,
      "type": "string",
      "format": "date-time",
      "maxLength": 10,
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    {
      "name": "submitDateBefore",
      "in": "query",
      "description": "The report submit date is before this date.Format: YYYY-MM-DD",
      "required": false,
      "type": "string",
      "format": "date-time",
      "maxLength": 10,
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    {
      "name": "submitDateAfter",
      "in": "query",
      "description": "The report submit date is after this date.Format: YYYY-MM-DD",
      "required": false,
      "type": "string",
      "format": "date-time",
      "maxLength": 10,
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    {
      "name": "modifiedDateBefore",
      "in": "query",
      "description": "The report modified date is before this date.Format: YYYY-MM-DD",
      "required": false,
      "type": "string",
      "format": "date-time",
      "maxLength": 10,
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    {
      "name": "modifiedDateAfter",
      "in": "query",
      "description": "The report modified date is after this date.Format: YYYY-MM-DD",
      "required": false,
      "type": "string",
      "format": "date-time",
      "maxLength": 10,
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    }
  ],
  "responses": {
    "200": {
      "description": "Success",
      "schema": {
        "$ref": "#/definitions/ReportCollection"
      }
    }
  },
  "operationId": "get_expense_reports",
  "x-purplesuite-classification": "modeled-core"
}

POST /expense/reports

Create a new report

Create an expense report with the supplied data. Executable core. Requests are narrowed to the published parameters listed here (exact-value filters, no wildcards; `YYYY-MM-DD` date bounds; `limit` 1-100) and to the declared request properties. The `Items` array shape is the served repair of the pinned document's own cursor inconsistency. The PurpleSuite instance key stands in for a Concur OAuth access token on the vendor's `Authorization: Bearer` transport; no token-exchange operation is pinned in this document.

Authentication

[
  {
    "OAuth2": []
  }
]

Request, responses and operation details

{
  "tags": [
    "Resources"
  ],
  "summary": "Create a new report",
  "description": "Create an expense report with the supplied data.\n\nExecutable core. Requests are narrowed to the published parameters listed here (exact-value filters, no wildcards; `YYYY-MM-DD` date bounds; `limit` 1-100) and to the declared request properties. The `Items` array shape is the served repair of the pinned document's own cursor inconsistency. The PurpleSuite instance key stands in for a Concur OAuth access token on the vendor's `Authorization: Bearer` transport; no token-exchange operation is pinned in this document.",
  "parameters": [
    {
      "name": "content",
      "in": "body",
      "description": "Report object to create",
      "required": true,
      "schema": {
        "$ref": "#/definitions/ReportPost"
      }
    },
    {
      "name": "user",
      "in": "query",
      "description": "Optional. The login ID for the Report Owner.",
      "required": false,
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[^*%]*$"
    }
  ],
  "responses": {
    "200": {
      "description": "Success",
      "schema": {
        "$ref": "#/definitions/CreateResponse"
      }
    },
    "400": {
      "description": "Bad Request",
      "schema": {
        "$ref": "#/definitions/Void"
      }
    }
  },
  "operationId": "post_expense_reports",
  "x-purplesuite-classification": "modeled-core"
}

GET /expense/reports/{id}

Gets a single report

Returns the specified report. Executable core. Requests are narrowed to the published parameters listed here (exact-value filters, no wildcards; `YYYY-MM-DD` date bounds; `limit` 1-100) and to the declared request properties. The `Items` array shape is the served repair of the pinned document's own cursor inconsistency. The PurpleSuite instance key stands in for a Concur OAuth access token on the vendor's `Authorization: Bearer` transport; no token-exchange operation is pinned in this document.

Authentication

[
  {
    "OAuth2": []
  }
]

Request, responses and operation details

{
  "tags": [
    "Resources"
  ],
  "summary": "Gets a single report",
  "description": "Returns the specified report.\n\nExecutable core. Requests are narrowed to the published parameters listed here (exact-value filters, no wildcards; `YYYY-MM-DD` date bounds; `limit` 1-100) and to the declared request properties. The `Items` array shape is the served repair of the pinned document's own cursor inconsistency. The PurpleSuite instance key stands in for a Concur OAuth access token on the vendor's `Authorization: Bearer` transport; no token-exchange operation is pinned in this document.",
  "parameters": [
    {
      "name": "id",
      "in": "path",
      "description": "Report ID",
      "required": true,
      "type": "string"
    },
    {
      "name": "user",
      "in": "query",
      "description": "Optional. The login ID of the report owner(s) to use when searching for reports. If the value is set to LoginID, reports for the report owner with this login ID value are returned. If the value is set to ALL, reports for all report owners are returned. If this parameter is not specified, reports for the OAuth Consumer are returned. The access token owner (OAuth Consumer) must have the Web Services Admin role to use this parameter.",
      "required": false,
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[^*%]*$"
    }
  ],
  "responses": {
    "200": {
      "description": "Success",
      "schema": {
        "$ref": "#/definitions/ReportGet"
      }
    }
  },
  "operationId": "get_expense_reports_id",
  "x-purplesuite-classification": "modeled-core"
}

PUT /expense/reports/{id}

Update report

Updates the report specified in the URL. Only the provided fields will be updated, missing fields will not be altered. Executable core. Requests are narrowed to the published parameters listed here (exact-value filters, no wildcards; `YYYY-MM-DD` date bounds; `limit` 1-100) and to the declared request properties. The `Items` array shape is the served repair of the pinned document's own cursor inconsistency. The PurpleSuite instance key stands in for a Concur OAuth access token on the vendor's `Authorization: Bearer` transport; no token-exchange operation is pinned in this document.

Authentication

[
  {
    "OAuth2": []
  }
]

Request, responses and operation details

{
  "tags": [
    "Resources"
  ],
  "summary": "Update report",
  "description": "Updates the report specified in the URL. Only the provided fields will be updated, missing fields will not be altered.\n\nExecutable core. Requests are narrowed to the published parameters listed here (exact-value filters, no wildcards; `YYYY-MM-DD` date bounds; `limit` 1-100) and to the declared request properties. The `Items` array shape is the served repair of the pinned document's own cursor inconsistency. The PurpleSuite instance key stands in for a Concur OAuth access token on the vendor's `Authorization: Bearer` transport; no token-exchange operation is pinned in this document.",
  "parameters": [
    {
      "name": "id",
      "in": "path",
      "description": "The unique identifier for the report.",
      "required": true,
      "type": "string"
    },
    {
      "name": "content",
      "in": "body",
      "description": "The report object to update",
      "required": true,
      "schema": {
        "$ref": "#/definitions/ReportPut"
      }
    },
    {
      "name": "user",
      "in": "query",
      "description": "Optional. The login ID for the Report Owner.",
      "required": false,
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^[^*%]*$"
    }
  ],
  "responses": {
    "200": {
      "description": "Success",
      "schema": {
        "$ref": "#/definitions/Void"
      }
    },
    "400": {
      "description": "Bad Request",
      "schema": {
        "$ref": "#/definitions/Void"
      }
    }
  },
  "operationId": "put_expense_reports_id",
  "x-purplesuite-classification": "modeled-core"
}

Schemas and reusable components

Document metadata and extensions

{
  "x-sap-shortText": "Retrieves, creates, and updates expense reports for users or companies",
  "swagger": "2.0",
  "basePath": "/api/purple-suite/{instanceId}/contracts/expense/concur",
  "produces": [
    "application/json",
    "application/xml"
  ],
  "consumes": [
    "application/json",
    "application/xml"
  ],
  "securityDefinitions": {
    "OAuth2": {
      "type": "oauth2",
      "description": "To use this API, you need to get OAuth client credentials (client ID, secret, and geolocation) from SAP Concur, and be authorized to use the relevant scope. Refer to the <a href=\"https://developer.concur.com/api-reference/authentication/getting-started.html\">full authentication inFormation</a> for more inFormation.",
      "tokenUrl": "https://us.api.concursolutions.com/oauth2/v0",
      "flow": "application"
    }
  },
  "security": [
    {
      "OAuth2": []
    }
  ],
  "info": {
    "title": "SAP Concur Expense Reports v3.0 — PurpleSuite executable core",
    "description": "Provides access to expense report data for individual users or across an entire company. Supports creating report headers, retrieving reports with rich filtering by approval status, payment status, and date ranges, and updating existing reports. Suited for ERP integrations and travel management tools that need to read or manage expense reports within the SAP Concur platform.",
    "version": "3.0",
    "x-purplesuite-contract": {
      "system": "expense",
      "paint": "concur",
      "profileId": "concur-expense-reports-v3",
      "revision": "v3.0; SAP-docs/preview.developer.concur.com @ main, src/api-explorer/v3-0 Swagger 2.0 set",
      "vendorBaseUrl": "https://www.concursolutions.com/api/v3.0",
      "documentScope": "full",
      "runtimeFidelity": "modeled",
      "operations": 4,
      "boundaries": [
        "Swagger 2.0 `basePath` has no variable templating, so the `{instanceId}` in this document's basePath is a literal brace pair. The PurpleSuite reference viewer overrides it with a templated server, so try-it-out resolves a real instance; a strict Swagger 2.0 client reading the raw document must substitute the instance id itself.",
        "`securityDefinitions` is the vendor's OAuth2 client-credentials declaration, verbatim. PurpleSuite accepts the instance key as the bearer token on that same transport; the vendor token endpoint is not pinned in this document and no token-exchange route is mounted.",
        "Concur's report and entry approval workflow (submit, approve, send back, recall) declares no operation in these three documents, so none is modeled. The same is true of Itemizations, Attendees, Allocations, Quick Expenses, Payment Batches, Expense Group Configurations, Receipt Images and the Identity v4 API, which are separate Concur products.",
        "An unspecified `user` means \"the OAuth Consumer\" in the vendor document. There is no OAuth consumer here: on a list operation an unspecified `user` returns every owner in the instance (equivalent to `user=ALL`), and on a write it resolves to the instance's service persona, the first person in the shared roster."
      ]
    }
  },
  "tags": [
    {
      "name": "Resources",
      "description": ""
    }
  ],
  "definitions": {
    "CreateResponse": {
      "properties": {
        "ID": {
          "type": "string"
        },
        "URI": {
          "type": "string"
        }
      }
    },
    "CustomField": {
      "properties": {
        "Code": {
          "type": "string",
          "description": "For list fields, this is the list item code."
        },
        "ListItemID": {
          "type": "string",
          "description": "For list fields, this is the list item ID."
        },
        "Type": {
          "type": "string",
          "description": "The custom field type. Supported values: Amount, Boolean, ConnectedList, Date, Integer, List, Number, Text"
        },
        "Value": {
          "type": "string",
          "description": "The value in the Org Unit or Custom field. For list fields, this is the name of the list item.  Maximum length: 48 characters"
        }
      }
    },
    "ReportCollection": {
      "properties": {
        "Items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ReportGet"
          }
        },
        "NextPage": {
          "type": "string",
          "description": "The URI of the next page of results, if any."
        }
      },
      "type": "object"
    },
    "ReportGet": {
      "properties": {
        "AmountDueCompanyCard": {
          "type": "number",
          "format": "double",
          "description": "The total amount due to the company card for the report. Maximum 23 characters."
        },
        "AmountDueEmployee": {
          "type": "number",
          "format": "double",
          "description": "The total amount due to the employee for the report. Maximum 23 characters."
        },
        "ApprovalStatusCode": {
          "type": "string",
          "description": "The approval status code for the report."
        },
        "ApprovalStatusName": {
          "type": "string",
          "description": "The report's approval status."
        },
        "ApproverLoginID": {
          "type": "string",
          "description": "The Login ID of the report owner's expense approver."
        },
        "ApproverName": {
          "type": "string",
          "description": "The name of the report owner's expense approver."
        },
        "Country": {
          "type": "string",
          "description": "The report country. Maximum 2 characters. Format: The ISO 3166-1 alpha-2 country code. Example: United States is US."
        },
        "CountrySubdivision": {
          "type": "string",
          "description": "The report country subdivision.  Format: ISO 3166-2:2007 country subdivision."
        },
        "CreateDate": {
          "type": "string",
          "format": "date-time",
          "description": "The date the report was created."
        },
        "CurrencyCode": {
          "type": "string",
          "description": "The 3-letter ISO 4217 currency code for the expense report currency. Examples: USD - US dollars; BRL - Brazilian real; CAD - Canadian dollar; CHF - Swiss franc; EUR - Euro; GBO - Pound sterling; HKD - Hong Kong dollar; INR - Indian rupee; MXN - Mexican peso; NOK - Norwegian krone; SEK - Swedish krona."
        },
        "Custom1": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom10": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom11": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom12": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom13": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom14": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom15": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom16": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom17": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom18": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom19": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom2": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom20": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom3": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom4": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom5": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom6": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom7": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom8": {
          "$ref": "#/definitions/CustomField"
        },
        "Custom9": {
          "$ref": "#/definitions/CustomField"
        },
        "EverSentBack": {
          "type": "boolean",
          "description": "Whether the report has ever been sent back to the employee. Format: Y/N"
        },
        "HasException": {
          "type": "boolean",
          "description": "Whether the report has exceptions. Format: Y/N "
        },
        "ID": {
          "type": "string",
          "description": "The unique identifier of the resource."
        },
        "LastComment": {
          "type": "string",
          "description": "The text of the most recent comment on the report."
        },
        "LastModifiedDate": {
          "type": "string",
          "format": "date-time",
          "description": "The date the report header was last modified."
        },
        "LedgerName": {
          "type": "string",
          "description": "The name of the expense report ledger. Maximum 20 characters."
        },
        "Name": {
          "type": "string",
          "description": "The name of the report."
        },
        "OrgUnit1": {
          "$ref": "#/definitions/CustomField"
        },
        "OrgUnit2": {
          "$ref": "#/definitions/CustomField"
        },
        "OrgUnit3": {
          "$ref": "#/definitions/CustomField"
        },
        "OrgUnit4": {
          "$ref": "#/definitions/CustomField"
        },
        "OrgUnit5": {
          "$ref": "#/definitions/CustomField"
        },
        "OrgUnit6": {
          "$ref": "#/definitions/CustomField"
        },
        "OwnerLoginID": {
          "type": "string",
          "description": "The Login ID of the user this report belongs to."
        },
        "OwnerName": {
          "type": "string",
          "description": "The name of the expense report owner."
        },
        "PaidDate": {
          "type": "string",
          "format": "date-time",
          "description": "The date when all journal entries in the report were integrated with or extracted to the financial system."
        },
        "PaymentStatusCode": {
          "type": "string",
          "description": "The code for the payment status of the report."
        },
        "PaymentStatusName": {
          "type": "string",
          "description": "The report's payment status, in the OAuth consumer's language."
        },
        "PersonalAmount": {
          "type": "number",
          "format": "double",
          "description": "The total amount of expenses marked as personal. Maximum 23 characters."
        },
        "PolicyID": {
          "type": "string",
          "description": "The unique identifier of the policy that applies to this report. Maximum 64 characters."
        },
        "ProcessingPaymentDate": {
          "type": "string",
          "format": "date-time",
          "description": "The date that the report completed all approvals and was ready to be extracted for payment."
        },
        "ReceiptsReceived": {
          "type": "boolean",
          "description": "If Y, then this report has its receipt receipt confirmed by the Expense Processor. Format: Y/N"
        },
        "SubmitDate": {
          "type": "string",
          "format": "date-time",
          "description": "The date the report was submitted."
        },
        "Total": {
          "type": "number",
          "format": "double",
          "description": "The total amount of the report."
        },
        "TotalApprovedAmount": {
          "type": "number",
          "format": "double",
          "description": "The total amount of approved expenses in the report. Maximum 23 characters."
        },
        "TotalClaimedAmount": {
          "type": "number",
          "format": "double",
          "description": "The total amount of all non-personal expenses in the report. Maximum 23 characters."
        },
        "URI": {
          "type": "string",
          "description": "The URI to the resource."
        },
        "UserDefinedDate": {
          "type": "string",
          "format": "date-time",
          "description": "The date of the report assigned by the user."
        },
        "WorkflowActionUrl": {
          "type": "string",
          "description": "The URL to post a workflow action to the report using the \"Post Report Workflow Action\" function."
        }
      }
    },
    "ReportPost": {
      "properties": {
        "Comment": {
          "type": "string",
          "description": "The report header comment. Maximum length: 500."
        },
        "Custom1": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom10": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom11": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom12": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom13": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom14": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom15": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom16": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom17": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom18": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom19": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom2": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom20": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom3": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom4": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom5": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom6": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom7": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom8": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom9": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Name": {
          "type": "string",
          "description": "The name of the report."
        },
        "OrgUnit1": {
          "type": "string",
          "description": "The details from the Org Unit fields. These may not have data, depending on configuration."
        },
        "OrgUnit2": {
          "type": "string",
          "description": "The details from the Org Unit fields. These may not have data, depending on configuration."
        },
        "OrgUnit3": {
          "type": "string",
          "description": "The details from the Org Unit fields. These may not have data, depending on configuration."
        },
        "OrgUnit4": {
          "type": "string",
          "description": "The details from the Org Unit fields. These may not have data, depending on configuration."
        },
        "OrgUnit5": {
          "type": "string",
          "description": "The details from the Org Unit fields. These may not have data, depending on configuration."
        },
        "OrgUnit6": {
          "type": "string",
          "description": "The details from the Org Unit fields. These may not have data, depending on configuration."
        },
        "PolicyID": {
          "type": "string",
          "description": "The unique identifier for the policy. This is the protected Policy Key"
        },
        "Purpose": {
          "type": "string",
          "description": "The business purpose of the report. Maximum length: 500."
        },
        "UserDefinedDate": {
          "type": "string",
          "format": "date-time",
          "description": "The date of the report assigned by the user."
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "ReportPut": {
      "properties": {
        "Comment": {
          "type": "string",
          "description": "The report header comment. Maximum length: 500."
        },
        "Custom1": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom10": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom11": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom12": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom13": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom14": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom15": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom16": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom17": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom18": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom19": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom2": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom20": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom3": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom4": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom5": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom6": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom7": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom8": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Custom9": {
          "type": "string",
          "description": "The details from the Custom fields. These may not have data, depending on configuration."
        },
        "Name": {
          "type": "string",
          "description": "The name of the report."
        },
        "OrgUnit1": {
          "type": "string",
          "description": "The details from the Org Unit fields. These may not have data, depending on configuration."
        },
        "OrgUnit2": {
          "type": "string",
          "description": "The details from the Org Unit fields. These may not have data, depending on configuration."
        },
        "OrgUnit3": {
          "type": "string",
          "description": "The details from the Org Unit fields. These may not have data, depending on configuration."
        },
        "OrgUnit4": {
          "type": "string",
          "description": "The details from the Org Unit fields. These may not have data, depending on configuration."
        },
        "OrgUnit5": {
          "type": "string",
          "description": "The details from the Org Unit fields. These may not have data, depending on configuration."
        },
        "OrgUnit6": {
          "type": "string",
          "description": "The details from the Org Unit fields. These may not have data, depending on configuration."
        },
        "PolicyID": {
          "type": "string",
          "description": "The unique identifier for the policy. This is the protected Policy Key"
        },
        "Purpose": {
          "type": "string",
          "description": "The business purpose of the report. Maximum length: 500."
        },
        "UserDefinedDate": {
          "type": "string",
          "format": "date-time",
          "description": "The date of the report assigned by the user."
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "Void": {
      "properties": {}
    }
  }
}
Interactive API explorer (requires JavaScript)