Synthetic job example Verify Employment¶
Preview
This feature is not subject to our service terms. Pre-GA features are available as is and might have limited support.
Deterministic configuration¶
Tip
Synthetic repositories allow for streamlined testing of various scenarios and ensure your application functions correctly in submitting requests and processing resulting data.
Please see Synthetic tests to learn more about synthetic repositories.
In the table below you will learn how you produce a desired job response so you can test a specific case in your application.
| Test case | Expected event code | Necessary input values |
|---|---|---|
| Provided LinkedIn will be used | appendLinkedIn="from_input" |
You provide a LinkedIn user URL and the first letter of last name between A and M |
| Provided LinkedIn URL gets replaced by an appended LinkedIn URL | appendLinkedIn="replaced" |
You provide a LinkedIn user URL and the first letter of last name between N and Z |
| One LinkedIn URL gets appended | appendLinkedIn="appended" |
No LinkedIn URL provided and first letter of last name between A and M |
| No LinkedIn URL provided or appended | appendLinkedIn="unable_to_append" |
No LinkedIn URL provided and first letter of last name between N and Z |
| Prospect works at target company | verifyEmployment="verified" |
First letter of company name between A and I |
| Prospect left target company | verifyEmployment="changed" |
First letter of company name between J and R |
| Prospect found at another company | verifyEmployment="verified_elsewhere" |
Currently not supported in synthetic tests |
| Unable to verify the current employment | verifyEmployment="unable_to_verify" |
First letter of company name between S and Z |
Job request¶
Your application must publish the job request in the Pub/Sub topic for verifyEmployment job requests, see Pub/Sub topics.
Message attributes¶
modigieJobRequestId = personA_verifyEmployment_1-
The ID of the job request must be unique within your repository. If your repository creates the job, this request ID becomes the
idvalue of the job resource.
Message data¶
{
"payload": {
"person": {
"firstName": "John",
"lastName": "Doe",
"source": {
"objectId": "personId1",
"propertyName": "name"
}
},
"emailAddresses": [
{
"emailAddress": {
"userFormat": "jdoe@acme.com"
},
"rels": ["business"],
"source": {
"objectId": "personId1",
"propertyName": "companyEmail"
}
}
],
"employment": {
"company": {
"title": "Acme Inc.",
"source": {
"objectId": "personId1",
"propertyName": "company"
}
}
}
}
}
Job response¶
Your application can get the job response from the Pub/Sub subscription for verifyEmployment job responses, see Pub/Sub topics. Depending on the configuration of your repository this may be a pull subscription, a push subscription, or both.
Message attributes¶
modigieJobRequestId = personA_verifyEmployment_1- This is the request ID that your application used when publishing the request message. If the repository creates the job, this request ID becomes the
idvalue of the job resource.
Message data¶
The highlighted lines in the job response below show the elements that Modigie has written.
URLs, email addresses, and phone numbers—whether provided by your application as input parameters or appended by Modigie—include validated syntax information. Depending on the job type, some attributes have additional intelligence data. For details, see Job types and Outputs.
{
"createTime": "2025-08-13T13:39:39.474626Z",
"deleteTime": null,
"dispatchTime": "2025-08-13T13:39:39.944871Z",
"endTime": "2025-08-13T13:39:43.492508Z",
"events": {
"appendLinkedIn": {
"code": "appended"
},
"appendMobile": null,
"verifyEmployment": {
"code": "verified"
},
"verifyMobile": null,
"verifyPhone": null
},
"expireTime": null,
"id": "personA_verifyEmployment_1",
"jobType": "verifyEmployment",
"name": "pipelines/inpubsub_my-synth-1/jobs/personA_verifyEmployment_1",
"payload": {
"addresses": [],
"countries": [],
"emailAddresses": [
{
"emailAddress": {
"isDeliverable": true,
"isSyntaxValid": true,
"normalFormat": "jdoe@acme.com",
"rfc882Format": "jdoe@acme.com",
"userFormat": "jdoe@acme.com"
},
"rels": [
"business"
],
"source": {
"objectId": "personId1",
"objectSystem": null,
"objectType": null,
"propertyName": "companyEmail"
}
}
],
"employment": {
"company": {
"source": {
"objectId": "personId1",
"objectSystem": null,
"objectType": null,
"propertyName": "company"
},
"title": "Acme Inc.",
"verification": {
"title": "Acme Inc."
}
},
"employmentEnd": null,
"position": {
"source": null,
"title": null,
"verification": {
"title": "VP Foo Marketing"
}
}
},
"locations": [],
"person": {
"firstName": "John",
"lastName": "Doe",
"middleNames": null,
"source": {
"objectId": "personId1",
"objectSystem": null,
"objectType": null,
"propertyName": "name"
}
},
"phoneNumbers": [],
"tags": [],
"urls": [
{
"rels": [
"linkedInUser"
],
"source": null,
"url": {
"includesAuthority": true,
"isRemote": true,
"isResolvable": true,
"isSyntaxValid": true,
"normalFormat": "https://www.linkedin.com/in/not-a-real-profile/",
"rfc3986Format": {
"fragment": "",
"hostname": "www.linkedin.com",
"netloc": "www.linkedin.com",
"params": "",
"password": null,
"path": "/in/not-a-real-profile/",
"port": null,
"query": "",
"scheme": "https",
"username": null
},
"userFormat": "https://www.linkedin.com/in/not-a-real-profile/"
}
}
]
},
"priority": 50,
"purgeTime": null,
"reason": null,
"repository": {
"id": "my-synth-1",
"name": "orgs/Q8IRqGvOcGG8lt4dWa3e/repositories/my-synth-1",
"org": {
"id": "Q8IRqGvOcGG8lt4dWa3e",
"name": "orgs/Q8IRqGvOcGG8lt4dWa3e"
},
"repoType": "inpubsub"
},
"startTime": "2025-08-13T13:39:40.038714Z",
"status": "completed",
"updateTime": "2025-08-13T13:39:43.492508Z"
}