# Search and enrich LinkedIn profiles with Bytemine's API

Bytemine's LinkedIn profile API finds people by current title, employer, skills, school and place, and completes one profile from its LinkedIn URL. A search costs $0.01 for each profile it returns, and an enrichment costs $0.01 only when the URL matches. Send a JSON `POST` to the storefront and pay the request's 402 price quote from a wallet; no account or API key is needed.

## At a glance

- **Search endpoint:** `POST https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/functions/v1/api-gateway/v1/linkedin/profile-search`
- **Enrichment endpoint:** `POST https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/functions/v1/api-gateway/v1/enrich/linkedin-profile`
- **Search body:** filters such as `title`, `company`, `domain`, `location`, `country`, `industry`, `skills`, `school` and `keyword`, plus `size`, `from` and `sort_by`. Set `count: true` for a free count.
- **Enrichment body:** `linkedin_url` (required), a full LinkedIn profile URL
- **Price:** search $0.01, enrichment $0.01. Count queries are free.
- **Payment:** each request answers with a 402 price quote, paid from a wallet over x402 or MPP, or drawn from prepaid Credits. No account or API key is needed.
- **Limits:** `size` 1 to 50 per request (default 25), `from` offset 0 to 5000
- **Full purchase flow:** [the buyer skill](https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/SKILL.md)

## Choose the search filters

The search takes roughly 55 filters. These cover finding people by role and company.

| To match | Field | Value |
| --- | --- | --- |
| Any of several current titles | `title` | Array of phrases, any match: `["VP of Engineering", "Head of Engineering"]` |
| Current employer by website | `domain` | A domain or an array: `"example.com"` |
| Current employer by name | `company` | A name or an array |
| Place | `location`, `country` | Strings |
| Industry | `industry` | Array of strings |
| All of a set of skills | `skills` | Array. Every skill must be present. |
| School | `school` | String |
| Free text across the profile | `keyword` | String |
| Seniority | `seniority` | For example `"Director"`, `"Vice President (VP)"` |
| Recent job changers | `started_within_days` | Integer number of days |
| Result order | `sort_by` | `relevance`, `recent_job_change`, `connections` or `followers` |

`active_only` defaults to `true`, so only live profiles return. The full filter list is in [the search API reference](https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/services/linkedin-profile-search/openapi.json).

## Find and enrich profiles

1. Size the segment for free. With `count: true` the search returns a count. It returns no profiles and has no charge.

   ```bash
   curl -s -X POST https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/functions/v1/api-gateway/v1/linkedin/profile-search \
     -H 'Content-Type: application/json' \
     -d '{"title": ["VP of Engineering", "Head of Engineering"], "domain": "example.com", "country": "United States", "count": true}'
   ```

2. Search for one page of profiles. Set `size` to the most profiles you want billed on this call.

   ```bash
   curl -s -X POST https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/functions/v1/api-gateway/v1/linkedin/profile-search \
     -H 'Content-Type: application/json' \
     -d '{"title": ["VP of Engineering", "Head of Engineering"], "domain": "example.com", "country": "United States", "size": 10, "from": 0, "sort_by": "relevance"}'
   ```

   The storefront answers with a 402. The quote can be a ceiling, which is the most the call could cost. Pay it with an x402 or MPP client and retry the same request with the proof attached. You are charged only for the profiles returned. The response has this shape, with objects shortened here:

   ```json
   {
     "from": 0,
     "size": 10,
     "total": 42,
     "has_more": true,
     "profiles": [
       {
         "full_name": "Alex Example",
         "headline": "VP of Engineering at Example",
         "linkedin_url": "https://www.linkedin.com/in/alex-example",
         "current_role": {},
         "past_roles": [],
         "location": {},
         "skills": ["Kubernetes"],
         "education": [],
         "summary": "...",
         "social": {}
       }
     ]
   }
   ```

3. Page through the results. Send the same filters with `from` raised by `size`, for example `"from": 10`. Each page is a new request with its own 402. Stop when `has_more` is `false` or when you have enough. `from` cannot exceed 5000.

4. Enrich one profile from its `linkedin_url`.

   ```bash
   curl -s -X POST https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/functions/v1/api-gateway/v1/enrich/linkedin-profile \
     -H 'Content-Type: application/json' \
     -d '{"linkedin_url": "https://www.linkedin.com/in/alex-example"}'
   ```

   Pay the 402 and retry. `found` reports whether the URL matched. Billing applies only on a match.

   ```json
   {
     "found": true,
     "contact": {
       "full_name": "Alex Example",
       "linkedin_headline": "VP of Engineering at Example",
       "job_title": "VP of Engineering",
       "seniority": "VP",
       "department": "Engineering",
       "company_name": "Example",
       "company_domain": "example.com",
       "work_email": "alex@example.com",
       "email_source": "...",
       "direct_dials": ["+1-555-0142"],
       "work_experience": [],
       "education": [],
       "profile_status": "active",
       "data_first_seen": "...",
       "data_last_updated": "..."
     },
     "credits_used": "..."
   }
   ```

   `profile_status` is `active` or `deleted`. `data_first_seen` and `data_last_updated` date the record.

## Budget a search and enrichment

| Call | Cost |
| --- | --- |
| Count a segment | Free |
| One page at the default `size` of 25 | Up to $0.25 |
| One full page of 50, then enrich 10 of them | Up to $0.60 |

Each paid response carries a `zc-billing` header. It shows what you authorized (`authorizedUsd`) and what you were charged (`chargedUsd`).

## Boundaries

- The enrichment body takes a single `linkedin_url`.
- `size` caps a page at 50 profiles. A larger set takes several paged requests.
- Card pays a pay-as-you-go call only when the call costs $0.50 or more. Smaller calls go on a wallet rail.
- Credits are prepaid from $0.50, or $0.50 by card. You buy them at `/plans/{planId}/purchase` with an agent identity. Find the plan in [the catalog](https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/manifest.json).
- After payment, the storefront passes on Bytemine's own status code and body, including its errors.

## Errors

| Response | Meaning | Action |
| --- | --- | --- |
| `402` with a `payment` block | The price quote. | Pay it and retry the same request, or stop |
| `settlement_failed` | The signed payment did not settle | Fix the wallet, then send the request again for a fresh 402 |
| `payment_request_mismatch` | A payment was reused for a different request, such as the next page | Pay each page's own 402 |
| `usage_exhausted` | Prepaid credit ran out | Top up with `POST https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/extend`, or pay per call |
| `401 bearer_required` | A Credits purchase needs an agent identity | Register at [auth.md](https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/auth.md), or pay per call |

## Frequently asked questions

### Does Bytemine's LinkedIn profile API need an API key?

No. Each call is paid on its own through the storefront's 402, over x402 or MPP, or by card when the call costs $0.50 or more. Pay-as-you-go calls need no account and no registration. An agent identity is needed only to buy Credits.

### How is a LinkedIn profile search billed?

Bytemine bills $0.01 for each profile a search returns. It does not bill per request or per page, and count queries are free. The 402 can quote a ceiling based on the page size, but only the returned profiles are charged.

### Can I enrich a LinkedIn profile URL without searching first?

Yes. Send any full profile URL as `linkedin_url` to the enrichment endpoint. It costs $0.01 when the URL matches. The search also accepts a `linkedin_url` filter for an exact profile lookup.

### How many profiles can one search return?

One request returns at most 50 profiles, set by `size`. Page through larger result sets with `from`, up to an offset of 5000. `total` and `has_more` show how many remain.

### Can I pay for a profile search by card?

A pay-as-you-go call can be paid by card when it costs $0.50 or more. For smaller calls, pay on a wallet rail or prepay Credits, which by card start at $0.50.

## Keep reading

- [Buyer skill](https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/SKILL.md): the full purchase flow
- [How to pay](https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/payment.md): rails, ceilings, Credits and top-ups
- [Error reference](https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/errors.md): every error code
- [Profile search API reference](https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/services/linkedin-profile-search/openapi.json)
- [Profile enrichment API reference](https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/services/linkedin-profile-enrichment/openapi.json)

---

Updated 2026-10-16. All Bytemine guides: https://agents.bytemine.ai/guides.md. Storefront: https://agents.bytemine.ai/zcj/7j6hr2ao4n9x/llms.txt.
