SK SKYVVA Documentation

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:

Conceptually:

Postman Payload
      ↓
SAP Source Structure
      ↓
Message Mapping
      ↓
SKYVVA OpenAPI 3.0 Target Structure
      ↓
SKYVVA
      ↓
Salesforce

This guide covers the following API structures:

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.

APIRoot structureAdditional top-level fieldsRecord structure
V2/IntegrateJSON objectfromSystem, targetObjectAccount[]
V3/IntegrateJSON objectNoneAccount[]
V4/IntegrateDirect JSON arrayNoneDirect 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


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.

IntegrationSkyvva API VersionPayloadMessage Mapping
V2/IntegrateV2V2 payloadV2 mapping
V3/IntegrateV3V3 payloadV3 mapping
V4/IntegrateV3V4 payloadV4 mapping
Important: V3/Integrate and V4/Integrate both 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.

Open this article in the interactive viewer →