# People Bulk Enrich `POST https://api.getprospect.com/v2/people/bulk-enrich` Enrich up to 50 people in one request. Each item takes the same identifiers as People Enrich and is matched independently (strongest identifier wins); the response buckets items into matched, not_matched and invalid, echoing each item's identifier so you can correlate results. One failed item never fails the batch. Credits work like People Enrich: enrich_email is on by default and costs 1 email credit per newly revealed email, and enrich_phone costs 1 phone credit per lookup. Uses 1 unit of the enrich rate limit per item, none for a person your workspace already owns. Authenticate with your API key in the x-api-key header. > **How are credits spent?** > > Same as [People Enrich](https://getprospect.com/api-docs/people-enrich.md), per matched item: > `enrich_email` is on by default and costs 1 email credit per newly > revealed email (re-reveals are free); `enrich_phone` costs 1 phone credit > per lookup. Set `enrich_email: false` to match people without spending > anything. ## How the batch behaves Each of the up to 50 items is looked up independently with the same identifier precedence as [People Enrich](https://getprospect.com/api-docs/people-enrich.md) - `id`, then `linkedin_id`, `linkedin_url`, `email`, then name + company. One item failing never fails the batch: the response splits items into three buckets, each entry echoing your `identifier` (or the item's index if you did not send one): - `matched` - the person was found; carries `matched_by` and the full [Person object](https://getprospect.com/api-docs/person-object.md). - `not_matched` - the identifiers were valid but nobody matched; carries the `attempted` lookup fields. - `invalid` - the item could not be looked up at all (bad or unknown fields); carries a `reason`. Prefer this endpoint over looping single People Enrich calls: 50 lookups in one request instead of 50 round trips, with per-item outcomes you can correlate by `identifier`. ## Authentication Pass your API key in the `x-api-key` header. ## Body parameters - `data` (object[], required): Array of person lookup items (1-50). Each item is matched independently. - `identifier` (string, optional): Client-supplied correlation key echoed back in the response. If omitted, the item index is used. - `id` (string, optional): The GetProspect person `id`, as returned in People Search results. - `linkedin_id` (one of, optional): The LinkedIn member numeric id (accepted as string or number). Example: `1048576` - `linkedin_url` (string, optional): The LinkedIn person URL (e.g. "https://linkedin.com/in/john-doe"). - `email` (string, optional): Reverse-lookup the person by their stored email address. - `first_name` (string, optional): Used together with last_name + company_domain or company_name. - `last_name` (string, optional): Used together with first_name + company_domain or company_name. - `company_domain` (string, optional): Company domain for the name+company composite lookup. - `company_name` (string, optional): Company name for the name+company composite lookup. - `enrich_email` (boolean, optional, default: true): Enrich a verified business email for every matched item; set false to skip. Pre-flight credit check requires up to one email credit per item. - `enrich_phone` (boolean, optional, default: false): If true, attempt to enrich a mobile phone for every matched item. Pre-flight credit check. ## Example request ```bash curl --request POST \ --url https://api.getprospect.com/v2/people/bulk-enrich \ --header 'Content-Type: application/json' \ --header 'x-api-key: YOUR_API_KEY' \ --data ' { "data": [ { "identifier": "row-1", "linkedin_url": "https://linkedin.com/in/emily-carter-sample" }, { "identifier": "row-2", "linkedin_url": "https://linkedin.com/in/profile-that-does-not-exist-x1" }, { "identifier": "row-3", "first_name": "Emily" } ], "enrich_email": false } ' ``` ## Response 200 Every item in one of `matched`, `not_matched` or `invalid`, echoing its `identifier`. ```json { "success": true, "data": { "matched": [ { "identifier": "row-1", "matched_by": "linkedin_url", "person": { "id": "64f1a2b3c4d5e6f7a8b9c0d1", "full_name": "Emily Carter", "first_name": "Emily", "last_name": "Carter", "email": { "status": "valid", "address": null, "verified_at": "2026-06-18T09:12:44.000Z", "checked_at": "2026-06-18T09:12:44.000Z", "revealed": false }, "mobile_phone": { "status": "not_requested", "number": null, "revealed": false }, "location": { "city": "San Francisco", "state": "California", "state_code": "CA", "country": "United States", "country_code": "US", "time_zone": "America/Los_Angeles", "time_zone_offset": -7 }, "linkedin_url": "https://linkedin.com/in/emily-carter-sample", "primary_position": { "job_title": "Senior Product Marketing Manager", "normalized_job_title": "Product Marketing Manager", "seniority": "Senior", "departments": [ "Marketing" ], "company": { "id": "64f1a2b3c4d5e6f7a8b9c0d2", "name": "Intercom", "description": "Intercom is a customer service platform that helps businesses talk to customers through live chat, an AI-powered help desk, and proactive support.", "logo": "https://logos.getprospect.com/64f1a2b3c4d5e6f7a8b9c0d2.jpg", "website": "intercom.com", "email": { "domain": "intercom.com", "provider": null }, "linkedin_url": "https://linkedin.com/company/intercom-inc-", "industry": "Software Development", "keywords": [ "customer messaging", "AI customer service", "help desk software" ], "naics_codes": [ 511210 ], "type": "Privately Held", "business_type": "B2B", "revenue_stream": "Subscriptions / Recurring", "founded": 2011, "employee_count": 900, "employee_range": "501-1000", "location": { "city": "San Francisco", "state": "California", "state_code": "CA", "country": "United States", "country_code": "US", "raw_address": "55 2nd St, San Francisco, CA 94105" }, "other_locations": [ { "city": "Chicago", "state": "Illinois", "state_code": "IL", "country": "United States", "country_code": "US", "raw_address": "222 W Merchandise Mart Plaza, Chicago, IL 60654" }, { "city": "Dublin", "state": null, "state_code": null, "country": "Ireland", "country_code": "IE", "raw_address": "2 Dockland Central, Dublin, Ireland" } ] }, "position_index": 0 }, "other_positions": [], "saved": null } } ], "not_matched": [ { "identifier": "row-2", "attempted": [ "linkedin_url" ] } ], "invalid": [ { "identifier": "row-3", "reason": "All provided lookup fields are invalid: name_and_company (name_and_company requires first_name and last_name). Expected at least one valid: id, linkedin_id, linkedin_url, email, first_name+last_name+company_domain/company_name.", "skipped": [ { "field": "name_and_company", "reason": "name_and_company requires first_name and last_name" } ] } ] }, "metadata": { "timestamp": "2026-08-13T21:30:10.948Z", "total": 3, "matched_count": 1, "not_matched_count": 1, "invalid_count": 1 } } ``` ## Response 400 Invalid request (`VALIDATION_ERROR`; `payload.code` says which kind of mistake), or one `identifier` sent with two different lookups (`payload.conflicts`). ```json { "success": false, "data": null, "metadata": { "timestamp": "2026-10-08T09:30:00.000Z" }, "errors": [ { "name": "VALIDATION_ERROR", "message": "data must contain at least 1 elements", "payload": { "field": "data", "code": "out_of_range", "received_value": [], "received_type": "object" } } ] } ``` ## Response 401 Missing, unknown or inactive credentials (`UNAUTHORIZED`). ## Response 402 Not enough credits for every reveal the batch would bill (`PAYMENT_REQUIRED`): all or nothing, nothing is revealed. ## Response 429 Over the `enrich` rate limit (`RATE_LIMIT`); wait `Retry-After` seconds. Sent only where rate limits are enforced. ## Response 500 Unexpected server error.