From 6f8b574af0a94984a9d6ec9d8085cd9d38f5f0fb Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Wed, 6 May 2026 19:21:15 -0700 Subject: [PATCH] fix(sap-concur): correct Cash Advance v4.1 paths, add SCIM filter param - Update Cash Advance create/get/issue tools from /cashadvance/v4/ to /cashadvance/v4.1/ to match the live API - Add filter query param to list_users (SCIM v4.1 supports filtering by userName, employeeNumber, externalId) - Regenerate docs MDX Co-Authored-By: Claude Opus 4.7 --- .../docs/content/docs/en/tools/sap_concur.mdx | 19 ++++++++++--------- .../integrations/data/integrations.json | 10 +++++----- .../tools/sap_concur/create_cash_advance.ts | 4 ++-- apps/sim/tools/sap_concur/get_cash_advance.ts | 4 ++-- .../tools/sap_concur/issue_cash_advance.ts | 4 ++-- apps/sim/tools/sap_concur/list_users.ts | 8 ++++++++ apps/sim/tools/sap_concur/types.ts | 1 + 7 files changed, 30 insertions(+), 20 deletions(-) diff --git a/apps/docs/content/docs/en/tools/sap_concur.mdx b/apps/docs/content/docs/en/tools/sap_concur.mdx index 301c14d937..9abd089187 100644 --- a/apps/docs/content/docs/en/tools/sap_concur.mdx +++ b/apps/docs/content/docs/en/tools/sap_concur.mdx @@ -67,7 +67,7 @@ Approve an expense report as a manager (PATCH /expensereports/v4/reports/\{repor ### `sap_concur_associate_attendees` -Associate attendees with an expense (POST /expensereports/v4/users/\{userId\}/context/TRAVELER/reports/\{reportId\}/expenses/\{expenseId\}/attendees). +Associate attendees with an expense (POST /expensereports/v4/users/\{userId\}/context/\{contextType\}/reports/\{reportId\}/expenses/\{expenseId\}/attendees). #### Input @@ -96,7 +96,7 @@ Associate attendees with an expense (POST /expensereports/v4/users/\{userId\}/co ### `sap_concur_create_cash_advance` -Create a cash advance (POST /cashadvance/v4/cashadvances). +Create a cash advance (POST /cashadvance/v4.1/cashadvances). #### Input @@ -686,7 +686,7 @@ Get a budget item header by ID (GET /budget/v4/budgetItemHeader/\{id\}). ### `sap_concur_get_cash_advance` -Get a cash advance (GET /cashadvance/v4/cashadvances/\{cashadvanceId\}). +Get a cash advance (GET /cashadvance/v4.1/cashadvances/\{cashAdvanceId\}). #### Input @@ -988,7 +988,7 @@ Get expense itemizations (GET /expensereports/v4/users/\{userId\}/context/\{cont | `password` | string | No | Password \(only for password grant\) | | `companyUuid` | string | No | Company UUID for multi-company access tokens | | `userId` | string | Yes | Concur user UUID | -| `contextType` | string | Yes | Access context \(TRAVELER per the v4 spec\) | +| `contextType` | string | Yes | Access context: TRAVELER, MANAGER, or PROXY | | `reportId` | string | Yes | Expense report ID | | `expenseId` | string | Yes | Expense ID | @@ -1426,7 +1426,7 @@ Get a single user by UUID (GET /profile/identity/v4.1/Users/\{id\}). ### `sap_concur_issue_cash_advance` -Issue a cash advance (POST /cashadvance/v4/cashadvances/\{cashadvanceId\}/issue). +Issue a cash advance (POST /cashadvance/v4.1/cashadvances/\{cashAdvanceId\}/issue). #### Input @@ -1651,7 +1651,7 @@ List expenses on a report (GET /expensereports/v4/users/\{userId\}/context/\{con | `password` | string | No | Password \(only for password grant\) | | `companyUuid` | string | No | Company UUID for multi-company access tokens | | `userId` | string | Yes | Concur user UUID | -| `contextType` | string | Yes | Access context \(TRAVELER per the v4 spec\) | +| `contextType` | string | Yes | Access context: TRAVELER, MANAGER, or PROXY | | `reportId` | string | Yes | Expense report ID | #### Output @@ -2081,10 +2081,10 @@ List travel profile summaries (GET /api/travelprofile/v2.0/summary). LastModifie | `username` | string | No | Username \(only for password grant\) | | `password` | string | No | Password \(only for password grant\) | | `companyUuid` | string | No | Company UUID for multi-company access tokens | -| `lastModifiedDate` | string | Yes | Required ISO 8601 date \(YYYY-MM-DD or full timestamp\) | +| `lastModifiedDate` | string | Yes | Required UTC datetime in YYYY-MM-DDThh:mm:ss format | | `page` | number | No | 1-based page number | | `itemsPerPage` | number | No | Items per page \(max 200\) | -| `active` | string | No | Status filter \(sent as Status query param\): "Active" or "Inactive". Omit for all. | +| `active` | string | No | Active filter \(sent as Active query param\): "1" \(active\) or "0" \(inactive\). Omit for all. | | `travelConfigs` | string | No | Comma-separated travel configuration ids | #### Output @@ -2238,6 +2238,7 @@ List Concur user identities (GET /profile/identity/v4.1/Users). | `companyUuid` | string | No | Company UUID for multi-company access tokens | | `count` | number | No | Max number of users to return \(default 100, max 1000\) | | `cursor` | string | No | SCIM v4.1 pagination cursor returned by a prior call | +| `filter` | string | No | SCIM filter expression. Supported attributes: userName, employeeNumber, externalId. | | `attributes` | string | No | Comma-separated list of attributes to include in the response | | `excludedAttributes` | string | No | Comma-separated list of attributes to exclude from the response | @@ -2318,7 +2319,7 @@ Recall a submitted expense report (PATCH /expensereports/v4/users/\{userId\}/con ### `sap_concur_remove_all_attendees` -Remove all attendees from an expense (DELETE /expensereports/v4/users/\{userId\}/context/TRAVELER/reports/\{reportId\}/expenses/\{expenseId\}/attendees). +Remove all attendees from an expense (DELETE /expensereports/v4/users/\{userId\}/context/\{contextType\}/reports/\{reportId\}/expenses/\{expenseId\}/attendees). #### Input diff --git a/apps/sim/app/(landing)/integrations/data/integrations.json b/apps/sim/app/(landing)/integrations/data/integrations.json index 84492a6464..9a1513dc6f 100644 --- a/apps/sim/app/(landing)/integrations/data/integrations.json +++ b/apps/sim/app/(landing)/integrations/data/integrations.json @@ -11570,11 +11570,11 @@ }, { "name": "Associate Attendees", - "description": "Associate attendees with an expense (POST /expensereports/v4/users/{userId}/context/TRAVELER/reports/{reportId}/expenses/{expenseId}/attendees)." + "description": "Associate attendees with an expense (POST /expensereports/v4/users/{userId}/context/{contextType}/reports/{reportId}/expenses/{expenseId}/attendees)." }, { "name": "Remove All Attendees", - "description": "Remove all attendees from an expense (DELETE /expensereports/v4/users/{userId}/context/TRAVELER/reports/{reportId}/expenses/{expenseId}/attendees)." + "description": "Remove all attendees from an expense (DELETE /expensereports/v4/users/{userId}/context/{contextType}/reports/{reportId}/expenses/{expenseId}/attendees)." }, { "name": "List Report Comments", @@ -11666,15 +11666,15 @@ }, { "name": "Create Cash Advance", - "description": "Create a cash advance (POST /cashadvance/v4/cashadvances)." + "description": "Create a cash advance (POST /cashadvance/v4.1/cashadvances)." }, { "name": "Get Cash Advance", - "description": "Get a cash advance (GET /cashadvance/v4/cashadvances/{cashadvanceId})." + "description": "Get a cash advance (GET /cashadvance/v4.1/cashadvances/{cashAdvanceId})." }, { "name": "Issue Cash Advance", - "description": "Issue a cash advance (POST /cashadvance/v4/cashadvances/{cashadvanceId}/issue)." + "description": "Issue a cash advance (POST /cashadvance/v4.1/cashadvances/{cashAdvanceId}/issue)." }, { "name": "List Itineraries (Trips)", diff --git a/apps/sim/tools/sap_concur/create_cash_advance.ts b/apps/sim/tools/sap_concur/create_cash_advance.ts index 6d507c2ee0..7297eb214c 100644 --- a/apps/sim/tools/sap_concur/create_cash_advance.ts +++ b/apps/sim/tools/sap_concur/create_cash_advance.ts @@ -9,7 +9,7 @@ import type { ToolConfig } from '@/tools/types' export const createCashAdvanceTool: ToolConfig = { id: 'sap_concur_create_cash_advance', name: 'SAP Concur Create Cash Advance', - description: 'Create a cash advance (POST /cashadvance/v4/cashadvances).', + description: 'Create a cash advance (POST /cashadvance/v4.1/cashadvances).', version: '1.0.0', params: { datacenter: { @@ -67,7 +67,7 @@ export const createCashAdvanceTool: ToolConfig ({ 'Content-Type': 'application/json' }), body: (params) => ({ ...baseProxyBody(params), - path: `/cashadvance/v4/cashadvances`, + path: `/cashadvance/v4.1/cashadvances`, method: 'POST', body: params.body, }), diff --git a/apps/sim/tools/sap_concur/get_cash_advance.ts b/apps/sim/tools/sap_concur/get_cash_advance.ts index 9ef4095859..ace1a6315f 100644 --- a/apps/sim/tools/sap_concur/get_cash_advance.ts +++ b/apps/sim/tools/sap_concur/get_cash_advance.ts @@ -10,7 +10,7 @@ import type { ToolConfig } from '@/tools/types' export const getCashAdvanceTool: ToolConfig = { id: 'sap_concur_get_cash_advance', name: 'SAP Concur Get Cash Advance', - description: 'Get a cash advance (GET /cashadvance/v4/cashadvances/{cashadvanceId}).', + description: 'Get a cash advance (GET /cashadvance/v4.1/cashadvances/{cashAdvanceId}).', version: '1.0.0', params: { datacenter: { @@ -70,7 +70,7 @@ export const getCashAdvanceTool: ToolConfig = { id: 'sap_concur_issue_cash_advance', name: 'SAP Concur Issue Cash Advance', - description: 'Issue a cash advance (POST /cashadvance/v4/cashadvances/{cashadvanceId}/issue).', + description: 'Issue a cash advance (POST /cashadvance/v4.1/cashadvances/{cashAdvanceId}/issue).', version: '1.0.0', params: { datacenter: { @@ -76,7 +76,7 @@ export const issueCashAdvanceTool: ToolConfig visibility: 'user-or-llm', description: 'SCIM v4.1 pagination cursor returned by a prior call', }, + filter: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'SCIM filter expression. Supported attributes: userName, employeeNumber, externalId.', + }, attributes: { type: 'string', required: false, @@ -92,6 +99,7 @@ export const listUsersTool: ToolConfig query: buildListQuery({ count: params.count, cursor: params.cursor, + filter: params.filter, attributes: params.attributes, excludedAttributes: params.excludedAttributes, }), diff --git a/apps/sim/tools/sap_concur/types.ts b/apps/sim/tools/sap_concur/types.ts index 5d667af026..426e02ec30 100644 --- a/apps/sim/tools/sap_concur/types.ts +++ b/apps/sim/tools/sap_concur/types.ts @@ -327,6 +327,7 @@ export interface GetItineraryParams extends SapConcurBaseParams { export interface ListUsersParams extends SapConcurBaseParams { count?: number cursor?: string + filter?: string attributes?: string excludedAttributes?: string }