Getting started
Introduction
EnvoAPI gives you read access to professional profiles, companies, search, jobs, and posts — 47 GET endpoints behind one key. Every request is a plain HTTPS GET: cacheable, retryable, and free of side effects.
- 47Documented endpoints
- 1Response envelope
- GETEvery request, no side effects
Base URL
All endpoints share one versioned host. Prepend it to every path in these docs:
https://api.envoapi.com/api/v2Your first request
Every request is authenticated with the X-API-Key header, sent from server-side code only — see Authentication. With a key in place, search for companies:
curl -G "https://api.envoapi.com/api/v2/search/companies" \ -H "X-API-Key: $ENVO_API_KEY" \ --data-urlencode "keywords=revenue operations" \ --data-urlencode "location=San Francisco, CA" \ --data-urlencode "offset=0" \ --data-urlencode "limit=10"Full parameters and response details are on the Search Companies by Keyword reference page.
The response envelope
Every endpoint returns the same four-field envelope. Only data changes shape between calls, so a parser written once works across all 47 endpoints. Examples in these docs are synthetic and contain no real contact data.
- success
- booleanThe verdict for the call. Check it before reading anything else.
- data
- objectThe result itself. Collections carry items, count, and total; single lookups return the record.
- pagination
- object | nullPresent on list responses, null everywhere else. Drives paging.
- meta
- objectEchoes your input, names the operation, reports cache status — and carries meta.error when a request fails.
{ "success": true, "data": { "items": [ { "id": "synthetic-record-01", "name": "Synthetic record" } ], "count": 1, "total": null }, "pagination": { "offset": 0, "limit": 10, "returned": 1, "total": null, "hasMore": false, "nextOffset": null, "cursor": null }, "meta": { "operation": "search_v2_companies", "input": { "keywords": "business software", "limit": 10 }, "cache": { "hit": false }, "note": "Synthetic example for public documentation." }}Paging through results
List endpoints accept offset and limit. While pagination.hasMore is true, request the next page with pagination.nextOffset, and pass cursor back exactly when it is returned. See Pagination for the full rules.
- offset
- numberWhere the page starts. Defaults to 0.
- limit
- numberHow many records to return. Each endpoint publishes its own maximum.
- hasMore
- booleanKeep requesting pages while this is true.
- nextOffset
- number | nullThe offset to send on the next request.
- cursor
- string | nullPass back exactly when the response returned one.
Explore the API reference
The reference is generated from the checked-in OpenAPI document — endpoint groups, parameters, response codes, and request samples are never hand-maintained. Every route is listed publicly; 6 endpoints are documented in full without an account, and the rest open once you log in.
- ProfileLinkedIn v2 profile lookup, contact, and activity endpoints. Profile path inputs accept public /in/ identifiers; full profile URLs use the dedicated url query parameter endpoints.22
/api/v2/profiles/detail - CompanyLinkedIn v2 company and organization page endpoints. Company inputs accept /company/ universal names; full company URLs use the dedicated url query parameter endpoints.11
/api/v2/companies/detail - SearchLinkedIn v2 people, company, content, hashtag, and filter search endpoints. Dynamic filter values come from /api/v2/search/filters.8
/api/v2/search/all - JobLinkedIn v2 job search, filters, feeds, company jobs, and detail endpoints. Dynamic job filter values come from /api/v2/jobs/search/filters.3
/api/v2/jobs/search - PostLinkedIn v2 post detail and social endpoints. Post social endpoints need the full /posts/<slug> slug, not only a numeric id.3
/api/v2/posts/detail