Documentation
Documentation
https://developers.surfe.com/public-011-search-companies
APIReference
https://developers.surfe.com/
openapi: 3.0.3
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:
schemas:
JobStatus:
type: string
enum:
- PENDING
- IN_PROGRESS
- COMPLETED
- FAILED
EnrichmentJobAccepted:
type: object
properties:
enrichmentID:
type: string
format: uuid
enrichmentCallbackURL:
type: string
format: uri
message:
type: string
description: Estimated completion time.
CompanySearchRequest:
type: object
required:
- filters
- limit
properties:
limit:
type: integer
minimum: 1
maximum: 200
filters:
$ref: '#/components/schemas/CompanyFilters'
pageToken:
type: string
Range:
type: object
properties:
from:
type: integer
to:
type: integer
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
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'
Error:
type: object
properties:
message:
type: string
code:
type: string
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
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
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'
Unauthorized:
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: Resource or job not found.
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'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'Surfe API key issued from the Surfe dashboard, sent as `Authorization: Bearer {api-key}`.'