Event Lead Sync Forms
Warning
Deprecation Notice
The Event Lead Sync APIs have been deprecated and will reach end of life at the end of July, 2024. New integrations should use the new Lead Sync APIs
Warning
Deprecation Notice
The Marketing Version 202310 (Marketing October 2023) and earlier versions (excluding 202306 and 202307) have been sunset. Additionally, the unversioned APIs will be sunset soon. We recommend that you migrate to the versioned APIs as well as migrate to the new Content and Community Management APIs to avoid disruptions. See the Migration page for more details.
If you haven’t yet migrated and have questions, submit a request on the LinkedIn Developer Support Portal.
LinkedIn Events support the attachment of LinkedIn Lead Sync Forms to collects leads of those attending an event. This page documents the APIs required to build an Events Lead Sync integration. Permissioning and APIs for ingesting event leads are not the same as ad leads. Developers supporting ad leads will need to build a different integration to support event leads. Review the Event Lead Sync Forms Integration Requirements and the Events API for more information.
The following APIs are designed to support Lead Sync Forms on Events end to end.
leadSyncForms
- Get or find Lead Sync Forms that will appear on LinkedIn.leadGenFormQuestions
- Fetch individual Lead Sync Form questions.eventFormResponses
- Fetch response data of Lead Sync Forms.leadGenFormLegalInfo
- Get the legal disclaimer and consents of the Lead Sync Form shown to viewer
Note
All API requests are represented in protocol 2.0.0 and require the header X-Restli-Protocol-Version: 2.0.0
.
Permissions
Lead Sync is a separate program than the LinkedIn Marketing API Program. Access to the LinkedIn Marketing API Program does not automatically grant access to these APIs. Developers must apply separately to be considered for Lead Sync APIs.
Permission | Description | Endpoints |
---|---|---|
r_events_leadgen_automation | Retrieve organization’s events and leads associated with those events. |
|
Lead Sync Forms
Lead Sync Forms are used to request data from members responding to the Lead Sync Form. Lead Sync Forms can include multiple questions, hidden fields, and custom consent checkboxes. Many of these components are structured as sub-objects of the Lead Sync Form. In the next section, schemas of the parent and sub-objects are defined.
Lead Sync Form Schema
Field | Type | Description |
---|---|---|
content | DisplayContent | Content of the Lead Sync Form which will be displayed to the viewer. |
created.time | Long | Creation time. |
creationLocale | Locale | Locale of the entity. This will be the preferred locale for the localizable fields in the entities. |
deleted.time | Long | Deletion time. |
hiddenFields | HiddenField[] | Hidden fields used by the owner to track key attributes of the form that generated the lead. This field can be empty if the owner chooses to not append any tracking attributes to the LeadGenForm. |
id | long | Numerical identifier for the form. |
lastModified.time | Long | Last modified time. |
name | string | Name of the Lead Sync Form provided by the owner. |
owner | LeadGenOwner | URN that identifies the owner of the Lead Sync Form. |
state | LeadGenLifecycleState | Information about the current state of the Lead Sync Form. |
versionId | int | The version id of the form. This is a derived field and is generated on server side. The new version will be generated if the LifecycleState is not DRAFT or ARCHIVED. Clients can not assign a versionId. |
versionTag | String | The number of times the form has been modified. |
DisplayContent Sub-Object
DisplayContent
is a leadGenForm
sub-object which represents the form content to be shown to the viewers for collecting responses.
Field | Type | Description |
---|---|---|
description | Optional MultiLocaleString | Description of the form. Optional since the owner may choose to not have this information. |
headline | MultiLocaleString | Headline of the form. |
legalInfo | LeadGenFormLegalInfoUrn | Legal information displayed alongside the Lead Sync Form. |
postSubmissionInfo | optional PostSubmissionInfo | Information displayed to the user after submitting the form (e.g. thank you message, etc.). Optional since not all lead generation use cases require a post submission experience. |
questions | LeadGenFormQuestionUrn[] | Questions to request information from the viewer. Atleast one question should be present. |
hiddenFields Sub-Object
hiddenFields
is a sub-object of leadGenForm
that is structured as an array of hidden fields. Hidden fields are not displayed on the form, but can be used by advertisers for tracking purposes.
The maximum number of hidden fields is 20.
Field | Type | Description |
---|---|---|
name | string | The name of the hidden field. |
value | string | The content of the hidden field. |
LeadGenLifecycleState Sub-Object
LeadGenLifecycleState
is an enum sub-object of leadGenForm
that indicate the lifecycle stage of a Lead Sync form.
Enum
Symbol | Description |
---|---|
DRAFT | The form is still being edited. |
PROCESSING | The form is undergoing processing (e.g. review) and is not published. |
PUBLISHED | The form is published, i.e. it has gone through processing (e.g. manual review) and is ready to be used. |
ARCHIVED | The form is archived. |
Get Lead Sync Forms
Lead Sync Forms can be fetched 3 different ways.
Find Forms by Owner
This endpoint returns all forms that belong to a specified Owner. This endpoint requires q=owner
and a organization
or sponsoredAccount
URN in the owner
parameter. The API requires Restli 2.0 header and URL encoding of URNs in the URL.
Since an owner can have a large volume of Lead Sync Forms, this API supports pagination using the count
and start
parameters.
Parameters
Parameter | Type | Description |
---|---|---|
q | String | You must always set this to owner. It indicates that you're querying based on owner, and it's the only FINDER type currently available for Lead Sync Forms. |
owner | SponsoredAccountUrn/OrganizationUrn | URN identifying the owner of the Lead Sync Form. This is the advertiser account or organization. |
count | Number | How many results to display on each page. |
start | Number | The index of the form to begin your result page at. Indexes start at 0. Default is 0. |
Sample Request
GET https://api.linkedin.com/v2/leadGenForms?owner=(organization:urn%3Ali%3Aorganization%3A5509810)&q=owner&count=1&start=0
Sample Response
{
"elements": [
{
"owner": {
"organization": "urn:li:organization:5509810"
},
"hiddenFields": [
{
"name": "Entity name",
"value": "WOW"
}
],
"versionId": 1,
"created": {
"time": 1614831481070
},
"creationLocale": {
"country": "US",
"language": "en"
},
"name": "Lead Sync form for WOW",
"lastModified": {
"time": 1614831481070
},
"state": "PUBLISHED",
"id": 6773094140390494208,
"content": {
"questions": [
"urn:li:leadGenFormQuestion:10548",
"urn:li:leadGenFormQuestion:10540",
"urn:li:leadGenFormQuestion:9244",
"urn:li:leadGenFormQuestion:9252",
"urn:li:leadGenFormQuestion:9236"
],
"description": {
"localized": {
"en_US": "Share your information below with Mario Kart 8 Deluxe to be contacted with more information about WOW"
}
},
"headline": {
"localized": {
"en_US": "Contact Mario Kart 8 Deluxe about WOW"
}
},
"legalInfo": "urn:li:leadGenFormLegalInfo:10516"
}
}
],
"paging": {
"start": 0,
"count": 1,
"links": [
{
"type": "application/json",
"rel": "next",
"href": "/v2/leadGenForms?owner=(organization:urn%3Ali%3Aorganization%3A5509810)&q=owner&count=1&start=1"
}]
},
}
Get A Lead Sync Form
Individual Lead Sync Forms can be requested using the endpoint below that only requires Lead Sync Form ID.
Sample Request
Sample Response
{
"owner": {
"organization": "urn:li:organization:5509810"
},
"hiddenFields": [
{
"name": "Entity name",
"value": "Nimbus 2000"
}
],
"versionId": 1,
"created": {
"time": 1610579725356
},
"creationLocale": {
"country": "US",
"language": "en"
},
"name": "Lead Sync form for Nimbus 2000",
"lastModified": {
"time": 1610579725356
},
"state": "PUBLISHED",
"id": 6755260984438374400,
"content": {
"questions": [
"urn:li:leadGenFormQuestion:10548",
"urn:li:leadGenFormQuestion:10540",
"urn:li:leadGenFormQuestion:9244",
"urn:li:leadGenFormQuestion:9252",
"urn:li:leadGenFormQuestion:9236"
],
"description": {
"localized": {
"en_US": "Share your information below with {localized={en_US=Mario Kart 8 Deluxe, es_ES=Mario Coche 8 Deluxe}, preferredLocale={country=US, language=en}} to be contacted with more information about Nimbus 2000"
}
},
"headline": {
"localized": {
"en_US": "Contact {localized={en_US=Mario Kart 8 Deluxe, es_ES=Mario Coche 8 Deluxe}, preferredLocale={country=US, language=en}} about Nimbus 2000"
}
},
"legalInfo": "urn:li:leadGenFormLegalInfo:5604"
}
}
Get A Lead Sync Form Of A Specific Version
Individual Lead Sync Forms can be requested using the endpoint below that only requires Lead Sync Form ID and version number.
Sample Request
Sample Response
{
"owner": {
"organization": "urn:li:organization:5509810"
},
"hiddenFields": [
{
"name": "Entity name",
"value": "Nimbus 2000"
}
],
"versionId": 1,
"created": {
"time": 1610579725356
},
"creationLocale": {
"country": "US",
"language": "en"
},
"name": "Lead Sync form for Nimbus 2000",
"lastModified": {
"time": 1610579725356
},
"state": "PUBLISHED",
"id": 6755260984438374400,
"content": {
"questions": [
"urn:li:leadGenFormQuestion:10548",
"urn:li:leadGenFormQuestion:10540",
"urn:li:leadGenFormQuestion:9244",
"urn:li:leadGenFormQuestion:9252",
"urn:li:leadGenFormQuestion:9236"
],
"description": {
"localized": {
"en_US": "Share your information below with {localized={en_US=Mario Kart 8 Deluxe, es_ES=Mario Coche 8 Deluxe}, preferredLocale={country=US, language=en}} to be contacted with more information about Nimbus 2000"
}
},
"headline": {
"localized": {
"en_US": "Contact {localized={en_US=Mario Kart 8 Deluxe, es_ES=Mario Coche 8 Deluxe}, preferredLocale={country=US, language=en}} about Nimbus 2000"
}
},
"legalInfo": "urn:li:leadGenFormLegalInfo:5604"
}
}
Get Lead Sync Form Questions
The Lead Sync Form Questions API provides details on individual Lead Sync questions. These can be fetched individually or as a batch request.
Get Questions Of A Single Lead Sync Form
The questions of an individual Lead Sync Form can be requested by using Lead Sync form id.
Sample Request
Sample Response
{
"owner": {
"organization": "urn:li:organization:1111"
},
"textPrompt": {
"localized": {
"en_US": "This is a test"
}
},
"question": {
"localized": {
"en_US": "This is a test"
}
},
"responseEditable": false,
"created": {
"time": 1594933049259
},
"creationLocale": {
"country": "US",
"language": "en"
},
"name": "Wassup!",
"questionDetails": {
"com.linkedin.leadgenform.TextQuestionDetails": {
"defaultResponse": "random",
"maxResponseLength": 50
}
},
"predefinedField": "EMAIL",
"lastModified": {
"time": 1594933049259
},
"id": 920,
"responseRequired": true
}
Fetch Questions Of Multiple Lead Sync Forms
Questions of multiple Lead Sync forms can be requested by passing a list of Lead Sync form ids with ids
parameter. The API requires Restli 2.0 header.
Sample Request
Sample Response
{
"results": {
"6404": {
"owner": {
"organization": "urn:li:organization:5645768"
},
"question": {
"localized": {
"en_US": "First Name"
}
},
"responseEditable": false,
"created": {
"time": 1605783789583
},
"creationLocale": {
"country": "US",
"language": "en"
},
"name": "firstName",
"questionDetails": {
"com.linkedin.leadgenform.TextQuestionDetails": {
"maxResponseLength": 300
}
},
"predefinedField": "FIRST_NAME",
"lastModified": {
"time": 1605783789583
},
"id": 6404,
"responseRequired": true
},
"920": {
"owner": {
"organization": "urn:li:organization:1111"
},
"textPrompt": {
"localized": {
"en_US": "This is a test"
}
},
"question": {
"localized": {
"en_US": "This is a test"
}
},
"responseEditable": false,
"created": {
"time": 1594933049259
},
"creationLocale": {
"country": "US",
"language": "en"
},
"name": "Wassup!",
"questionDetails": {
"com.linkedin.leadgenform.TextQuestionDetails": {
"defaultResponse": "random",
"maxResponseLength": 50
}
},
"predefinedField": "EMAIL",
"lastModified": {
"time": 1594933049259
},
"id": 920,
"responseRequired": true
}
},
"statuses": {},
"errors": {}
}
Get Event Lead Sync Form Responses
The Lead Sync Form Responses API returns the response data for leads that filled out a Lead Sync form. Collecting Event Lead Sync Form Responses requires the viewer is the owner of the Lead Sync form.
Lead Sync Form Response Schema
Field | Type | Description |
---|---|---|
associatedEntity | optional Union of SponsoredCreativeUrn , com.linkedin.common.OrganizationUrn , EventUrn , StandardizedProductUrn | URN identifying which entity the lead is associated with. This field is optional for test leads and other use cases where leads don't have any associatedEntity. |
form | VersionedLeadGenFormUrn | URN identifying which form this response responds to. |
formResponse | FormResponse | Answers provided by the submitter. |
id | string | Unique id to identify the LeadGenFormResponse. The id contains information about colo id and unique identifier id. |
leadMetadata | optional Union of SponsoredLeadMetadata | Metadata of a lead. These fields are optional since they may only be relevant for certain use cases, e.g, campaign for sponsored leads. |
leadType | LeadType | Type of the lead representing the origination of the lead. |
owner | LeadGenFormResponseOwner | Entity that owns this LeadGenFormResponse. |
responseId | TrackingId | The unique identifier for the form response generated in the front-end when a submitter submits the response. |
submittedAt | Time | Timestamp recording when the form response was submitted. |
submitter | MemberUrn | URN identifying which member submitted this LeadGenFormResponse. |
testLead | boolean, default=false | Whether this is a test lead created for testing purpose. |
Find Event Form Responses by Owner
Response can be retrieved for a specified owner. This endpoint takes in 2 required parameters: q=owner
and owner={OrganizationUrn or SponsoredAccountUrn}
. This API requires Restli 2.0 header and URL encoding URNs in URL.
Parameters
Parameter | Type | Description |
---|---|---|
q | String | You must always set this to owner. It indicates that you're querying based on owner. |
owner | LeadGenFormResponseOwner | Required urn indicating the LeadGenFormResponseOwner of the LeadGenFormResponse, e.g. OrganizationUrn or SponsoredAccountUrn. |
associatedEntity | optional Urn | Optional urn indicating which entity the lead is associated with, e.g. SponsoredCreativeUrn or OrganizationUrn. If specified, return the corresponding LeadGenFormResponses associated with the associatedEntity, otherwise return all results not applying this filter. |
leadType | LeadType | Indicates LeadType used to filter LeadGenFormResponses. |
limitedToTestLeads | boolean(default=false) | If true, only return the test leads matching the filtering criteria. Clients could use this filter to only retrieve test leads for the purpose of testing the functionality of LeadGenForm. By default the value is false and will return all the leads matching the filtering criteria. |
submittedAtTimeRange | optional TimeRange | Optional field indicating the lead submitted time range filter. If specified, return the corresponding LeadGenFormResponses for the time range, otherwise return all results not applying this filter. |
versionedLeadGenFormUrn | optional VersionedLeadGenFormUrn | Optional field indicating the specific form and version to retrieve the LeadGenFormResponse. If specified, return the corresponding LeadGenFormResponses for the versionedLeadGenFormUrn, otherwise return all results not applying this filter. |
Sample Request
Sample Response
{
"paging": {
"start": 0,
"count": 10,
"links": [],
"total": 128
},
"elements": [
{
"owner": {
"organization": "urn:li:organization:5521643"
},
"submitter": "urn:li:person:eCO_JFeEQ3",
"form": "urn:li:versionedLeadGenForm:(urn:li:leadGenForm:513,23)",
"leadType": "EVENT",
"leadMetadata": {
"com.linkedin.leadgenform.SponsoredLeadMetadata": {
"campaign": "urn:li:sponsoredCampaign:123"
}
},
"id": "7c8da715-1778-4775-b591-74dd2637a253-5",
"submittedAt": 1598481566354,
"responseId": "±÷ñô\x05ñL.±?\x91öb-IK",
"formResponse": {
"consentResponses": [
{
"consent": "urn:li:leadGenFormConsent:(urn:li:leadGenFormLegalInfo:321,4)",
"accepted": true
}
],
"answers": [
{
"question": "urn:li:leadGenFormQuestion:1",
"answerDetails": {
"com.linkedin.leadgenform.TextQuestionAnswer": {
"answer": "Hello World-testing purpose"
}
}
},
{
"question": "urn:li:leadGenFormQuestion:2",
"answerDetails": {
"com.linkedin.leadgenform.MultipleChoiceAnswer": {
"options": [
1,
3
]
}
}
}
]
},
"testLead": false,
"associatedEntity": {
"associatedCreative": "urn:li:sponsoredCreative:100"
}
},
]
}
Get Event Form Responses by Time Range
Sample Request
GET https://api.linkedin.com/rest/eventFormResponses?q=owner&owner=(organization:urn%3Ali%3Aorganization%3A1234123)&submittedAtTimeRange.start=123&submittedAtTimeRange=456&versionedLeadGenFormUrn=urn%3Ali%3AversionedLeadGenForm%3A%28urn%3Ali%3AleadGenForm%3A987654321%2C1%29&projection=(paging,elements*(id,owner,associatedEntity,leadType,submittedAt,testLead,form~(hiddenFields),formResponse(consentResponses,answers*(question~(name),answerDetails))))
GET https://api.linkedin.com/v2/eventFormResponses?q=owner&owner=(organization:urn%3Ali%3Aorganization%3A1234123)&submittedAtTimeRange.start=123&submittedAtTimeRange=456&versionedLeadGenFormUrn=urn%3Ali%3AversionedLeadGenForm%3A%28urn%3Ali%3AleadGenForm%3A987654321%2C1%29&projection=(paging,elements*(id,owner,associatedEntity,leadType,submittedAt,testLead,form~(hiddenFields),formResponse(consentResponses,answers*(question~(name),answerDetails))))
Sample Response
{
"elements": [{
"id": "19b5348a-f045-48bd-a1f5-990913b41b94-5",
"owner": {
"organization": "urn:li:organization:5521643"
},
"associatedEntity": {
"standardizedProduct": "urn:li:standardizedProduct:10223"
},
"form": "urn:li:versionedLeadGenForm:(urn:li:leadGenForm:818,1)",
"leadType": "EVENT",
"submittedAt": 200,
"testLead": false,
"formResponse": {
"answers": [{
"answerDetails": {
"com.linkedin.leadgenform.TextQuestionAnswer": {
"answer": "First Name"
}
},
"question": "urn:li:leadGenFormQuestion:123",
"question~": {
"name": "firstName"
}
},
{
"answerDetails": {
"com.linkedin.leadgenform.TextQuestionAnswer": {
"answer": "Last Name"
}
},
"question": "urn:li:leadGenFormQuestion:345",
"question~": {
"name": "lastName"
}
}
],
"consentResponses": [{
"consent": "urn:li:leadGenFormConsent:(urn:li:leadGenFormLegalInfo:321,4)",
"accepted": true
}]
},
"form~": {
"hiddenFields": [{
"name": "myHiddenField1",
"value": "LSNR-1234-LI-MKTG"
},
{
"name": "myHiddenField2",
"value": "LSNR-4567-LI-MKTG"
}
]
}
}],
"paging": {
"count": 10,
"links": [],
"start": 0
}
}
Get Multiple Event Lead Sync Form Responses
If you already know the IDs of multiple Lead Sync Forms you wish to fetch response, you can fetch the response by using ids
parameter. The API requires Restli 2.0 header.
The maximum number of permitted ids
is 1000.
Sample Request
Sample Response
{
"results": {
"fc839480-f6af-40f9-b158-75540a73625e-5": {
"owner": {
"organization": "urn:li:organization:5521643"
},
"submitter": "urn:li:person:Wh0cGzYUpS",
"form": "urn:li:versionedLeadGenForm:(urn:li:leadGenForm:316,11)",
"leadType": "EVENT",
"leadMetadata": {
"com.linkedin.leadgenform.SponsoredLeadMetadata": {
"campaign": "urn:li:sponsoredCampaign:1234334"
}
},
"id": "fc839480-f6af-40f9-b158-75540a73625e-5",
"submittedAt": 1598481566354,
"responseId": "±÷ñô\x05ñL.±?\x91öb-IK",
"formResponse": {
"consentResponses": [
{
"consent": "urn:li:leadGenFormConsent:(urn:li:leadGenFormLegalInfo:321,4)",
"accepted": true
}
],
"answers": [
{
"question": "urn:li:leadGenFormQuestion:1",
"answerDetails": {
"com.linkedin.leadgenform.TextQuestionAnswer": {
"answer": "Hello World-testing purpose"
}
}
},
{
"question": "urn:li:leadGenFormQuestion:2",
"answerDetails": {
"com.linkedin.leadgenform.MultipleChoiceAnswer": {
"options": [
1,
3
]
}
}
}
]
},
"testLead": false,
"associatedEntity": {
"associatedCreative": "urn:li:sponsoredCreative:82682672"
}
},
"130169ef-1e17-4440-8500-48a36889c105-5": {
"owner": {
"organization": "urn:li:organization:5521643"
},
"submitter": "urn:li:person:VWrY0JAnSb",
"form": "urn:li:versionedLeadGenForm:(urn:li:leadGenForm:316,11)",
"leadType": "EVENT",
"leadMetadata": {
"com.linkedin.leadgenform.SponsoredLeadMetadata": {
"campaign": "urn:li:sponsoredCampaign:1234333"
}
},
"id": "130169ef-1e17-4440-8500-48a36889c105-5",
"submittedAt": 1598481566354,
"responseId": "±÷ñô\x05ñL.±?\x91öb-IK",
"formResponse": {
"consentResponses": [
{
"consent": "urn:li:leadGenFormConsent:(urn:li:leadGenFormLegalInfo:321,4)",
"accepted": true
}
],
"answers": [
{
"question": "urn:li:leadGenFormQuestion:1",
"answerDetails": {
"com.linkedin.leadgenform.TextQuestionAnswer": {
"answer": "Hello World-testing purpose"
}
}
},
{
"question": "urn:li:leadGenFormQuestion:2",
"answerDetails": {
"com.linkedin.leadgenform.MultipleChoiceAnswer": {
"options": [
1,
3
]
}
}
}
]
},
"testLead": false,
"associatedEntity": {
"associatedCreative": "urn:li:sponsoredCreative:82682671"
}
}
},
"statuses": {},
"errors": {}
}
Get Lead Sync Form Legal Information
The legal information of a Lead Sync form can be fetched with the id
of the Lead Sync form.
Sample Request
Sample Response
{
"owner": {
"organization": "urn:li:organization:1111"
},
"created": {
"time": 1594933148752
},
"creationLocale": {
"country": "US",
"language": "en"
},
"consents": [
{
"consent": {
"localized": {
"en_US": "this is a consent 1"
}
},
"checkRequired": true,
"id": 1
},
{
"consent": {
"localized": {
"en_US": "this is a consent 2"
}
},
"checkRequired": false,
"id": 2
}
],
"id": 4,
"lastModified": {
"time": 1588835964
},
"privacyPolicyUrl": "http://www.linkedin.com/privacy",
"legalDisclaimer": {
"localized": {
"en_US": "this is a legalDisclaimer"
}
}
}
Get Lead Sync Form Consent
The consent of a Lead Sync form can be fetched with the id
of the Lead Sync form and the id of the consent.
Sample Request
Sample Response
{
"consent": {
"localized": {
"en_US": "this is a consent 1"
}
},
"checkRequired": true,
"id": 1
}
Envisioned End-to-End Flow
Partners are free to build any front-end user experience while offering either a generic LinkedIn Lead Sync connector or creating a separate connector/product for Events Lead Sync. To integrate with the new APIs and related entity APIs, we recommend the following flow:
Step 1: Add r_events_leadgen_automation
permission to the OAuth flow
Adding a new permission will require your users to re-auth. Your rollout of this must be planned carefully. We recommend using a development environment app to build out the feature first, getting it certified by LinkedIn, and then deciding on a ramp plan to production.
Step 2: Get user's Organizations
In order to support collecting leads for events hosted on LinkedIn Company Pages(a.k.a. organizations), a partner app needs to build a UX where a user is able to select the organizations, events, and forms to collect leads for. In this step, you'll retrieve a list of all the organizations that the logged in user is an Admin of. Additional information on this API is available on the Organization Access Control page.
Step 3: Get user's Events for all their Organizations
This step helps narrow down the organizations which are hosting online events and for which leads can be collected. Refer to the Events API page for samples of this API.
Step 4: Get Lead Sync Form tied to user's Events
At this point, the user commits to picking the organization and the event they are trying to collect leads for. This step retrieves the form associated with that selected event. Please refer to the sample in Find Forms by Owner.
Step 5: Ask the user to select and map fields
Your app's UI should ask the user to map fields between source(Form tied to the selected event) and destination(which is most likely a CRM table). User should be able to map all possible fields including hidden fields, custom questions and consent texts.
Step 6: Start collecting leads via periodic PULL requests
Once the setup is complete, pull leads at periodic intervals to check for new leads and sync them over to the CRM. The partner app also builds resiliency by adding an option to pull back dated leads (upt o 90 days) by using timeRange parameters in the API calls. Refer to Get Event Lead Sync Form Responses for sample requests.