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}`.'