
This articles explains how Nordoon integrates natively with SAP Business Technology Platform (BTP) Integration Suite to automate purchase order confirmation processing.
Nordoon, the agentic AI platform for supply chain automation, equips organizations with AI Agents that transform back-office operations by replicating, expanding, and consolidating day-to-day processes while structuring and cleaning data on the go. SAP BTP Integration Suite ensures these workflows are connected, governed, and extensible across the SAP landscape.
Combined, these 2 technologies give companies a scalable path to intelligent PO automation with full visibility and control.
Here are the 6 aspects of the integration that we are going to further explain in order to illustrate a production-ready, working integration (not a theoretical architecture).
1. Complete BPMN flow canvas: Full integration flow showing all steps and system connections.
2. Message processing log: Real execution showing 15.7-second processing time and processed PO data.
3. Groovy script editor: Implementation of Nordoon's API request construction.
4. Nordoon Agent data flow: Configuration of the PO Processing AI Agent.
5. Nordoon REST API connector: Secure API key management and multi-tenant setup.
6. SAP API Business Hub: Purchase Order OData service used for validation.
Nordoon is an agentic platform designed designed to be incorporated into sophisticated automation workflows.
This integration showcases Nordoon’s technical flexibility for:
The integration flow (POAgent) orchestrates a multi-step process that spans three systems: External System → SAP BTP Integration Suite →Nordoon AI → SAP S/4HANA
Key technical participants:
1. Sender (HTTPS): External system sending PDF documents
2. Nordoon_AI: AI Agent platform processing documents
3. SAP_S4HANA: Enterprise system for validation and data persistence

The flow orchestrates the communication between three systems (Sender, Nordoon_AI, SAP_S4HANA) through a series of transformation steps, API calls, and validation logic. Each box represents a processing step (Content Enricher, Groovy Script, or HTTP Service Task), connected by sequence flows. This visual representation demonstrates the enterprise-grade orchestration capabilities of SAP BTP.
Flow overview

Key components visible in Figure 0:
Technology Stack:
Integration Flow File: PO Agent.iflw
Endpoint configuration:
URL Path:/po-confirmation/extract
Protocol: HTTPS (TLS 1.2+)
Authentication: Role-Based (ESBMessaging.send)
Max Body Size: 40 MB
XSRF Protection: Disabled (API endpoint)
Security model:
Step 3a: Prepare Nordoon request
Content Enricher Pattern (CallActivity_5)
Step 3b: Build request payload
Script: build_nordoon_request.groovy

The editor provides syntax highlighting, code folding, and integrated validation. Note the structured JSON construction and debug logging for security (only first 10 characters of API key logged).
def nordoonRequest = [
name: 'PO Confirmation ' + new Date().format('yyyy-MM-dd HH:mm:ss'),
input_file: [
filename: 'confirmation.pdf',
mimetype: 'application/pdf',
base64: pdfContent // Base64-encoded PDF from sender
]
]
Key technical aspects:
Step 3c: Call Nordoon API
Nordoon Agent Configuration

The agent data flow consists of a RESTAPI trigger, business logic agent, and REST API output formatter.
The endpoint UUID (320da0f68c324e019547d2e8a8118cc2) uniquely identifies this agent configuration.

This connector is used by the “SAP BTP Order Confirmations Flow” as an Agent Data Flow, demonstrating how Nordoon Agents can be reused across multiple automation workflows.
HTTP adapter configuration:
Endpoint: https://app-eu.nordoon.ai/api/v2.0/public/extract/${property.nordoon.endpoint.uuid}/sync/
Method: POST
Timeout: 60000ms (60 seconds)
Retry: 1 iteration, 5-second interval
Authentication: API Key (x-api-key header)
Region: EU (app-eu.nordoon.ai)
Synchronous processing:
Response structure:
{
"result": [{
"General Info": {
"Purchase Order Number": "4500000001"
},
"Items": [
{
"Item Number": "10",
"Material Description": "VAI101 - Widget Type A",
"Confirmed Quantity": "100",
"Confirmed Delivery Date": "2025-11-20"
}
]
}]
}
Step 3d: Parse Nordoon Response
Script: parse_nordoon_response.groovy
def nordoonResult = jsonSlurper.parseText(responseBody)
// Extract structured data from AI agent response
def poNumber = nordoonResult.result[0]?.'General Info'?.'Purchase Order Number'
def items = nordoonResult.result[0]?.Items
// Store in message exchange properties
message.setProperty('po.number', poNumber)
message.setProperty('po.items.count', items?.size()?.toString() ?: '0')
message.setProperty('nordoon.result', responseBody) // Full result for transformation
// Set PO number as body for next step (SAP validation)
message.setBody(poNumber)
Data processing:
Step 4a: Validate that PO exists in SAP
Purpose: Verify that the PO number processed by Nordoon actually exists in SAP before posting confirmations.

This same OData service is used in the integration flow to validate PO numbers extracted by Nordoon.
HTTP GET request:
Endpoint: https://sandbox.api.sap.com/s4hanacloud/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV/A_PurchaseOrder('${in.body}')
Method: GET
Headers:
- Accept: application/json
- apikey: ${property.sap.api.key}
Real-world example:
Dynamic URL Construction:
Validation script: check_call_got_200.groovy
Endpoint: https://sandbox.api.sap.com/s4hanacloud/sap/opu/odata/sap/API_PURCHASEORDER_PROCESS_SRV/A_PurchaseOrder('${in.body}')
Method: GET
Headers:
- Accept: application/json
- apikey: ${property.sap.api.key}
Error handling
Step 4b: Tranform to SAP OData format
Script: transform_to_sap_format.groovy
if (item.'Confirmed Quantity') {
sapConfirmations.add([
PurchaseOrder: poNumber,
PurchaseOrderItem: item.'Item Number',
ConfirmedQuantity: (item.'Confirmed Quantity' as Integer),
ScheduleLineDeliveryDate: item.'Confirmed Delivery Date' ?: null,
Material: extractMaterialNumber(item.'Material Description'),
Plant: "1000"
])
}
}
Data mapping:

Material number:
Output payload:
Step 4c: Post Confirmations to SAP
HTTP POST request:
Production considerations:
Step 4d: Response validation
Script: post_to_sap_check.groovy
Response codes:
Subscribe to our newsletter, and we will send AI automation insights like this straight to your inbox on a regular basis.