| Status | |
|---|---|
| Owner | |
| Stakeholders | The business stakeholders involved in making, reviewing, and endorsing this decision. Type @ to mention people by name |
| Jira Request ID | |
| Jira Development ID |
| Parameter | Value |
|---|---|
| Application System (Source) | Keelvar |
| Application System ( Target) | Ariba Guided Sourcing |
| Business Process Reference | 03.03.03.01. Manage Sourcing Projects |
Ariba Guided Sourcing is used as the single entry point for all Sourcing Events. If the users can select Keelvar template to create an Event in Ariba Guided Sourcing, the details of the Event are replicated to Keelvar and any change in Keelvar reflects the status of the Event in Ariba Guided Sourcing. When the user awards one or multiple Bidders or Suppliers in Keelvar, the awarded Bid(s) and Keelvar Bid Sheet must be sent back to Ariba Guided Sourcing.
The scope of this Functional Specification is to describe the interface between Keelvar and Ariba Guided Sourcing. When an award scenario and awarded bid sheet(s) are created in Keelvar and the event is closed in Keelvar, a Webhook in Keelvar will notify SCPI about the award. After that, SCPI will send the award scenario and awarded bid sheet(s) back to the event in Ariba Guided Sourcing. If any new Bidder is added in Keelvar, the new Bidder and Bidder Contact must also be created in Ariba Guided Sourcing.

Step | Description | Comment |
|---|---|---|
1 | User awards one or more suppliers or bidders in Keelvar. | |
2 | The user closes the Event in Keelvar. | |
3 | A webhook is triggered from Keelvar to SCPI notifying the change along with the Ariba Event ID | |
4 | SCPI extracts Sourcing Event Feed and Award Feed details from Keelvar Export API | |
5 | SCPI extracts Keelvar bid sheet and converts it into a CSV file | |
6 | SCPI add the New Bidder and Bidder contact to Ariba Guided Sourcing | applicable only if a new bidder is awarded |
7 | SCPI sets the Ariba Guided Souring Event status to draft to add the Keelvar Bid Sheet Item and New Bidder | New Bidder is added only if applicable |
8 | SCPI sets the Ariba Guided Souring Event status to Publish |
|
9 | SCPI sends the surrogate bid(s) to Ariba Guided Sourcing along with Bid Sheet |
|
10 | SCPI sets the Ariba Guided Souring Event status to Pending Selection |
|
11 | SCPI creates an Award Scenario with the above sent Bid(s) in Ariba Guided Sourcing Event |
|
12 | User logs into Ariba and Awards the bid and creates contract. |
|
The following are the Security and Authorization considerations for this interface:
In order to activate the SAP Ariba API for Event Management, following steps need to be completed:
In order to activate Keelvar API, following steps need to be completed:
Ariba Guided Sourcing configuration details are described as under:
Supplementary | Test | Production | |
Ariba Technical User | R_BTP_ARB_ADMIN | ||
Ariba Realm ID | 745255310-SS-T | 745255310-T | 745255310 |
OAuth URL | |||
Request URL |
Keelvar configuration is described below:
Request URL |
A webhook for Sourcing Event Feed must be created in Keelvar to receive of the following changes in Sourcing Event:
A request must be sent to support@keelvar.com and make a whitelist request for the domain of the SCPI system to which the HTTP notifications will be sent.
Creation of Webhook in Keelvar for Sourcing Event Feed requires sending a request as under:
curl -X POST https://my.keelvar.app/api/webhooks \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_API_KEY>' \
-d '{
"name": "Sourcing Event Feed Webhook",
"description": "Keelvar Sourcing Event Feed Webhook",
"signing_alg": "HMAC_SHA256",
"signing_key": "(Signing Key)",
"triggers": "[SOURCING_EVENTS_FEED_UPDATED]",
"url": (SCPI webhook listener URL),
}'
Keelvar will send the response with the Webhook UUID as under:
'description':'Keelvar Sourcing Event Feed Webhook',
'name':'Sourcing Event Feed Webhook',
'signing_alg':'HMAC_SHA256',
'signing_key': '(Signing Key)',
'triggers':'[SOURCING_EVENTS_FEED_UPDATED]',
'url':(SCPI webhook listener URL),
'uuid':'4a55a230-307b-4bab-ac53-e95186b88968'
Not applicable
Since sourcing event is originally initiated in SAP Ariba Guided Sourcing and integrated to Keelvar, when award scenario and awarded bid sheet are created in Keelvar, they must be automatically sent back in SAP Ariba Guided Sourcing.
Creation of API Applications in Ariba API is executed in EU tenant.
Source Structure
The following Keelvar fields will be used to provide the required information for this interface:
| Field | Description |
| tags/{name=Ariba Event ID}/value | The Ariba Event ID |
| suppliers/external_id | The user ID of the Bidder or Supplier contact |
| awards/share_awarded | The decimal value of the share awarded to the Bidder or the supplier. The range is between 0 and 1. |
| sourcing_event | The UUID of the Keelvar Sourcing Event |
Target Structure
The following Keelvar fields will be used to provide the required information for this interface:
| Field | Description |
| eventId or supplierBids/eventId | The Ariba Event ID |
| supplierId or supplierBids/invitationId | The user ID of the Bidder or Supplier contact |
| supplierBids/winningSplitValue | The decimal value of the share awarded to the Bidder or the supplier. The range is between 0 and 1. |
Mapping and Calculation
The following Mapping Table is applicable to add Keelvar Bid Sheet Item to Ariba Guided Sourcing Event:
| API or Portlet Name | Source Field | Required (Y/N) | Description | API or Portlet Name | Target Field | Required (Y/N) | Description | Rule Type | Rule Instruction |
|---|---|---|---|---|---|---|---|---|---|
| /feeds/sourcing-events | tags/{name=Ariba Event ID}/value | Y | The Ariba Event ID | events/{eventID}/items | eventID | Y | The Ariba Event ID | ||
| Static Value | Static Value = Ariba Technical User | Y | Technical User Name | events/{eventID}/items | user | Y | Technical User Name | ||
| Static Value | Static Value = ThirdPartyUser | Y | Technical User PasswordAdapter | events/{eventID}/items | PasswordAdapter | Y | Technical User PasswordAdapter | ||
| Static Value | Static Value = Realm ID | Y | The Ariba Guided Sourcing Realm ID | events/{eventID}/items | realm | Y | The Ariba Guided Sourcing Realm ID | ||
| Static Value | Static Value = Keelvar Bid Sheet | Y | The Name of the Bid Sheet item | events/{eventID}/items | title | Y | The Name of the Bid Sheet item | ||
| Static Value | Static Value = 4 | Y | The Type of the Bid Sheet item (Line Item Type) | events/{eventID}/items | itemType | Y | The Type of the Bid Sheet item (Line Item Type) | ||
| Static Value | Static Value =Award Percentage | Y | The Term name for Award Percentage | events/{eventID}/items | terms/title | Y | The Term name for Award Percentage | ||
| Static Value | Static Value = Bid | Y | The Term name for Bid | events/{eventID}/items | terms/title | Y | The Term name for Bid | ||
| Static Value | Static Value = 100 | Y | The initial value for quantity | events/{eventID}/items | terms/value/quantityValue/amount | Y | The initial value for quantity | ||
| Static Value | Static Value = P1 | Y | the unit of measure of quantity (Percentage) | events/{eventID}/items | terms/value/quantityValue/unitofMeasure | Y | the unit of measure of quantity (Percentage) | ||
| Static Value | Static Value = Keelvar Bid Sheet Attachment | Y | The Term Name for Bid Sheet attachment | events/{eventID}/items | terms/title | Y | The Term Name for Bid Sheet attachment |
The following Mapping Table is applicable to trigger a Job required to send a Surrogate Bid to Ariba Guided Sourcing Event:
| API or Portlet Name | Source Field | Required (Y/N) | Description | API or Portlet Name | Target Field | Required (Y/N) | Description | Rule Type | Rule Instruction |
|---|---|---|---|---|---|---|---|---|---|
| Static Value | Static Value = Ariba Technical User | Y | Technical User Name | jobs | user | Y | Technical User Name | ||
| Static Value | Static Value = ThirdPartyUser | Y | Technical User PasswordAdapter | jobs | PasswordAdapter | Y | Technical User PasswordAdapter | ||
| Static Value | Static Value = Realm ID | Y | The Ariba Guided Sourcing Realm ID | jobs | realm | Y | The Ariba Guided Sourcing Realm ID | ||
| Static Value | Static Value = Allowed Operation are:
| Y | The Operation which has to be done for the Surrogate Bidding | jobs | operation | Y | The Operation which has to be done for the Surrogate Bidding | ||
| /feeds/awards | tags/{name=Ariba Event ID}/value | Y | The Ariba Event ID | jobs | eventId | Y | The Ariba Event ID | ||
| /feeds/sourcing-events | suppliers/external_id | Y | Ariba Bidder Contact ID | jobs | supplierId | Y | Ariba Bidder Contact ID | ||
| Previous Request | Base64 encoded file | Y | The Exported Bid Sheet from Keelvar which has been converted into a CSV file | jobs | file | Y | The Exported Bid Sheet from Keelvar which has been converted into a CSV file | ||
| Static Value | Static Value = "1" | Y | The Item Number for the Keelvar Bid Sheet Item | jobs | itemNumber | Y | The Item Number for the Keelvar Bid Sheet Item |
The following Mapping Table is applicable to get the status of the Job required to send a Surrogate Bid to Ariba Guided Sourcing Event:
| API or Portlet Name | Source Field | Required (Y/N) | Description | API or Portlet Name | Target Field | Required (Y/N) | Description | Rule Type | Rule Instruction |
|---|---|---|---|---|---|---|---|---|---|
| Previous Request | jobId | Y | The Job ID retrieved from the previous request | jobs/{jobId} | jobId | Y | The Job ID retrieved from the previous request | ||
| Static Value | Static Value = Ariba Technical User | Y | Technical User Name | jobs/{jobId} | user | Y | Technical User Name | ||
| Static Value | Static Value = ThirdPartyUser | Y | Technical User PasswordAdapter | jobs/{jobId} | PasswordAdapter | Y | Technical User PasswordAdapter | ||
| Static Value | Static Value = Realm ID | Y | The Ariba Guided Sourcing Realm ID | jobs/{jobId} | realm | Y | The Ariba Guided Sourcing Realm ID |
The following Mapping Table is applicable to export the Surrogate Bid response file:
| API or Portlet Name | Source Field | Required (Y/N) | Description | API or Portlet Name | Target Field | Required (Y/N) | Description | Rule Type | Rule Instruction |
|---|---|---|---|---|---|---|---|---|---|
| Previous Request | jobId | Y | The Job ID retrieved from the previous request | jobs/{jobId} | jobId | Y | The Job ID retrieved from the previous request | ||
| Previous Request | fileId | Y | The File ID retrieved from the previous request | jobs/{jobId} | fileId | Y | The File ID retrieved from the previous request | ||
| Static Value | Static Value = Ariba Technical User | Y | Technical User Name | jobs/{jobId} | user | Y | Technical User Name | ||
| Static Value | Static Value = ThirdPartyUser | Y | Technical User PasswordAdapter | jobs/{jobId} | PasswordAdapter | Y | Technical User PasswordAdapter | ||
| Static Value | Static Value = Realm ID | Y | The Ariba Guided Sourcing Realm ID | jobs/{jobId} | realm | Y | The Ariba Guided Sourcing Realm ID |
The following Mapping Table is applicable to create a manual Award Scenario in Ariba Guided Sourcing Event:
| API or Portlet Name | Source Field | Required (Y/N) | Description | API or Portlet Name | Target Field | Required (Y/N) | Description | Rule Type | Rule Instruction |
|---|---|---|---|---|---|---|---|---|---|
| /feeds/awards | tags(name="Ariba Document ID")/value | Y | The Ariba Event ID | /events/{eventId}/scenarios | eventId | Y | The Ariba Event ID | ||
| Static Value | Static value = "Keelvar Scenario" | Y | Name of the Manual Scenario | /events/{eventId}/scenarios | title | Y | Name of the Manual Scenario | ||
| Static Value | Static value = "0" | Y | Scenario Type i.e Manual | /events/{eventId}/scenarios | scenarioType | Y | Scenario Type i.e Manual | ||
| Static Value | Static value = "Primary" | Y | Bid Type | /events/{eventId}/scenarios | supplierBids/bidType | Y | Bid Type | Loop | Loop for each awarded bidder in case of split bid |
| event={EventID} | itemID{title="Bid sheet from Keelvar"} | Y | The Item ID of the Bid sheet from Keelvar item | /events/{eventId}/scenarios | supplierBids/itemId | Y | The Item ID of the Bid sheet from Keelvar item | Loop | Loop for each awarded bidder in case of split bid |
| /feeds/awards | tags(name="Ariba Document ID")/value | Y | The Ariba Event ID | /events/{eventId}/scenarios | supplierBids/eventId | Y | The Ariba Event ID | Loop | Loop for each awarded bidder in case of split bid |
| /feeds/sourcing-events | suppliers/external_id | Y | Contact ID of the Bidder | /events/{eventId}/scenarios | supplierBids/invitationId | Y | Contact ID of the Bidder | Loop | Loop for each awarded bidder in case of split bid |
| Static Value | Static value = "2" | Y | Award By Quantity | /events/{eventId}/scenarios | supplierBids/winningSplitType | Y | Award By Quantity | Loop | Loop for each awarded bidder in case of split bid |
| /feeds/awards | awards/share_awarded | Y | Percentage Award | /events/{eventId}/scenarios | supplierBids/winningSplitValue | Y | Percentage Award | Loop; Multiple | Loop for each awarded bidder in case of split bid; Multiply Keelvar value with 100 |
A webhook should be triggered to complete Event closure activities which are described as under:
Trigger for Sourcing Event Feed Webhook in Keelvar
Once webhook is triggered in Keelvar, the SCPI should receive a notification as under:
{"trigger": "SOURCING_EVENTS_FEED_UPDATED",
"timestamp": "2024-11-04T11:13:56.619494Z",
"payload": {
"sourcing_event": "19e44441-81c1-11f0-b2f5-f884135dd221",
"status": "CLOSED",
"name": "My Event",
"sourcing_requests": ["c819a007-bac7-4172-eb1d-272a9933f1a2"],
"tags":[
{
"name": "Commodity",
"value": "0005 OFFICE FURNITURE"
},
{
"name": "GBU",
"value": "TS & MATERIALS"
},
{
"name": "Ariba Event ID",
"value": "Doc123456789"
}
]
}}
Then, a request has to be made to Keelvar to fetch Sourcing Event Details using the Sourcing Event UUID from the above notification as under:
curl --location 'https://test.keelvar.dev/api/feeds/sourcing-events' \
--header 'Authorization: Bearer YOUR_API_TOKEN';
The response from Keelvar should contain the Sourcing Event Details which will be used as source in subsequent process.
Sample JSON for Payload is available here:
Add Keelvar Bid Sheet to Event in Ariba Guided Sourcing
SCPI must create a payload based on the Mapping Table above to add the Bid Sheet Item to the Ariba Guided Sourcing Event.
Sample JSON for Payload is available here:
Then, a request to add Bid Sheet Item to Ariba Guided Sourcing must be made as under:
curl --location 'https://eu.openapi.ariba.com/api/sourcing-event/v2/prod//events/Doc2698789795/items?showTotal=true&inheritTerms=false&inheritCommodityAndRegion=true&removeEmptyOwnerTerms=false&realm=$realmId&user=$aribaTechnicalUser&passwordAdapter=ThirdPartyUser \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'apiKey: ARIBA_API_KEY';
--header 'Authorization: Bearer ARIBA_TOKEN';
--data ' As per Payload above'
Download the Keelvar Bid Sheet and Convert it into csv file
A request is made to retrieve Award feed from Keelvar for the Sourcing Event from the Webhook Trigger Notification as under:
curl --location 'https://test.keelvar.dev/api/feeds/awards?sourcing_event=$event_uuid' \
--header 'Authorization: Bearer Bearer API_TOKEN';
The response from Keelvar is similar to this:
Theis response must be converted into a csv file. For each object in the award feed a row-entry should be added in the csv file. The CSV file should have following columns:
Submit a Surrogate Bid to the Event in Ariba Guided Sourcing
Surrogate Bids must be submitted for each of the Bidders that have been awarded in Keelver. The processing a Surrogate Bid to Ariba is described as under. The Ariba Event ID is need for each of the following steps:
The request for Export, Import, Add Attachment and Submit Jobs must be sent in a form format. The form details for each of the above steps are provided here:
The request for Jobs to be sent as under:
curl --location 'https://eu.openapi.ariba.com/api/sourcing-event-bid/v1/prod/jobs?realm=$realmId&user=$aribaTechnicalUser&passwordAdapter=ThirdPartyUser' \
--header 'Content-Type: multipart/form-data' \
--header 'Accept: application/json' \
--header 'apiKey: ARIBA_API_KEY';
--header 'Authorization: Bearer ARIBA_TOKEN';
--form 'form Data as described above';
In response, Ariba send back the Id of the Job.
The request for Job status can be sent as under:
curl --location 'https://eu.openapi.ariba.com/api/sourcing-event-bid/v1/prod/jobs/$jobId?realm=$realmId&user=$aribaTechnicalUser&passwordAdapter=ThirdPartyUser' \
--header 'Content-Type: multipart/form-data' \
--header 'Accept: application/json' \
--header 'apiKey: ARIBA_API_KEY';
--header 'Authorization: Bearer ARIBA_TOKEN';
In response, Ariba send back the Id of the Job. It also includes the FileId if the operation of the Job request was Export.
The request to download the Ariba Bid response sheet can be sent as under:
curl --location 'https://eu.openapi.ariba.com/api/sourcing-event-bid/v1/prod/jobs/$jobId/files/$fileId?realm=$realmId&user=$aribaTechnicalUser&passwordAdapter=ThirdPartyUser' \
--header 'Content-Type: multipart/form-data' \
--header 'Accept: application/json' \
--header 'apiKey: ARIBA_API_KEY';
--header 'Authorization: Bearer ARIBA_TOKEN';
Create award scenario in Ariba Guided Sourcing
Then, the payload for Award Scenario creation must be done based on the Mapping Table above. The payload should be similar to this one:
In order to create an award scenario, a request must be sent to Ariba Event Management API as under:
curl --location 'https://eu.openapi.ariba.com/api/sourcing-event-bid/v1/prod/events/$eventId/scenarios?realm=$realmId&user=$aribaTechnicalUser&passwordAdapter=ThirdPartyUser' \
--header 'Content-Type: multipart/form-data' \
--header 'Accept: application/json' \
--header 'apiKey: ARIBA_API_KEY';
--header 'Authorization: Bearer ARIBA_TOKEN';
--data 'as per payload described above';
Not Applicable
Please describe any dependency to other interfaces, e.g. messages of interface x need to be processed before message processing of interface y can start.
Rate Limit for Ariba Surrogate Bid API - No specific API limits in place for this API but dynamic run time throttling is in effect.
Rate Limit for Ariba Event Management API - (Requests): 5/second, 80/minute, 3500/hour
Rate Limit for Keelvar api/feeds/awards - Burst (60/min), sustained (43,200/day)
Rate Limit for Keelvar api/feeds/sourcing-events - Burst (60/min), sustained (43,200/day)
Not Applicable
All requests for creation and update of sourcing event is done via delta load since last run.
The following should be monitored:
Not Applicable
Not Applicable
Not Applicable
Pagination can be done while retrieving Award Feed and Event Feed from Keelvar.
Not Applicable
Error Messages Returned by the Event Management API
| ID | Condition | Expected Results |
|---|---|---|
| 1 | Create a RFP in Ariba Guided Sourcing includes populating all required header fields and inviting suppliers/bidders into the event | Header fields of RFP are populated and suppliers/bidders are added into event |
| 2 | Publish RFP in Ariba Guided Sourcing | RFP is published in Ariba Guided Sourcing with “Published” state and open for editing RFP is integrated to Keelvar via API |
3 | Open the event linked to RFP created in Ariba | The event is opened |
4 | Create Bid sheet and Cost Calculation in Keelvar | Bid sheet and Cost Calculation are created in Keelvar |
5 | Add new bidders directly in the event in Keelvar | New bidders are added into event in Keelvar |
6 | Publish event in Keelvar | Event status is “Published” in Keelvar RFP state in Ariba Guided Sourcing is “Published”, but locked for editing |
7 | Bidders submit bid in Keelvar | Receive bid for the event in Keelvar |
8 | Create Award Scenario in Keelvar | Award Scenario is created in Keelvar |
9 | Select Award Scenario in Keelvar and award bidders (includes new added bidders in Keelvar) | Award Scenario is selected in Keelvar |
10 | Close event in Keelvar | Event status is changed to “Closed” in Keelvar |
11 | New awarded Bidder Organization and Organization User are automatically created in Ariba Guided Sourcing via API | New Bidder Organization and Organization User are created in Ariba Guided Sourcing |
12 | Awarded Bid sheet in Keelvar is automatically sent to event in Ariba Guided Sourcing as Surrogate Bid via API | Awarded Bid sheet is added for awarded suppliers/bidder in Ariba Guided Sourcing |
13 | Event status is changed to “Stop” in Ariba Guided Sourcing via API | Event is automatically stopped in Ariba Guided Sourcing |
14 | Award Scenario in Keelvar is integrated to the event in Ariba Guided Sourcing via API | Award Scenario is automatically created in Ariba Guided Sourcing |
15 | Award Supplier/Bidder in Ariba Guided Sourcing | Supplier/Bidder is awarded in Ariba Guided Sourcing |
16 | Event status is changed to “Completed” in Ariba Guided Sourcing | Event is completed in Ariba Guided Sourcing |
Not Applicable
| Package Name | Parent Package |
|---|---|
Other Development Objects
| Object Type | Object Name | Purpose/High Level Logic | Design Rationale Reference |
|---|---|---|---|
Insert links and references to other documents which are relevant when trying to understand this decision and its implications. Other decisions are often impacted, so it's good to list them here with links. Attachments are also possible but dangerous as they are static documents and not updated by their authors.
