Operations 3
Documentation
Documentation
https://developers.surfe.com/public-011-search-companies
APIReference
https://developers.surfe.com/
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/surfe-companies-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Surfe Account Companies API
version: '2.0'
description: 'The Surfe API (formerly Leadjet) provides B2B people and company search plus enrichment. It returns verified professional emails and mobile phone numbers, company firmographics, and lookalike account recommendations. Bulk enrichment is asynchronous: start a job with POST and either poll the GET job endpoint or receive a webhook callback. All requests are authenticated with a Bearer API key managed from the Surfe dashboard.'
contact:
name: Surfe API Support
url: https://developers.surfe.com/
x-former-name: Leadjet
servers:
- url: https://api.surfe.com/v2
description: Surfe API v2 production base URL
security:
- bearerAuth: []
tags:
- name: Companies
description: Search and enrich organizations.
paths:
/companies/search:
post:
tags:
- Companies
summary: Search companies
description: Search for companies against Ideal Customer Profile filters (industry, employee count, revenue, location, keywords). When credit charging is enabled the call deducts ICP search credits and returns 402 when the balance is insufficient.
operationId: searchCompanies
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CompanySearchRequest'
responses:
'200':
description: Matching companies.
content:
application/json:
schema:
$ref: '#/components/schemas/CompanySearchResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/InsufficientCredits'
'429':
$ref: '#/components/responses/RateLimited'
/companies/enrich:
post:
tags:
- Companies
summary: Enrich companies (start)
description: Start an asynchronous bulk enrichment job for companies identified by domain. Returns an enrichment ID for polling or a webhook callback.
operationId: startCompanyEnrichment
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CompanyEnrichmentRequest'
responses:
'202':
description: Enrichment job accepted.
content:
application/json:
schema:
$ref: '#/components/schemas/EnrichmentJobAccepted'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/InsufficientCredits'
'429':
$ref: '#/components/responses/RateLimited'
/companies/enrich/{id}:
get:
tags:
- Companies
summary: Enrich companies (get)
description: Retrieve the status and results of a company enrichment job by ID. Poll until status is COMPLETED, or use a webhook to be notified.
operationId: getCompanyEnrichment
parameters:
- name: id
in: path
required: true
description: The enrichment job ID returned by the start operation.
schema:
type: string
format: uuid
responses:
'200':
description: Enrichment job status and enriched companies.
content:
application/json:
schema:
$ref: '#/components/schemas/CompanyEnrichmentResult'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
components:
responses:
RateLimited:
description: Too many requests. The API allows up to 10 requests per second with short bursts to 20, plus a daily request quota.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: Resource or job not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
InsufficientCredits:
description: Not enough credits to complete the request.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
JobStatus:
type: string
enum:
- PENDING
- IN_PROGRESS
- COMPLETED
- FAILED
CompanySearchResponse:
type: object
properties:
companies:
type: array
items:
$ref: '#/components/schemas/Company'
total:
type: integer
nextPageToken:
type: string
CompanyEnrichmentResult:
type: object
properties:
enrichmentID:
type: string
format: uuid
status:
$ref: '#/components/schemas/JobStatus'
percentCompleted:
type: integer
companies:
type: array
items:
$ref: '#/components/schemas/Company'
CompanySearchRequest:
type: object
required:
- filters
- limit
properties:
limit:
type: integer
minimum: 1
maximum: 200
filters:
$ref: '#/components/schemas/CompanyFilters'
pageToken:
type: string
CompanyFilters:
type: object
description: Company-based filters.
properties:
industries:
type: array
items:
type: string
employeeCount:
$ref: '#/components/schemas/Range'
revenue:
$ref: '#/components/schemas/Range'
countries:
type: array
items:
type: string
domains:
type: array
items:
type: string
keywords:
type: array
items:
type: string
Range:
type: object
properties:
from:
type: integer
to:
type: integer
Company:
type: object
properties:
name:
type: string
domain:
type: string
websites:
type: array
items:
type: string
description:
type: string
industry:
type: string
keywords:
type: array
items:
type: string
employeeCount:
type: integer
revenue:
type: string
founded:
type: integer
hqCountry:
type: string
hqAddress:
type: string
linkedInUrl:
type: string
linkedInFollowersCount:
type: integer
phones:
type: array
items:
type: string
isPublic:
type: boolean
stockExchange:
type: string
stockSymbol:
type: string
fundingRounds:
type: array
items:
type: object
properties:
type:
type: string
amount:
type: number
date:
type: string
parentOrganization:
type: string
externalID:
type: string
status:
type: string
EnrichmentJobAccepted:
type: object
properties:
enrichmentID:
type: string
format: uuid
enrichmentCallbackURL:
type: string
format: uri
message:
type: string
description: Estimated completion time.
Error:
type: object
properties:
message:
type: string
code:
type: string
CompanyEnrichmentRequest:
type: object
required:
- companies
properties:
companies:
type: array
minItems: 1
description: Companies to enrich, identified by domain and/or externalID.
items:
type: object
properties:
domain:
type: string
externalID:
type: string
include:
type: object
properties:
firmographics:
type: boolean
phoneNumbers:
type: boolean
notificationOptions:
type: object
properties:
webhookUrl:
type: string
format: uri
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'Surfe API key issued from the Surfe dashboard, sent as `Authorization: Bearer {api-key}`.'