API reference
Every operation, what it costs, and where its page is. One header, one request shape and one error envelope underneath all of them.
Base URL and authentication
X-API-Key: pk_live_... Base URL: https://api.easydata.win/v1
Every data operation is a batch, including a batch of one: it answers 202 with a batch_id, and the records are read from GET /batches/{id}/results, which is cursor-paged and readable while the batch is still filling in. Add /sync to the same path to get one record back in the response instead, for twice the credits.
Profiles
A profile URL, a public identifier, a member URN or a Sales Navigator slug - all four reach the same record.
| Method | Path | Credits | At /sync |
|---|---|---|---|
| POST | /v1/profiles/enrich | 1 | 2 |
| POST | /v1/profiles/enrich/detailed | 1 | 2 |
| POST | /v1/profiles/activity | 4 | 8 |
| POST | /v1/profiles/posts | 2 | 4 |
| POST | /v1/profiles/comments | 2 | 4 |
| POST | /v1/profiles/reactions | 2 | 4 |
Companies
A company URL, a universal name or a numeric id - all three reach the same record.
| Method | Path | Credits | At /sync |
|---|---|---|---|
| POST | /v1/companies/enrich | 1 | 2 |
Posts
A post by URN or URL.
| Method | Path | Credits | At /sync |
|---|---|---|---|
| POST | /v1/posts/enrich | 1 | 2 |
Sales Navigator
Paste a Sales Navigator search URL and a max_results. We paginate it. We do not build the query, resolve facet ids or guess what you meant - with one exception: hand the people search a list of companies and we will chunk it into as many searches as the filter needs.
| Method | Path | Credits | At /sync |
|---|---|---|---|
| POST | /v1/sales/search/people | 50 | 100 |
| POST | /v1/sales/search/employees | 50 | 100 |
| POST | /v1/sales/search/companies | 50 | 100 |
| POST | /v1/sales/search/deep | 50 | 100 |
Batches
Everything is a batch, including a batch of one. Results stream: you can read them while the batch is still processing.
| Method | Path | Credits | At /sync |
|---|---|---|---|
| POST | /v1/batches/{id}/approve | free | - |
| GET | /v1/batches | free | - |
| GET | /v1/batches/{id} | free | - |
| GET | /v1/batches/{id}/results | free | - |
| POST | /v1/batches/{id}/cancel | free | - |
Account
What you have left, what you spent, and where completions go.
| Method | Path | Credits | At /sync |
|---|---|---|---|
| GET | /v1/account | free | - |
| PATCH | /v1/account | free | - |
| GET | /v1/usage | free | - |
Schemas
The records those operations return, field by field - what each one is, and what it is not. An absent field means we did not find it, never that it is empty.
- ProfileA person, as profiles/enrich returns them. The sample below is the fullest form - what profiles/enrich/detailed returns with every section ticked - because this page lists what the record can carry; the two counts, six of the position fields, skill_details, interests and recommendations each cost a section and are absent without one.
- MonthDayMonth and day of birth, nothing else. LinkedIn never returns a birth year, so this is the whole fact rather than a partial date - contrast with PartialDate, which does carry a year.
- CertificationOne certification or licence the member added.
- LanguageOne language the member listed, and how well.
- SkillOne skill as the profile's skills SECTION carries it, which is the flat skills list plus the two things that make it worth buying: who endorsed it and what the member attached it to.
- InterestOne thing a member follows. All five categories render as the same row on LinkedIn, which is why category is the field that tells them apart.
- RecommendationOne written recommendation. Which way round it runs is the fact about it, so direction and name are read together: name is always the OTHER person.
- ProfileStubA person as a Sales Navigator search card describes them.
- CompanyA company, as companies/enrich returns it.
- CompanyStubA company as briefly as we know it: a search card, or a company another company names.
- EmailFindingsA work email lookup for one person. An object rather than a bare string, because an address is the end of a process that can succeed, half-succeed, honestly fail, or never have started.
- EmailCandidateOne address that was generated and put to the mail server.
- PositionOne role at one company.
- EducationOne school.
- PartialDateA date LinkedIn only partly knows.
- AddressA company's headquarters, component by component.
- LocationOne of a company's offices, with the group LinkedIn files it under.
- SearchPageThe data of one Sales Navigator result entry: one upstream page.
- PaginationWhere one page of a search stands.
- BatchA submission and its progress.
- BatchResultEntryOne delivered result.
- AccountYour allowance, credit balance, limits and callback settings.
- UsageA rollup by day and operation.
- ErrorThe failure envelope. Every failure, without exception.
- MetaThe second half of every success envelope. camelCase, where data is snake_case.
- ProfileActivityThe three activity kinds in one record: posts and reposts, comments and reactions. profiles.posts, profiles.comments and profiles.reactions each return this same shape, with the other two arrays absent.
- ActivityPartialWhich kinds were requested and could not be read.
- PostA post or repost, as profiles.posts and profiles.activity return it. posts.enrich returns this same record by URL or bare urn, with comments included.
- PostCommentA comment on a post, with its author.
- PostAuthorA feed actor is these four fields.
- PostMediaOne image, video or document attached to a post.
- PostArticleThe link preview on a post that shares an external article.
- PostMentionOne person or company @mentioned in a post.
- ReactionCountOne reaction type and its tally, from the breakdown behind reaction_count.
- ActivityCommentOne comment and the post it was left on.
- ActivityReactionOne reaction and the post it was left on.
- ActivityTargetPostThe post a comment or reaction was left on, as a stub.
Clients
Official, zero-dependency, and each one mints an Idempotency-Key per submission so that a retry cannot create a second batch and bill for it.
- Python, TypeScript and Gopip install easydata-api · npm install @easydata.win/sdk · go get github.com/easydata-win/easydata-go
- MCP server, for agentsnpx -y @easydata.win/mcp - the operations as tools, each one stating its own price, with a per-session spend cap.
Machine-readable
- OpenAPI 3.1The spec every reference page is generated from.
- llms.txtFor AI assistants and editors.