Linked In Profile
These operations validate the LinkedIn URL of a person and, from a name plus company context, look one up. The route decides the kind of page rather than the request body: this tag covers personal profiles (.../in/) only. A search is answered from public web search over the names, company and country supplied; no LinkedIn account, session or credential is used.
Four dimensions are scored:
Completeness: whether a LinkedIn profile URL is present.
Validity: whether the URL follows LinkedIn's accepted format (no existence check).
Consistency: whether the input equals the normalized canonical person form (
.../in/).Accuracy: whether the URL matches the context supplied (first and last name, optionally company name and website).
The result carries a normalized LinkedIn profile URL and those scores. When the context suggests a mismatch or uncertainty, candidate profiles are returned ranked, each with a confidence score and the details read from the search result. LinkedIn Company Page covers organizations; the two are priced and permissioned separately.
Submit an asynchronous job to find and validate the LinkedIn profile of a PERSON: send url to validate one, or first_name and last_name with company_name or website to search for one. Returns a job_id — pass it to getLinkedInProfileResult to retrieve the canonical profile URL plus accuracy and validity scores.
Two modes:
Validate an existing profile — supply
url.Search — supply
first_name+last_nameplus company context (company_nameand/orwebsite); anemailcontributes only its domain, aswebsitewould. Company context narrows the search among people who share a name; without it a namesake can rank first, and for a very common name a namesake can rank first even with it.
findAndValidateLinkedInCompanyPage covers a COMPANY's page — this operation looks for /in/ profiles only.
The search is built only from the fields in this request; nothing carries over from a previous job.
These results are processed in real time from public web search: Google results, retrieved through Google Custom Search API or a SERP provider. No LinkedIn account, session or credential is used, and no contact database or third-party database is consulted. The name, company and country you supply are sent to that search provider. An email address you supply never leaves Delpha: only its domain is used, as a company website, and a company website is requested directly only when no name is given. A URL you submit for validation is never requested: its format is checked, and it may be searched for through that search provider.
A live-mode call reserves credits and creates a job record retained for 10 days; unless your team has set resolution retention to 0, the call and its result are also recorded in your team's resolution history for the window your team configured (up to 30 days on the free tier, 180 on a paid plan). Re-submitting the same input starts a new job and a new charge, unless the request carries an Idempotency-Key already used with the same body within the last 24 hours — that returns the original job_id and reserves nothing. Test-mode calls are answered from the published fixture table and reserve nothing — see the API documentation's Test mode section.
- : Access to the public API
OAuth 2.0 client-credentials flow (machine-to-machine). Token URL: https://secure.delpha.io/oauth2/token. The api/access scope is all-access: it grants every operation this document publishes. Per-use-case scoping, per-key credit ceilings and expiry are properties of an API key, not of this flow — use an API key when a credential must be restricted.
Payload to submit a new LinkedIn quality job.
LinkedIn profile URL to validate (e.g. https://www.linkedin.com/in/jordan-rivera-000000000/). When set, the operation runs in validation mode.
nullExample: https://www.linkedin.com/in/jordan-rivera-000000000/Employer website (e.g. https://delpha.io/). The employer domain disambiguates a person who shares a name with others. Optional.
nullExample: https://delpha.io/Company the person works at (e.g. Delpha). Company affiliation separates people who share a name; paired with website it narrows the search further. Optional.
nullExample: DelphaPerson's given name (e.g. Jordan). Required when url is not supplied.
nullExample: JordanPerson's family name (e.g. Rivera). Pair with first_name.
nullExample: RiveraAn email at the person's employer domain (e.g. jordan.rivera@delpha.io). Only its domain is used, as the employer website when website is absent; the address itself never leaves Delpha. Optional.
nullExample: jordan.rivera@delpha.ioThe person's country, used to disambiguate the match (e.g. France or FR). Accepts an ISO 3166-1 alpha-2 code or a plain English country name. Optional.
nullExample: FranceAccepted / still running — poll the result route with the returned job_id.
Validation error — the request body or query parameters were rejected.
Authentication failed — invalid or missing OAuth 2.0 token or API key.
Payment required — the team has insufficient credits.
Forbidden — the credential is valid but not allowed here: the API key's scopes do not cover this operation, or the operation is not routed in this environment (API Gateway then answers Missing Authentication Token).
Conflict — the Idempotency-Key was already used with a different request body (idempotency_key_reuse: a new key admits the new body, the original body replays the original job), or the original request with this key is still being processed (idempotency_in_progress: the same request answers with the original job once that one is admitted).
Too many requests — one of two limits was exceeded. Your allowance for this operation in the current 60-second window: an Error body with code: rate_limited, Retry-After set to the seconds left in the window, and the quota headers with X-RateLimit-Remaining: 0; nothing is charged. Or the per-operation floor every caller of that operation shares: a GatewayError body with Retry-After: 1 and no quota headers, refused before the API sees the request.
Internal error.
Bad gateway — the upstream service returned an error.
POST /v1/linkedin-profile HTTP/1.1
Host: api.delpha.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 213
{
"url": "https://www.linkedin.com/in/jordan-rivera-000000000/",
"website": "https://delpha.io/",
"company_name": "Delpha",
"first_name": "Jordan",
"last_name": "Rivera",
"email": "jordan.rivera@delpha.io",
"country": "France"
}{
"code": "ok",
"request_id": "c1a2b3d4-0000-4a5b-8c9d-ef0123456789",
"job_id": "21014abc65004d2781d2e0ef4c9fbb46",
"message": "Job submitted",
"status": "SUCCESS",
"status_code": 202
}Fetch the result of a previously submitted findAndValidateLinkedInProfile job by job_id. On success, the result payload contains the canonical profile URL, accuracy and validity scores, and a recommendations array of candidate profiles (each carrying url, headline, desc, company_name, location, profile_name, and a confidence score) when the match is uncertain. In search mode the top-level label and scores are often "No" and 0 while recommendations still holds the candidates. A namesake can outrank the intended person even when company context was supplied, so recommendations[0] is a ranked candidate rather than a confirmed match; each candidate's company_name and desc are what distinguish one from another.
Reading a result starts no work and adds no charge, but it finalizes the job's accounting once: the job's charge is settled when its result is first delivered, and refunded when the job failed, exceeded its time limit or produced no usable result — a job past its time limit is marked failed by that read. Repeating the call returns the same answer and never charges again.
- : Access to the public API
OAuth 2.0 client-credentials flow (machine-to-machine). Token URL: https://secure.delpha.io/oauth2/token. The api/access scope is all-access: it grants every operation this document publishes. Per-use-case scoping, per-key credit ceilings and expiry are properties of an API key, not of this flow — use an API key when a credential must be restricted.
Opaque job identifier returned by findAndValidateLinkedInProfile.
{"value":"21014abc65004d2781d2e0ef4c9fbb46","summary":"Sample job ID"}Job succeeded — the result payload is populated.
Accepted / still running — poll the result route with the returned job_id.
Validation error — the request body or query parameters were rejected.
Authentication failed — invalid or missing OAuth 2.0 token or API key.
Forbidden — the credential is valid but not allowed here: the API key's scopes do not cover this operation, or the operation is not routed in this environment (API Gateway then answers Missing Authentication Token).
Not found — no job exists for this id, or it belongs to another team.
Conflict — the credit reservation expired before delivery; resubmit.
Too many requests — one of two limits was exceeded. Your allowance for this operation in the current 60-second window: an Error body with code: rate_limited, Retry-After set to the seconds left in the window, and the quota headers with X-RateLimit-Remaining: 0; nothing is charged. Or the per-operation floor every caller of that operation shares: a GatewayError body with Retry-After: 1 and no quota headers, refused before the API sees the request.
Internal error.
Service unavailable — a downstream dependency was unreachable.
Gateway timeout — the job exceeded its processing ceiling.
GET /v1/linkedin-profile/{job_id} HTTP/1.1
Host: api.delpha.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
{
"code": "ok",
"request_id": "c1a2b3d4-0000-4a5b-8c9d-ef0123456789",
"message": "Job succeeded.",
"status": "SUCCESS",
"status_code": 200,
"result": {
"data_type": "social_network",
"normalized_value": "https://www.linkedin.com/in/jordan-rivera-000000000/",
"label": "OK",
"scores": {
"accuracy": 0.8711710601954503,
"completeness": 1,
"consistency": 1,
"validity": 1
},
"recommendations": [
{
"url": "https://www.linkedin.com/in/jordan-rivera-000000000/",
"score": 0.8711710601954503,
"headline": "Jordan Rivera - Delpha",
"rank": 1,
"desc": "Data Engineer & Cloud specialist - AWS · Experience: Delpha · Education: ESILV - Ecole Supérieure d'Ingénieurs Léonard de Vinci · Location: Paris · 500+ ...",
"company_name": "Delpha",
"location": "Paris",
"profile_name": "Jordan Rivera",
"job_title": "Data Engineer & Cloud specialist",
"match_score": 0.8711710601954503,
"ambiguity_n": 1
}
],
"recommendation_status": "confident",
"fallback_used": false,
"url_changed": false,
"suggested_url": null,
"type": "linkedin"
},
"process_time": 0.123
}Submit 1..100 LinkedIn profile items for asynchronous batch processing as ONE job (never a per-item fan-out). Returns a job_id immediately (202); poll GET /v1/linkedin-profile/batch/{job_id} for status and results. Each item follows LinkedInProfileSubmitInputBatchItem; see that component for its fields. It uses the runtime validation of POST /v1/linkedin-profile. A payload with 0 items or more than 100 is rejected with 422.
A live-mode call reserves credits and creates a job record retained for 10 days; unless your team has set resolution retention to 0, the call and its result are also recorded in your team's resolution history for the window your team configured (up to 30 days on the free tier, 180 on a paid plan). Re-submitting the same input starts a new job and a new charge, unless the request carries an Idempotency-Key already used with the same body within the last 24 hours — that returns the original job_id and reserves nothing. Test-mode calls are answered from the published fixture table and reserve nothing — see the API documentation's Test mode section.
- : Access to the public API
OAuth 2.0 client-credentials flow (machine-to-machine). Token URL: https://secure.delpha.io/oauth2/token. The api/access scope is all-access: it grants every operation this document publishes. Per-use-case scoping, per-key credit ceilings and expiry are properties of an API key, not of this flow — use an API key when a credential must be restricted.
Batch envelope for POST /v1/linkedin-profile/batch: {"items": [...]} (1..100 items, 422 beyond). Each item follows LinkedInProfileSubmitInputBatchItem; see that component for its fields. It uses the runtime validation of POST /v1/linkedin-profile.
Accepted / still running — poll the result route with the returned job_id.
Authentication failed — invalid or missing OAuth 2.0 token or API key.
Payment required — the team has insufficient credits.
Forbidden — the credential is valid but not allowed here: the API key's scopes do not cover this operation, or the operation is not routed in this environment (API Gateway then answers Missing Authentication Token).
Conflict — the Idempotency-Key was already used with a different request body (idempotency_key_reuse: a new key admits the new body, the original body replays the original job), or the original request with this key is still being processed (idempotency_in_progress: the same request answers with the original job once that one is admitted).
Unprocessable entity — the request is well-formed but cannot be processed: a documented size/shape bound was violated (validation_error), or a legal-ID request names a registry / country Delpha cannot query (unsupported_registry — refused before any credit is reserved; the message lists the supported countries).
Too many requests — one of two limits was exceeded. Your allowance for this operation in the current 60-second window: an Error body with code: rate_limited, Retry-After set to the seconds left in the window, and the quota headers with X-RateLimit-Remaining: 0; nothing is charged. Or the per-operation floor every caller of that operation shares: a GatewayError body with Retry-After: 1 and no quota headers, refused before the API sees the request.
Internal error.
Bad gateway — the upstream service returned an error.
POST /v1/linkedin-profile/batch HTTP/1.1
Host: api.delpha.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 225
{
"items": [
{
"url": "https://www.linkedin.com/in/jordan-rivera-000000000/",
"website": "https://delpha.io/",
"company_name": "Delpha",
"first_name": "Jordan",
"last_name": "Rivera",
"email": "jordan.rivera@delpha.io",
"country": "France"
}
]
}{
"code": "ok",
"request_id": "c1a2b3d4-0000-4a5b-8c9d-ef0123456789",
"job_id": "21014abc65004d2781d2e0ef4c9fbb46",
"item_count": 100,
"message": "Batch submitted",
"status": "SUCCESS",
"status_code": 202
}Poll a batch of LinkedIn profile items submitted via POST /v1/linkedin-profile/batch. 202 while running (with item_count/processed_count progress); 200 once SUCCEEDED (with counts, a presigned result_url, and result_data inlined when <=1MB); 409 if the credit reservation expired before delivery (resubmit); 500 if the job failed; 504 past the 24h ceiling.
Reading a result starts no work and adds no charge, but it finalizes the job's accounting once: the job's charge is settled when its result is first delivered, and refunded when the job failed, exceeded its time limit or produced no usable result — a job past its time limit is marked failed by that read. Repeating the call returns the same answer and never charges again.
- : Access to the public API
OAuth 2.0 client-credentials flow (machine-to-machine). Token URL: https://secure.delpha.io/oauth2/token. The api/access scope is all-access: it grants every operation this document publishes. Per-use-case scoping, per-key credit ceilings and expiry are properties of an API key, not of this flow — use an API key when a credential must be restricted.
The unique identifier of the LinkedIn profile batch job.
{"value":"21014abc65004d2781d2e0ef4c9fbb46","summary":"Sample job ID"}Job succeeded — the result payload is populated.
Accepted / still running — poll the result route with the returned job_id.
Validation error — the request body or query parameters were rejected.
Authentication failed — invalid or missing OAuth 2.0 token or API key.
Forbidden — the credential is valid but not allowed here: the API key's scopes do not cover this operation, or the operation is not routed in this environment (API Gateway then answers Missing Authentication Token).
Not found — no job exists for this id, or it belongs to another team.
Conflict — the credit reservation expired before delivery; resubmit.
Too many requests — one of two limits was exceeded. Your allowance for this operation in the current 60-second window: an Error body with code: rate_limited, Retry-After set to the seconds left in the window, and the quota headers with X-RateLimit-Remaining: 0; nothing is charged. Or the per-operation floor every caller of that operation shares: a GatewayError body with Retry-After: 1 and no quota headers, refused before the API sees the request.
Internal error.
Service unavailable — a downstream dependency was unreachable.
Gateway timeout — the job exceeded its processing ceiling.
GET /v1/linkedin-profile/batch/{job_id} HTTP/1.1
Host: api.delpha.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
{
"code": "ok",
"request_id": "c1a2b3d4-0000-4a5b-8c9d-ef0123456789",
"message": "97/100 items succeeded",
"status": "SUCCESS",
"status_code": 200,
"counts": {
"total": 100,
"succeeded": 97,
"failed": 3
},
"result_url": "https://delpha-api-batch.s3.amazonaws.com/batch-results/<job_id>.json?...",
"result_data": {
"job_id": "21014abc65004d2781d2e0ef4c9fbb46",
"usecase": "linkedin-profile",
"counts": {
"total": 2,
"succeeded": 1,
"failed": 1
},
"items": [
{
"dispatch_key": {
"record_id": "21014abc65004d2781d2e0ef4c9fbb46#0"
},
"result": {
"data_type": "social_network",
"normalized_value": "https://www.linkedin.com/in/jordan-rivera-000000000/",
"label": "OK",
"scores": {
"accuracy": 0.8711710601954503,
"completeness": 1,
"consistency": 1,
"validity": 1
},
"recommendations": [
{
"url": "https://www.linkedin.com/in/jordan-rivera-000000000/",
"score": 0.8711710601954503,
"headline": "Jordan Rivera - Delpha",
"rank": 1,
"desc": "Data Engineer & Cloud specialist - AWS · Experience: Delpha · Education: ESILV - Ecole Supérieure d'Ingénieurs Léonard de Vinci · Location: Paris · 500+ ...",
"company_name": "Delpha",
"location": "Paris",
"profile_name": "Jordan Rivera",
"job_title": "Data Engineer & Cloud specialist",
"match_score": 0.8711710601954503,
"ambiguity_n": 1
}
],
"recommendation_status": "confident",
"fallback_used": false,
"url_changed": false,
"suggested_url": null,
"type": "linkedin"
}
},
{
"dispatch_key": {
"record_id": "21014abc65004d2781d2e0ef4c9fbb46#1"
},
"error": "Processing failed for this item."
}
]
},
"item_count": null,
"processed_count": null,
"process_time": 12.3
}Last updated
Was this helpful?