Skip to Content
Product Information

FAQ – B2B Contact-to-Account Relationships in SAP Marketing Cloud

You find questions and answers to the topic B2B Contact-to-Account Relationships and SOAP-based Integration:

How do I switch on B2B Relationship functionality?

You will find the “contact projection” switch in the Set Up Your Marketing Solution app in the scenario Contacts and Profiles under Contact Projections for B2B Relationships.

Can we turn off the B2B Switch again or it is irreversible?

Switching back to the state without contact relationships is only possible in the Q-system. In the P-system you must request this from SAP via a service ticket.

Does the migration of the old ODATA to the new SOAP-based integration impact existing data?

Yes, you must run a migration program after you have switched from the old to the new version of integration.  You need to submit a service ticket to request this migration. The details are described in the migration guide, which is part of the integration and setup guide.

What happens with Contacts that have been merged before upgrading to the SOAP-based Integration?

It’s important to understand the design principles of the SOAP-based integration with regard to this point. For each business partner in Sales Cloud, a corresponding local business partner record is created in SAP Marketing Cloud. The subsequent extraction creates separate interaction contacts for the persons and accounts. No merge is performed because the business partner in marketing would prevent this since it is the primary data provider for the interaction contact via the ID Origin SAP_MKT_BUPA.  As a result of the migration program, which is executed for the SOAP-based integration, the ID Origin SAP_C4C_BUPA becomes an additional ID, which provides the reference to interactions loaded from the Sales Cloud.

If you have already merged business partners into one interaction contact with the ODATA-based Integration, it’s difficult to migrate to the SOAP integration. One option could be to delete merged interaction contacts in SAP Marketing Cloud before you start to migrate to SOAP.

Unfortunately, we currently do not provide a solution that splits merged interaction contacts, because it is simply not possible to provide an adequate solution in the standard.

However, you can request from SAP Marketing Cloud development a query on your interaction contact base to figure out all cases, where contacts contain after a merge two or more C4C_BUPA Ids. To get this list, you must submit a service ticket with the headline “Please provide a list with all the merged Interaction Contacts – those having 2 or more SAP_C4C_BUPA ids.”

How do we handle Marketing Permissions regarding Marketing Area assignments?

According to the SetUp Guide you have to activate marketing areas for campaign execution in order to be able to use Contact-to-Account Relationships.

However, it is sufficient to use one single marketing area, e.g. GLOBAL, if, during campaign execution, you use the BAdI CUAN_MKT_EXEC_MARKETING_AREA to set this single Marketing Area to perform a proper permission check.

How can you set the marketing area for permissions and subscriptions?

  • If implicit permissions are used, you are fine, because they are created with marketing area in any case, i.e. if the use of marketing area for campaign execution is switched off.
  • Subscriptions have a marketing area assigned as well.

So, it is critical and tricky for explicit permissions:

  • If you are just starting with your implementation, you must fill the proper Marketing Area, when loading permissions initially for the contacts.
  • If you are already running marketing cloud productively, it’s more difficult. One approach could be to extract the marketing permissions for the relevant contacts and reload them into SAP Marketing Cloud, using the API API_MKT_CONTACT.

Do we have to assign a Marketing Area when loading Interactions?

Yes, when loading interactions, for example from a first-party website or business documents like opportunities from sales cloud, or sales orders from S/4HANA, you must pass on a value for the marketing area, e.g. using the BADI Revise Interaction Data before Data Import, refer to the following documentation.

This is especially important if you want to further use interactions for trigger-based campaigns.

Is there Integration for SAP CRM available that supports B2B relationships?

Currently there is no standard integration for SAP CRM that supports this feature set. However, we plan to provide a CX works best practice article, which will guide you with regard to changing integration towards the SOAP-based Business Partner replication. Stay tuned it will be available soon!

Can B2B contact-to-account relationships be enabled for multiple Marketing Areas?

Yes, the Marketing Area plays an important role in this feature set. For contacts with multiple assignments to marketing areas, every relationship to the related account will be available in the corresponding marketing area. For example, if a contact is related to Marketing Area A and B, and the corresponding account is also available in marketing area A and B, the system provides the cartesian product for the relationships, i.e. in total 4 relationship best records will be created.

Why is the attribute COMPANY_NAME not available anymore in API_MKT_CONTACTS?

Thanks for this valuable feedback. This is a requirement which is still being evaluated. We will look into this issue.

Are relationships between two accounts supported?

Currently only contact-to-account relationships are possible. This is a conscious decision as marketing engagements are primarily executed for contacts.

You can add these relationships by means of a CBO, which captures the relationship records between accounts, e.g. to use this in segmentation.

Is there a new API for Interactions that supports Account and Contacts?

Yes, there is a new sub-node on the interaction, which allows you to assign additional contact or accounts. Note, the interaction does not differentiate between accounts and contacts.

How do we handle existing Custom Fields after Upgrade to SOAP-based Integration?

Existing custom fields can continue to be used after you have migrated integration to SOAP-technology. To do so you have to:

  • Create another custom attribute in the local business partner (business context “master data: business partner”)
  • Use the available BADI to map the values of the new attribute from the business partner to the existing attribute of the interaction contact.
  • Afterwards reload data from C4C as described in the migration guide

Alternatively, you can create a new attribute for the business context “master data: business partner” and apply the scenario-based integration. In this case the new attribute will be created also in the interaction contact. This has the consequence that segmentation content for the new attribute needs to be adjusted and data needs to be loaded from additional data sources as well.


You must be Logged on to comment or reply to a post.
  • Thanks for this FAQ Josef!


    Something that I thought would be useful to add, is concerning mapping of Functions.

    When interfacing Relations, you might get the error like "Function Z006 does not exist".

    Previously, with oData-based integration, configuration for Functions was required in

    Manage your solution -> Configure your solution -> Marketing | Marketing | Contacts and Profiles -> Functions for Contacts.

    But, with migration to SOAP-based integration, configuration is now needed in this location instead:

    Manage your solution -> Configure your solution -> Database and Data Management | Business Partner | Contact Person -> Define functions for Contact Person

    What's more, this new configuration only allows for 2-digit-codes, while the previous configuration (and sales cloud) allowed for 4-digit codes.

    To top off the complexity, in the "code list mapping" in Sales, you must not add mapping from the 4-digit codes of sales cloud to the 2-digit codes of marketing cloud. No, you must add two leading zeroes on the marketing side.

    So if you configured in marketing cloud function code "Z6" then your mapping should be "sales = Z006 to marketing = 00Z6".

    Hope this info can help,



    • Joyca Vervinckt did you already came across an error saying "Invalid namespace for Function"?

      I wanted to create new entries starting with Z1 (e.g. R&D Manager) - assuming we cannot easily go on with 11 - but it says Invalid namespace? Am I doing something wrong?

      Best Regards


      • Hmm, no, I made my function codes on Z1, Z2, etc, as well and didn't have that error...

        By the way, here is some more communication on a ticket that I had at SAP about this, as I was thinking about the limits of a 2-digit-code. If you could only use Z1 to Z9 then there's only 10 available codes, while Sales has 4-digits so can have 999 different codes.

        This was their reply (so Z should be certainly within the allowed namespace)

        After discussing this internally on the namespace for the Functions for Contact Person, you can use any define any combinations other than S*, Q* R* P*, X*, Y*, 0*, 5* 6* 7*, 8*, 9* . Request you to proceed as now you will have huge namespace available for you to use.

        • Thanks also for that Joyca. I tried already with departments and I was able to use also values without "Z" as far as they are not in SAP namespace. Regarding the error with functions I created an incident to let SAP check that. Kind regards

        • Hi Joyca Vervinckt thanks for sharing this solution. I just have this problem that you mention about the functions. I followed the suggested solution step by step:

          So if you configured in marketing cloud function code "Z6" then your mapping should be "sales = Z006 to marketing = 00Z6".

          However, it does not allow me to save in Marketing cloud Z1, etc ... and when I migrated from c4sales to Marketing, I keep getting the error.

          Please could you  tell me if you know what code I should save in marketing for it to work?


          thanks in advance

      • By the way, Tobias Schneider , your comment reminded me that after I wrote this comment here on this blog, I had a subsequent issue: the Function descriptions didn't appear in Segmentation. For that, you DO need the configuration on "contact" level instead of the one on "business partner" level. And you need a Badi to map the two...

        I made an Influence Request about that just now with more details.


        • Hi Joyca, thanks for your quick reply. Okay, I already thought that something like that will be necessary... Thanks for the confirmation and the BAdI. That will save some time 😉

        • Hi Joyca Vervinckt

          A query: When you make the previous comment you mean this phrase:

          It is precisely that I am in the part of configuring the contact functions and then proceed with the implementation of the BAdi.

          but the second path is not located in the system:


          So, I doubt if I follow the first path (If I have it identified) to do the configuration.

          Best regards

          Elio C

          • /
          • Thanks for your answer Joyca Vervinckt

            I had already been looking for that option as well, and I would not think that it is a matter of roles and catalogs either.

            But with the image you gave me, what I did was apply a search filter and I would understand that it is in this section.



            Elio C.


  • Hello Josef,

    the integration with Sales Cloud now works so far that the Origin SAP_C4C_BUPA is saved as additional ID as you mentioned

    the ID Origin SAP_C4C_BUPA becomes an additional ID, which provides the reference to interactions loaded from the Sales Cloud.

    Now we implemented the integration scenario "Request Marketing Permissions and Subscriptions from SAP Marketing" to display the Marketing Permissions in the Sales Cloud.

    The problem is that the scenario calls the API with the Sales Cloud ID of the Contact using SAP_C4C_BUPA. As in Marketing Cloud the Origin ID is now SAP_MKT_BUPA nothing is passed back.

    Maybe you have an idea how we can solve this issue.

    Kind regards,

    • Hi Markus,
      thanks for this feedback. We are not aware of this issue and would like to ask you to raise a service ticket that we can have a deeper look into your situation.
      Best Regards, Josef


    • Thanks for pointing that out Markus, I didn't test that yet.

      You are correct, I also get errors on the Marketing Permissions in Sales Cloud, but even more errors than just nothing found.

      I will also open a ticket, but Josef Ehbauer  my findings are:

      1. The API that is called at first is /sap/opu/odata/sap/API_MKT_INTERACTION_CONTACT_SRV;v=0002/InteractionContactOriginData?$filter=InteractionContactOrigin eq 'SAP_C4C_BUPA' and InteractionContactID eq '0001027547'&$expand=MarketingPermissions&$select=MarketingPermissions&$sap-language=EN
      2. the CPI flow appends a filter to the url which includes "&$sap-language=EN" at the end, which gives the first error "Invalid system query option: '$sap-language'."
      3. When simulating in Postman without the sap-language parameter, it complains about the mandatory "top" parameter not being present
      4. When fixing the top parameter, the API called becomes /sap/opu/odata/sap/API_MKT_INTERACTION_CONTACT_SRV;v=0002/InteractionContactOriginData?$top=10&$filter=InteractionContactOrigin eq 'SAP_C4C_BUPA' and InteractionContactID eq '0001027547'&$expand=MarketingPermissions&$select=MarketingPermissions , which indeed returns no results. The SAP_C4C_BUPA is no longer a Main origin but an additional id, so InteractionContactOriginData cannot return any results (it probably looks through the CUAND_CE_IC_FT_D table which would not have an entry for SAP_C4C_BUPA being an additional origin). If we change the url to /sap/opu/odata/sap/API_MKT_INTERACTION_CONTACT_SRV;v=0002/InteractionContactOriginData?$top=10&$filter=InteractionContactOrigin eq 'SAP_MKT_BUPA' and InteractionContactID eq '1029539'&$expand=MarketingPermissions&$select=MarketingPermissions in postman, then we finally get the expected results.
    • In the meantime there is a new Version 1.1.4 of iFlow 'Request Marketing Permissions and Subscriptions from SAP Marketing' available. With this version it works fine.

      • Hmm, I did update this CPI artifact to that version, but I'm still getting the error "SoapFaultCode:5 An internal error occurred. For error details check [CPI]" in Sales, and in CPI it sais "Invalid system query option: '$sap-language'." :s


        • With the old version I never got an error. It just did not provide the data.

          This is the result of a successfull message mapping:

          <?xml version="1.0" encoding="UTF-8"?>
          <ns4:QueryStringOptions xmlns:ns4="">
          	<filter>InteractionContactOrigin eq 'SAP_MKT_BUPA' and InteractionContactID eq '5000053288' &amp;$expand=MarketingPermissions&amp;$select=MarketingPermissions</filter>
          • Thanks,

            turned out to be a typo in CPI in the url of the marketing cloud system. So the error message about "$sap-language" was completely irrelevant/unhelpful.

            It works now for us too 🙂 (though we also had an error that the Marketing Area description was longer than 40 characters, so we had to shorten our descriptions in smc to make it work with sales)

        • No, not really.

          Just everything before that point needs to be working. So your bupa's from sales to marketing must be replicated using the new flows, and marketing needs to send back its confirmation & its own ID too, those are some of the other artifacts in the package.

          The 1.1.4 flow still needs to work for those who are not using the SOAP interface yet, so there's some filter in there that tries to determine if you're on the SOAP version or not.

          Here is a screenshot of the mapping in the artifact of version 1.1.2 vs 1.1.4.

          The field "ContactPersonReceiverID" from Sales seems to be important in the determination.


          • Hi Joyca,

            thanks again for your quick reply.

            Okay, that makes sense. Then I assume it has something to do with our error we're facing in the Business Partner Confirmation (MC doesn't send its own System ID but another one...) which SAP Dev team is still checking.

            In our case then I assume that C4C doesn't get the MC-BUPA ID back and thinks we're still using the old integration and by that uses of course SAP_C4C_BUPA to retrieve the permissions.

            That helps a lot to understand. Thank you! 🙂

            BR Tobias

  • Hello Josef Ehbauer,

    you anser the question "Does the migration of the old ODATA to the new SOAP-based integration impact existing data?".

    We have a different situation as we directly started with the SOAP-based integration between Sales and Marketing Cloud. But in the Marketing Cloud we already have Interaction Contacts which have been imported from a third-party system.

    Now this third-party system shall be replaced by Sales Cloud and the data must be migrated to Sales Cloud. From my understanding if we then send an Account / Contact from Sales Cloud to Marketing Cloud a new Business Partner is created and additionally a linked Interaction Contact. But there is already the existing Interaction Contact from the import.

    What would be your recommended approach?

    Kind regards,

    • Hi Markus,

      if you started already with the SOAP-based integration from the very beginning, you are in a lucky position. In this case the loaded business partner data will create interaction contacts which in turn will be merged with already existing interaction contacts, imported from the external source, if for example the email-address as matching criteria is met.

      Alternatively you can also delete the data for the interaction contacts, which have been loaded from the external source as they became actually obsolete.

      Best Regards, Josef

  • Hi Josef Ehbauer

    in another question regarding Custom Fields ( you pointed out that it is planned in the 2105 release to provide the possibility to enable Custom Fields - created for business context "Master Data: Business Partner" - also for Lead Replication to SAP Sales Cloud. Two questions:

    1. Will it also be possible to enable this SOAP-API for existing Custom Fields? So, is it possible for us to create a Custom Field now, apply the scenario based integration, and enable it for LeadReplicationRequest_Out later on?
    2. Did I get it right that the scenario will work in the following way (after 2105 release):
    • We create a field in the business context "Master Data: Business Partner" and apply the scenario-based integration.
    • By that it is also created for the business context "Marketing: Contact and Corporate Account"
    • For that resulting field we enable the usage for OData-API API_MKT_CONTACT_SRV, Version 4
    • We import data from a third party system to the field using API_MKT_CONTACT_SRV, V4
    • By that the data is also automatically written into the Custom Field for the business context "Master Data: Business Partner" (or do we have to use a BAdI for that?)
    • By enabling SOAP-API LeadReplicationRequest_Out in the Custom Field in context "Master Data: Business Partner", the value of the field could be replicated to SAP Sales Cloud

    Would be great if you could answer and confirm that.

    Kind regards


    • Hi Tobias,

      Ad1: You are right that we plan to deliver in 2105 that the scenario-based integration will also enhance the LeadReplicationRequest_Out service. However, from it is advisable that you wait until the upgrade of your Q-system to the 2105 release before you apply the scenario-based integration to have this enhancement available in the lead outbound service LeadReplicationRequest_Out.

      Ad2: Your assumptions are correct.

      Best regards,
      Josef Ehbauer

  • Hi Josef Ehbauer

    one more question regarding that topic. Is it still possible to use Version 2 of API_MKT_CONTACT_SRV if we use the SOAP integration with Sales Cloud? If not, why do we need to use Version 4?

    Because we would like to use the standard integration package from SAP for External Landing Page Integration

    In the latest integration guide (2102) it is recommended to use the Communcation Arrangement SAP_COM_0342 in SAP Marketing Cloud. But this only includes Version 1 & 2 of the needed service.

    What is the recommended approach if we are using the new SOA-based integration from C4C and would like to use the External Landing Page Integration package?

    Kind regards


    • Hi Tobias Schneider

      Version 2 (and indeed the External LP integration package) completely STOP working when activating the Relationships function in SMC.

      See also and

      I did get into contact with SAP about this, and there should be an update of the CPI flow and the linked communication arrangement in SMC for this external lp integration ready in version 2105.

      • Hi Joyca Vervinckt

        thank you so much! I remembered that I read something about that from you, but wasn't able to find your question anymore. That helps a lot!

        Okay so let's hope that SAP will provide an update on the iFlow in 2105!! Did you already try to implement the Extensibility of the current iFlow and make use of version 4 of the Contact API?

        Kind regards


        • No, we didn't, we decided to not spend the development effort and to just wait for the upgrade (thus postponing our go-live with the relationships feature).

          We did have other integrations not running on CPI too though, that did have to change from using older versions to V4.

          • Joyca Vervinckt

            did you already try to use it with version 4?

            In our case we receive an error message regarding the CorporateAccountName field. Checking the API documentation I saw that it is not included in the ContactOriginData entity set anymore.

            In addition to that it looks like there are fields missing like email address. Do you know the reason for that? For me it makes no sense and I think I will create an incident for that. We need the CorporateAccountName to create B2B leads in C4C.

            BR Tobias

          • Hi Tobias Schneider

            Yes I did.

            I'm not using the CorporateAccountName field though. The forms using that interface flow are from a B2C oriented area.

            Regarding email: that does come through in my test.

            One of the main differences from V2 to V4 is that Email is no longer part of the ContactOriginData, but really sent separately as a PUT AdditionalIDs part. Which is more logical imo, as email and mobile nrs were always "the special fields" that got transformed into an additional ID anyways.

            On there's a chapter dedicated to "switching to Version 4" with some details.

          • Hi Joyca,

            thanks for providing the link. I agree that the part regarding email as additional ID makes sense.

            But I still can't find any logical explanation why CorporateAccountName has gone in V4.

  • Hi Josef Ehbauer

    could you maybe briefly explain what technically happens if we switch on the Contact Projections?

    Actually we integrated C4C and MC using SOA-based integration for the first time and already get Business Partners together with relationships. Some data (e.g. departments and functions) are related to the Relationship between the two Business Partners in MC (Contact and Account), which I could see in the Inspect Contact app (Relationship Category BUR001).

    So, just to make sure: To activate the Contact Projections is only necessary if the same Contact is related to more than one Account in C4C. Is that correct? Or is it mandatory to activate that functionality for any other reasons?

    Sorry to bother you with such basic questions.

    BR Tobias


    • Hi Tobias,

      SOAP-based integration between Sales Cloud and Marketing can be used independent from the Contact-to-Account relationship functionality, but it is a prerequisite for this capability. The new way of integration brings some advantages in terms of robustness and extensibility and is also a prerequisite for the connection of multiple Sales Cloud systems to Marketing Cloud.

      If your system provides data that one contact is related at to a unique account only, it is not necessary to activate the switch for contact-to-account relationships. In this the case the basic B2B capabilities of SAP Marketing Cloud should be  sufficient for the customer’s processes.

      Best Regards,

      • Hi Josef,

        thank you so much again for your reply.

        That's great and makes it a little bit easier, because in this case for example the API_MKT_CONTACT_SRV v2 is still working (e.g. for the Landing Page Data Integration) 🙂

        So, if the Customer at a later point in time decides to use Contact-To-Account-Relationship (because maybe in the future he will have that scenario, that a contact will be related to multiple accounts), then we could "easily" switch on that functionality because using the SOA-based integration, MC is already "prepared" for that scenario, right?

        BR Tobias

  • Hello  Josef Ehbauer

    thanks for this blog.

    And I see this functionality "B2B Contact-to-Account Relationships" is currently been delivered based on integration from SAP Sales Cloud(C4C)  to SAP Marketing Cloud.

    Are we considering integration from SAP S4 (on-premise/Cloud) to the SAP Marketing Cloud to support this feature ? I could not see any planned innovation for this. And I have few customers and they having S4 as leading system and considering this feature.

    Since S4 based integration is not being planned until 2021, we are considering for custom built integration to bring in this feature in SAP Marketing Cloud from S4. I believe we can still use the same SOAP APIs on the SAP Marketing Cloud to generate this feature. Any thoughts(suggestions) from you ?





    • Hi Kamesh,

      in order to integrate S/4HANA we recommend to use SAP Master Data Service for Business Partners. For details refer to the corresponding chapter in our integration guide.

      Best Regards,