> ## Documentation Index
> Fetch the complete documentation index at: https://docs.intentleads.si/llms.txt
> Use this file to discover all available pages before exploring further.

# Replace the company list

> Replaces your company list; the previous one is deleted. Send either:

- **CSV or plain text** (`text/csv` or `text/plain`): one domain or company LinkedIn URL per line, or a CSV whose header row has a domain column (`domain`, `company_domain`, `website`, `company_website`, `url`, `company domain` or `company website`) and/or a company LinkedIn column (`company_linkedin_url`, `company_linkedin`, `linkedin_company_url`, `company linkedin` or `company linkedin url`). Columns can be separated by commas, tabs or semicolons. Up to 60 MB. Name the list with `?name=`.
- **JSON** (`application/json`): `{"domains": [...], "linkedin": [...], "name": "..."}`.

Websites are cleaned to the bare domain (`https://www.example.com/about` becomes `example.com`). Email addresses and invalid entries are dropped and counted, and duplicates are merged.

**Good to know**
- Lanes match your list on domains. LinkedIn company pages are stored and counted, but aren't used to match people, so a list of only LinkedIn pages doesn't change counts or exports. In CSV rows that have both, only the domain is kept.
- Counts don't change until the next check; queue one with `POST /api/v1/checks`.

**Free.** This doesn't use any contacts from your plan.



## OpenAPI

````yaml /api-reference/openapi.json put /api/v1/company-list
openapi: 3.1.0
info:
  title: Intent Leads API
  version: '1.0'
  description: >-
    The Intent Leads API finds B2B people actively researching the topics you
    sell into, and exports them with contact details into your own tools.


    **Authentication.** Send an API key as a bearer token: `Authorization:
    Bearer il_live_…`. Keys belong to one organization. Standard keys work with
    everything except billing, team and key management, which need an admin key.


    **What costs contacts.** Only `POST /api/v1/exports` with `"dry_run": false`
    uses contacts from your plan. Quotes, counts, checks, samples and
    re-downloads are free.


    **Errors.** Every error is JSON: `{"error": "code", "message":
    "Plain-English explanation"}`. Codes are stable; messages may change.


    **Conventions.** JSON by default. Dates are `YYYY-MM-DD` and timestamps ISO
    8601, all in UTC. Lane codes (`L1`) are case-insensitive.
servers:
  - url: https://intentleads.si
security:
  - bearerAuth: []
tags:
  - name: Exports
    description: Quote (free) and buy new people from your lanes, then download them.
  - name: Leads
    description: Pull and re-download the leads you've exported, and list deliveries.
  - name: Lanes
    description: >-
      Create, inspect and tune lanes: keywords plus the companies and roles you
      want.
  - name: Keywords
    description: Add and remove a lane's keywords; each one is approved as its own topic.
  - name: Checks
    description: >-
      Free lane checks that size every filter step over 14 days, plus quick
      topic signals.
  - name: Company list
    description: >-
      The target-company list your lanes can narrow to or use instead of
      industries.
  - name: Suppressions
    description: People you exported who later asked to be removed.
  - name: Usage
    description: Contacts used and left this billing period.
  - name: Billing
    description: Plan, invoices and plan changes. Admin keys only.
  - name: Team
    description: Members and invite links. Admin keys only.
  - name: API keys
    description: Create, rename, rotate and revoke API keys. Admin keys only.
  - name: Account
    description: Check which organization a key belongs to and its role.
  - name: Reference
    description: Valid values for lane filters.
  - name: Activity
    description: A feed of changes and events in your organization.
paths:
  /api/v1/company-list:
    put:
      tags:
        - Company list
      summary: Replace the company list
      description: >-
        Replaces your company list; the previous one is deleted. Send either:


        - **CSV or plain text** (`text/csv` or `text/plain`): one domain or
        company LinkedIn URL per line, or a CSV whose header row has a domain
        column (`domain`, `company_domain`, `website`, `company_website`, `url`,
        `company domain` or `company website`) and/or a company LinkedIn column
        (`company_linkedin_url`, `company_linkedin`, `linkedin_company_url`,
        `company linkedin` or `company linkedin url`). Columns can be separated
        by commas, tabs or semicolons. Up to 60 MB. Name the list with `?name=`.

        - **JSON** (`application/json`): `{"domains": [...], "linkedin": [...],
        "name": "..."}`.


        Websites are cleaned to the bare domain (`https://www.example.com/about`
        becomes `example.com`). Email addresses and invalid entries are dropped
        and counted, and duplicates are merged.


        **Good to know**

        - Lanes match your list on domains. LinkedIn company pages are stored
        and counted, but aren't used to match people, so a list of only LinkedIn
        pages doesn't change counts or exports. In CSV rows that have both, only
        the domain is kept.

        - Counts don't change until the next check; queue one with `POST
        /api/v1/checks`.


        **Free.** This doesn't use any contacts from your plan.
      operationId: replaceCompanyList
      parameters:
        - name: name
          in: query
          required: false
          description: >-
            A name for the list when you send CSV or text (default `API
            upload`). For JSON, use `name` in the body.
          schema:
            type: string
          example: Q4 target accounts
      requestBody:
        required: true
        content:
          text/csv:
            schema:
              type: string
            example: |
              company_domain,company_linkedin_url
              example.com,https://www.linkedin.com/company/example
              example.org,
          text/plain:
            schema:
              type: string
            example: |
              example.com
              https://www.example.org/about
              https://www.linkedin.com/company/example-net
          application/json:
            schema:
              $ref: '#/components/schemas/CompanyListJson'
            example:
              name: Q4 target accounts
              domains:
                - example.com
                - https://www.example.org/about
              linkedin:
                - https://www.linkedin.com/company/example-net
      responses:
        '200':
          description: The new list.
          content:
            application/json:
              schema:
                type: object
                properties:
                  company_list:
                    $ref: '#/components/schemas/CompanyList'
                required:
                  - company_list
              example:
                company_list:
                  companies: 1830
                  domains: 1800
                  linkedin_pages: 30
                  dropped_invalid: 12
                  duplicates_merged: 4
                  source: Q4 target accounts
                  uploaded_at: '2026-10-12T15:04:22.731904+00:00'
        '400':
          description: The body isn't valid or has no companies.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                invalid_body:
                  value:
                    error: invalid_body
                    message: Send JSON or CSV.
                no_companies:
                  value:
                    error: no_companies
                    message: No company domains or LinkedIn company URLs found.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '413':
          description: The CSV or text body is over 60 MB.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                too_large:
                  value:
                    error: too_large
                    message: Up to 60 MB. Split bigger lists.
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    CompanyListJson:
      type: object
      properties:
        domains:
          type: array
          items:
            type: string
          description: >-
            Company domains or website URLs, e.g. `example.com` or
            `https://www.example.com/about`.
        linkedin:
          type: array
          items:
            type: string
          description: >-
            Company LinkedIn URLs, e.g.
            `https://www.linkedin.com/company/example`.
        name:
          type: string
          description: A name for the list (default `API upload`).
      required: []
    CompanyList:
      type: object
      properties:
        companies:
          type: integer
          description: Domains plus LinkedIn company pages.
        domains:
          type: integer
        linkedin_pages:
          type: integer
        dropped_invalid:
          type: integer
          description: >-
            Rows dropped because they had no valid domain or company LinkedIn
            URL.
        duplicates_merged:
          type: integer
        source:
          type:
            - string
            - 'null'
          description: 'The list''s name: the uploaded file name, `?name=`, or `API upload`.'
        uploaded_at:
          type: string
          format: date-time
      required:
        - companies
        - domains
        - linkedin_pages
        - dropped_invalid
        - duplicates_merged
        - source
        - uploaded_at
    Error:
      type: object
      properties:
        error:
          type: string
          example: lane_not_found
          description: Stable machine-readable code, e.g. `lane_not_found`.
        message:
          type: string
          example: No lane L9.
          description: Plain-English explanation you can show to a person.
      required:
        - error
        - message
      description: Every error has this shape.
  responses:
    Unauthorized:
      description: Missing, malformed, unknown or revoked API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            unauthorized:
              value:
                error: unauthorized
                message: 'Send a valid API key as: Authorization: Bearer il_live_…'
    InternalError:
      description: >-
        Unexpected server error. Safe to retry reads; retry an export only with
        the same `idempotency_key`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            internal_error:
              value:
                error: internal_error
                message: Something went wrong. Try again.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: il_live_…
      description: >-
        An Intent Leads API key, e.g. `il_live_` followed by 32 letters and
        digits. Create one on the API and CLI page of the dashboard.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.