How to Generate OpenAPI 3.0 from a SKYVVA Interface and Use It in SAP Integration Suite
Introduction
This document explains how to generate an OpenAPI 3.0 definition from a SKYVVA inbound interface and use the generated definition in SAP Integration Suite for message mapping.
The scenario covered in this guide uses the following integration flow:
Postman
↓
SAP Integration Suite
↓
SKYVVA
↓
Salesforce
The purpose of the OpenAPI 3.0 generation is to provide SAP Integration Suite with the request structure expected by SKYVVA. In SAP Message Mapping:
- the source structure is based on the payload sent from Postman;
- the target structure is imported from the OpenAPI 3.0 file generated by SKYVVA;
- SAP maps the incoming source fields to the SKYVVA/Salesforce target fields.
Conceptually:
Postman Payload
↓
SAP Source Structure
↓
Message Mapping
↓
SKYVVA OpenAPI 3.0 Target Structure
↓
SKYVVA
↓
Salesforce
This guide covers the following API structures:
V2/IntegrateV2/IntegrateSynchronousV3/IntegrateV4/Integrate
The detailed payload examples in this document focus on V2/Integrate, V3/Integrate, and V4/Integrate.
1. Prerequisites
Before generating the OpenAPI 3.0 file, prepare the SKYVVA inbound interface.
1.1 Create an inbound interface
Create a SKYVVA Inbound Interface for the Salesforce object that should receive the incoming records.
In this example, the target object is Account.
The inbound interface is responsible for receiving the transformed data from SAP and processing it in Salesforce.
1.2 Use Interface API V2
Configure the interface to use Interface API V2.
This is the interface configuration used in the demonstrated setup before generating the OpenAPI 3.0 definition.
1.3 Enable External Mapping
In the Inbound Setup section of the interface, enable:
External Mapping
External Mapping allows incoming fields from the external system to be mapped to Salesforce fields.
This is required because the source payload does not necessarily use the same field names as the Salesforce target object.
For example:
Source field Salesforce target field
Customer_Number__c → AccountNumber
City__c → BillingCity
Country__c → BillingCountry
1.4 Select the Salesforce External ID
Select the Salesforce field that should be used as the external identifier.
Example:
Salesforce External ID = AccountNumber
The selected Salesforce External ID is used by the inbound interface when matching or processing incoming records.
2. Generate the OpenAPI 3.0 Definition
After the inbound interface is configured, generate the OpenAPI 3.0 file.
2.1 Open Generate MetaData
Open the SKYVVA inbound interface and click:
Generate MetaData
This opens the Generate MetaData dialog.
2.2 Select the file format
For:
Chose a format File
select:
OpenAPI 3.0
This tells SKYVVA to generate the interface definition in OpenAPI 3.0 format.
The generated definition contains the request structure that can later be imported into SAP Integration Suite.
2.3 Select the API name
For:
Chose an api name
select the required API.
The available options shown in the configuration are:
V2/Integrate
V2/IntegrateSynchronous
V3/Integrate
V4/Integrate
The selected API determines the request structure generated in the OpenAPI 3.0 file.
This is important because the payload structure is different between V2, V3, and V4.
2.4 Select the operation
For:
Chose an operation
select the required HTTP operation.
The operation becomes part of the generated OpenAPI definition and is later visible when the file is imported into SAP.
2.5 Generate the file
Generate and save the OpenAPI 3.0 file.
This file will be used in SAP Integration Suite as the target structure for Message Mapping.
The important concept is:
SKYVVA generates the target request definition.
SAP imports that definition and maps the source payload into it.
3. Prepare the Source Structure in SAP Integration Suite
The source structure in SAP represents the payload received from Postman.
Therefore:
Postman Payload Structure
=
SAP Source Mapping Structure
The source fields must reflect the actual incoming payload.
For example, if Postman sends:
{
"Account": [
{
"Customer_Name__c": "Test Account 001",
"Customer_Number__c": "ACC-001",
"City__c": "Munich"
}
]
}
then the source structure in SAP contains:
Account[]
Customer_Name__c
Customer_Number__c
City__c
The source structure is not the Salesforce structure. It represents the external payload exactly as it arrives in SAP.
4. Import the Generated OpenAPI 3.0 File into SAP
The OpenAPI 3.0 file generated by SKYVVA is imported into SAP Integration Suite and used as the target structure of the Message Mapping.
The two sides of the mapping therefore have different purposes.
Source side
Represents the incoming Postman payload.
Example:
Customer_Name__c
Customer_Number__c
City__c
Country__c
Target side
Represents the request structure expected by SKYVVA.
Example:
AccountNumber
BillingCity
BillingCountry
After both structures are available, map the source fields to the corresponding target fields.
Example:
Customer_Number__c → AccountNumber
City__c → BillingCity
Country__c → BillingCountry
This transformation allows SAP to convert the external Postman payload into the request structure required by SKYVVA and Salesforce.
5. V2/Integrate
5.1 V2 payload structure
For V2/Integrate, the payload sent from Postman contains three main elements:
fromSystem
targetObject
Account[]
Example:
{
"fromSystem": "a0c9X00000Frp5NQAR",
"targetObject": "a0g9X00000RLhlZQAT",
"Account": [
{
"Customer_Name__c": "Test Account 001",
"Customer_Number__c": "ACC-001",
"City__c": "Munich",
"Country__c": "Germany",
"Street__c": "10 Main Street",
"Postal_Code__c": "80331",
"Telephone__c": "+49 89 1000001",
"Web_URL__c": "https://example.com",
"Business_Sector__c": "Technology",
"Account_Note__c": "OpenAPI test account 1"
},
{
"Customer_Name__c": "Test Account 002",
"Customer_Number__c": "ACC-002",
"City__c": "Berlin",
"Country__c": "Germany",
"Street__c": "20 Alexander Street",
"Postal_Code__c": "10178",
"Telephone__c": "+49 30 1000002",
"Web_URL__c": "https://example.com",
"Business_Sector__c": "Consulting",
"Account_Note__c": "OpenAPI test account 2"
},
{
"Customer_Name__c": "Test Account 003",
"Customer_Number__c": "ACC-003",
"City__c": "Hamburg",
"Country__c": "Germany",
"Street__c": "30 Harbor Street",
"Postal_Code__c": "20095",
"Telephone__c": "+49 40 1000003",
"Web_URL__c": "https://example.com",
"Business_Sector__c": "Manufacturing",
"Account_Note__c": "OpenAPI test account 3"
}
]
}
5.2 Meaning of fromSystem
fromSystem identifies the SKYVVA Integration.
It can contain either:
Integration ID
or:
Integration Name
Example using an Integration ID:
"fromSystem": "a0c9X00000Frp5NQAR"
Example using an Integration Name:
"fromSystem": "Testing_Generate_OpenAPI"
5.3 Meaning of targetObject
targetObject identifies the SKYVVA Interface.
It can contain either:
Interface ID
or:
Interface Name
Example using an Interface ID:
"targetObject": "a0g9X00000RLhlZQAT"
Example using an Interface Name:
"targetObject": "Account_V2_Integrate"
Therefore:
fromSystem = Integration ID or Integration Name
targetObject = Interface ID or Interface Name
5.4 V2 source structure in SAP
The SAP source structure reflects the incoming V2 payload.
Conceptually:
/account-POST-Request
fromSystem
targetObject
Account[]
Customer_Name__c
Customer_Number__c
City__c
Country__c
Street__c
Postal_Code__c
Telephone__c
Web_URL__c
Business_Sector__c
Account_Note__c
The Account node is repeating because multiple Account records can be sent in one request.
5.5 V2 target structure in SAP
The target structure comes from the generated OpenAPI 3.0 file.
Example:
/integrateSynchronous-POST-Request
fromSystem
targetObject
Account[]
AccountNumber
AccountSource
AnnualRevenue
BillingAddress
BillingCity
BillingCountry
...
The exact Salesforce fields available in the target depend on the generated interface metadata.
5.6 V2 mapping
Map the top-level fields:
fromSystem → fromSystem
targetObject → targetObject
Account[] → Account[]
Then map the business fields.
Example:
Customer_Number__c → AccountNumber
City__c → BillingCity
Country__c → BillingCountry
The mapping converts the external source field names into the Salesforce target field names expected by SKYVVA.
6. V3/Integrate
6.1 V3 payload structure
For V3/Integrate, the payload structure is simpler than V2.
The request contains only:
Account[]
It does not contain:
fromSystem
targetObject
Integration
Interface
Example:
{
"Account": [
{
"Customer_Name__c": "Test Account 001",
"Customer_Number__c": "ACC-001",
"City__c": "Munich",
"Country__c": "Germany",
"Street__c": "10 Main Street",
"Postal_Code__c": "80331",
"Telephone__c": "+49 89 1000001",
"Web_URL__c": "https://example.com",
"Business_Sector__c": "Technology",
"Account_Note__c": "OpenAPI test account 1"
},
{
"Customer_Name__c": "Test Account 002",
"Customer_Number__c": "ACC-002",
"City__c": "Berlin",
"Country__c": "Germany",
"Street__c": "20 Alexander Street",
"Postal_Code__c": "10178",
"Telephone__c": "+49 30 1000002",
"Web_URL__c": "https://example.com",
"Business_Sector__c": "Consulting",
"Account_Note__c": "OpenAPI test account 2"
},
{
"Customer_Name__c": "Test Account 003",
"Customer_Number__c": "ACC-003",
"City__c": "Hamburg",
"Country__c": "Germany",
"Street__c": "30 Harbor Street",
"Postal_Code__c": "20095",
"Telephone__c": "+49 40 1000003",
"Web_URL__c": "https://example.com",
"Business_Sector__c": "Manufacturing",
"Account_Note__c": "OpenAPI test account 3"
}
]
}
6.2 V3 source structure in SAP
The source structure corresponds to the Postman payload:
Account[]
Customer_Name__c
Customer_Number__c
City__c
Country__c
Street__c
Postal_Code__c
Telephone__c
Web_URL__c
Business_Sector__c
Account_Note__c
6.3 V3 target structure in SAP
After importing the V3 OpenAPI 3.0 definition, the target structure contains the SKYVVA request definition.
Example:
/V3/Integrate-POST-Request
Account[]
AccountNumber
AccountSource
AnnualRevenue
BillingAddress
BillingCity
BillingCountry
...
6.4 V3 mapping
First map the repeating Account structure:
Source Account[] → Target Account[]
Then map individual source fields to the corresponding Salesforce target fields.
Example:
Customer_Number__c → AccountNumber
City__c → BillingCity
Country__c → BillingCountry
Compared with V2, there is no need to map fromSystem or targetObject because those fields are not part of the V3 payload structure used in this scenario.
7. V4/Integrate
7.1 V4 payload structure
V4/Integrate is structurally different from V2 and V3.
The Postman payload is a direct JSON array.
There is no Account wrapper.
Example:
[
{
"Customer_Name__c": "Test Account 001",
"Customer_Number__c": "ACC-001",
"City__c": "Munich",
"Country__c": "Germany",
"Street__c": "10 Main Street",
"Postal_Code__c": "80331",
"Telephone__c": "+49 89 1000001",
"Web_URL__c": "https://example.com",
"Business_Sector__c": "Technology",
"Account_Note__c": "OpenAPI test account 1"
},
{
"Customer_Name__c": "Test Account 002",
"Customer_Number__c": "ACC-002",
"City__c": "Berlin",
"Country__c": "Germany",
"Street__c": "20 Alexander Street",
"Postal_Code__c": "10178",
"Telephone__c": "+49 30 1000002",
"Web_URL__c": "https://example.com",
"Business_Sector__c": "Consulting",
"Account_Note__c": "OpenAPI test account 2"
},
{
"Customer_Name__c": "Test Account 003",
"Customer_Number__c": "ACC-003",
"City__c": "Hamburg",
"Country__c": "Germany",
"Street__c": "30 Harbor Street",
"Postal_Code__c": "20095",
"Telephone__c": "+49 40 1000003",
"Web_URL__c": "https://example.com",
"Business_Sector__c": "Manufacturing",
"Account_Note__c": "OpenAPI test account 3"
}
]
The payload structure is therefore:
[
Record
Record
Record
]
7.2 V4 source structure in SAP
Because the incoming request is a direct array, SAP represents it as a repeating request structure.
Example:
POST_Request[]
Customer_Name__c
Customer_Number__c
City__c
Country__c
Street__c
Postal_Code__c
Telephone__c
Web_URL__c
Business_Sector__c
Account_Note__c
This is an important difference from V3.
V3 uses:
Account[]
inside a root object.
V4 uses a direct repeating request array.
7.3 V4 target structure in SAP
The target structure imported from the OpenAPI 3.0 definition contains:
/V4/Integrate-POST-Request
Account[]
AccountNumber
AccountSource
AnnualRevenue
BillingAddress
BillingCity
BillingCountry
...
7.4 V4 mapping
Map the repeating source node to the repeating Account target node:
POST_Request[] → Account[]
Then map the required fields:
Customer_Number__c → AccountNumber
City__c → BillingCity
Country__c → BillingCountry
This converts each incoming record in the direct Postman array into an Account record in the target SKYVVA request structure.
8. Comparison of V2, V3, and V4 Payload Structures
The main difference between the API versions is the structure surrounding the Account records.
| API | Root structure | Additional top-level fields | Record structure |
|---|---|---|---|
V2/Integrate | JSON object | fromSystem, targetObject | Account[] |
V3/Integrate | JSON object | None | Account[] |
V4/Integrate | Direct JSON array | None | Direct array records |
V2
{
fromSystem
targetObject
Account[]
}
V3
{
Account[]
}
V4
[
record
record
record
]
This difference must be considered when creating the SAP source structure and mapping.
9. Complete Configuration Procedure
The overall procedure is:
1. Create a SKYVVA inbound interface
↓
2. Configure Interface API V2
↓
3. Enable External Mapping
↓
4. Select the Salesforce External ID
↓
5. Open Generate MetaData
↓
6. Select OpenAPI 3.0
↓
7. Select the required API name
↓
8. Select the operation
↓
9. Generate the OpenAPI 3.0 file
↓
10. Import the OpenAPI file into SAP
as the target structure
↓
11. Create or import the source structure
based on the Postman payload
↓
12. Open SAP Message Mapping
↓
13. Map the source root/repeating structure
to the target structure
↓
14. Map individual source fields
to Salesforce/SKYVVA target fields
↓
15. Use the mapping in the SAP integration flow
↓
16. SAP transforms the Postman payload
into the request structure expected by SKYVVA
10. Key Design Principle
The most important concept in this configuration is the separation between the external source format and the SKYVVA target format.
External Payload
↓
Source Structure
↓
SAP Message Mapping
↓
SKYVVA OpenAPI Target Structure
This means the source payload can use business-specific field names such as:
Customer_Number__c
City__c
Country__c
while the target structure can use Salesforce field names such as:
AccountNumber
BillingCity
BillingCountry
SAP Message Mapping performs the transformation between these two structures.
11. Important Notes
- The OpenAPI 3.0 file generated by SKYVVA is used as the target definition in SAP Message Mapping.
- The source definition is based on the Postman request payload.
- The source fields therefore follow the external payload structure.
- The target fields follow the structure generated from the SKYVVA interface.
V2/IntegrateincludesfromSystem,targetObject, andAccount[].- For V2,
fromSystemsupports an Integration ID or Integration Name. - For V2,
targetObjectsupports an Interface ID or Interface Name. V3/Integrateuses anAccount[]wrapper without the V2 top-level routing fields.V4/Integrateaccepts a direct array of records.- For V4, SAP represents the direct array as a repeating request structure such as
POST_Request[]. - The actual source-to-target field mapping depends on the Salesforce fields and the business requirements of the interface.
SAP SKYVVA Adapter Configuration and Processing Flow
The payload structure, SAP Message Mapping, and Skyvva API Version must be configured as one consistent processing flow.
| Integration | Skyvva API Version | Payload | Message Mapping |
|---|---|---|---|
V2/Integrate | V2 | V2 payload | V2 mapping |
V3/Integrate | V3 | V3 payload | V3 mapping |
V4/Integrate | V3 | V4 payload | V4 mapping |
Important:V3/IntegrateandV4/Integrateboth use Skyvva API Version V3 in the SAP SKYVVA adapter. They are different in their payload structure and SAP Message Mapping structure.
Flow A — V2/Integrate
Configure the SAP SKYVVA adapter with:
Skyvva API Version = V2
Skyvva API = V2/Integrate
The complete V2 processing path is:
Postman
↓
V2 Payload
{
fromSystem,
targetObject,
Account[]
}
↓
SAP V2 Source Structure
↓
V2 Message Mapping
↓
V2 OpenAPI 3.0 Target Structure
↓
SKYVVA Adapter
Skyvva API Version = V2
↓
SKYVVA
↓
Salesforce
For V2, fromSystem can contain the Integration ID or Integration Name, and targetObject can contain the Interface ID or Interface Name.
The V2 configuration must stay aligned:
V2 Payload + V2 Mapping + Skyvva API Version V2
Flow B — V3/Integrate
The V3 Postman payload uses:
{
Account[]
}
It does not contain fromSystem, targetObject, Integration, or Interface in the payload used in this guide.
Configure the SAP SKYVVA adapter with:
Skyvva API Version = V3
Integration = <Integration Name>
Interface = <Interface Name>
Mode = Synchronous
Request Format = JSON
Response Format = JSON
The complete V3 processing path is:
Postman
↓
V3 Payload
{
Account[]
}
↓
SAP V3 Source Structure
↓
V3 Message Mapping
Account[] → Account[]
↓
V3 OpenAPI 3.0 Target Structure
↓
SKYVVA Adapter
Skyvva API Version = V3
Integration + Interface configured
↓
SKYVVA
↓
Salesforce
The V3 configuration must stay aligned:
V3 Payload + V3 Mapping + Skyvva API Version V3
Flow C — V4/Integrate
The V4 Postman payload is a direct JSON array:
[
record,
record,
...
]
SAP represents the incoming direct array as a repeating source node such as:
POST_Request[]
The V4 mapping maps that repeating source node to the target Account collection:
POST_Request[] → Account[]
For V4, the SAP SKYVVA adapter still uses:
Skyvva API Version = V3
The complete V4 processing path is:
Postman
↓
V4 Direct-Array Payload
[
record,
record,
...
]
↓
SAP V4 Source Structure
POST_Request[]
↓
V4 Message Mapping
POST_Request[] → Account[]
↓
V4 OpenAPI 3.0 Target Structure
↓
SKYVVA Adapter
Skyvva API Version = V3
↓
SKYVVA
↓
Salesforce
The V4 configuration must stay aligned:
V4 Payload + V4 Mapping + Skyvva API Version V3
Processing Rule Summary
V2/Integrate
→ V2 payload
→ V2 mapping
→ Skyvva API Version V2
V3/Integrate
→ V3 payload
→ V3 mapping
→ Skyvva API Version V3
V4/Integrate
→ V4 payload
→ V4 mapping
→ Skyvva API Version V3
Using Skyvva API Version V3 for both V3 and V4 does not mean that their payloads are interchangeable. Each integration must use its corresponding payload and Message Mapping structure.
12. Summary
SKYVVA OpenAPI 3.0 generation provides SAP Integration Suite with the target request structure required for communication with a SKYVVA inbound interface.
The overall design is:
SKYVVA Inbound Interface
↓
Generate OpenAPI 3.0
↓
Import into SAP as Target Structure
Postman
↓
Send Request Payload
↓
SAP Source Structure
↓
Message Mapping
↓
SKYVVA OpenAPI Target Structure
↓
SKYVVA
↓
Salesforce
The three payload structures covered in this guide are:
V2/Integrate
{
fromSystem,
targetObject,
Account[]
}
V3/Integrate
{
Account[]
}
V4/Integrate
[
record,
record,
...
]
By generating the OpenAPI 3.0 definition from the SKYVVA interface and importing it into SAP as the target structure, the integration flow can map an external Postman payload into the request format required by SKYVVA and Salesforce.