> ## 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.

# Create a lane

> Creates a lane with the next free code (`L1`, `L2`, …) and sends each keyword for approval as its own topic. Approval usually takes about a day; once a keyword is live, people show up within 2 to 4 days. Nothing is bought until you export.

New lanes start with `min_strength` `medium` and `company_list_mode` `narrow`; change them with `PATCH /api/v1/lanes/{code}` (they're ignored here). `us_only` defaults to true.

**Good to know**
- Keywords are split on commas and semicolons as well, deduplicated, and kept only if 3 to 120 characters long (others are dropped without an error). Up to 50.
- Industries must be catalog values (`GET /api/v1/catalog`); unknown industries or seniority values are an error.
- List filters over their limit are cut to the limit. Excluded industries that are also in `industries` are dropped.
- `keywords_sent_for_approval` can be lower than `keywords`: the rest are queued and sent automatically.
- Up to 30 lanes per organization.

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



## OpenAPI

````yaml /api-reference/openapi.json post /api/v1/lanes
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/lanes:
    post:
      tags:
        - Lanes
      summary: Create a lane
      description: >-
        Creates a lane with the next free code (`L1`, `L2`, …) and sends each
        keyword for approval as its own topic. Approval usually takes about a
        day; once a keyword is live, people show up within 2 to 4 days. Nothing
        is bought until you export.


        New lanes start with `min_strength` `medium` and `company_list_mode`
        `narrow`; change them with `PATCH /api/v1/lanes/{code}` (they're ignored
        here). `us_only` defaults to true.


        **Good to know**

        - Keywords are split on commas and semicolons as well, deduplicated, and
        kept only if 3 to 120 characters long (others are dropped without an
        error). Up to 50.

        - Industries must be catalog values (`GET /api/v1/catalog`); unknown
        industries or seniority values are an error.

        - List filters over their limit are cut to the limit. Excluded
        industries that are also in `industries` are dropped.

        - `keywords_sent_for_approval` can be lower than `keywords`: the rest
        are queued and sent automatically.

        - Up to 30 lanes per organization.


        **Free.** This doesn't use any contacts from your plan.
      operationId: createLane
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LaneCreate'
            example:
              name: Hospital supply sellers
              audience: >-
                Owners and sales leaders at US medical supply companies with 20
                to 300 staff
              keywords:
                - selling to group purchasing organizations
                - hospital supply chain contracts
                - selling to ambulatory surgery centers
              us_only: true
              employees:
                min: 20
                max: 300
              industries:
                - medical equipment manufacturing
                - medical device
                - wholesale
              seniority:
                - cxo
                - vp
                - director
              titles_exclude:
                - intern
                - assistant
              topics_to_leave_out:
                - job openings
              exclude_companies:
                - staffing firms
      responses:
        '201':
          description: Lane created.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: string
                    description: The new lane's code.
                  keywords:
                    type: integer
                    description: Keywords added.
                  keywords_sent_for_approval:
                    type: integer
                    description: Keywords already sent for approval; the rest are queued.
                required:
                  - code
                  - keywords
                  - keywords_sent_for_approval
              example:
                code: L3
                keywords: 3
                keywords_sent_for_approval: 3
        '400':
          description: The body isn't valid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                invalid_body:
                  value:
                    error: invalid_body
                    message: >-
                      Send a JSON object. See /api/v1/catalog for valid filter
                      values.
                invalid_lane:
                  value:
                    error: invalid_lane
                    message: >-
                      Unknown industries: medical stuff. GET /api/v1/catalog
                      lists valid values.
                invalid_lane_name:
                  summary: invalid_lane (name)
                  value:
                    error: invalid_lane
                    message: Give the lane a name of 2 to 80 characters.
                invalid_lane_keywords:
                  summary: invalid_lane (keywords)
                  value:
                    error: invalid_lane
                    message: Add at least one keyword (one per line).
        '401':
          $ref: '#/components/responses/Unauthorized'
        '409':
          description: Your organization already has 30 lanes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                lane_limit:
                  value:
                    error: lane_limit
                    message: An organization can have up to 30 lanes.
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    LaneCreate:
      type: object
      properties:
        name:
          type: string
          minLength: 2
          maxLength: 80
          description: 2 to 80 characters.
        audience:
          type: string
          minLength: 10
          description: >-
            Who you sell to in this lane: at least a short sentence (10+
            characters, cut at 400).
        keywords:
          type: array
          items:
            type: string
          minItems: 1
          description: >-
            What people in this lane research, one topic per keyword; each is
            sent for approval as its own topic. At least one valid keyword is
            required. Entries are also split on commas and semicolons and
            deduplicated; keywords shorter than 3 or longer than 120 characters
            are dropped, and only the first 50 are kept.
        us_only:
          type: boolean
          description: >-
            Only people at companies headquartered in the US. Defaults to true
            on create.
        employees:
          description: >-
            Company size range, both ends from 1 to 100,000 and at most 5,000
            apart, e.g. `{"min": 20, "max": 300}`. Send both or neither. `null`
            means any size.
          anyOf:
            - type: object
              properties:
                min:
                  type: integer
                  minimum: 1
                  maximum: 100000
                max:
                  type: integer
                  minimum: 1
                  maximum: 100000
              required:
                - min
                - max
            - type: 'null'
        industries:
          type: array
          items:
            type: string
          description: >-
            Industry values from `GET /api/v1/catalog` (case-insensitive).
            Unknown values are an error. Up to 60; extra entries are dropped.
        industries_exclude:
          type: array
          items:
            type: string
          description: >-
            Industries to leave out where the industry list isn't applied (the
            company-list path, or a lane with no industries). Catalog values. Up
            to 80; extra entries are dropped.
        seniority:
          type: array
          items:
            type: string
            enum:
              - cxo
              - vp
              - director
              - manager
              - staff
          description: Seniority levels. `cxo` is C-suite and owners.
        titles_include:
          type: array
          items:
            type: string
          description: >-
            Job title must contain one of these. Stored lowercase. Up to 60;
            extra entries are dropped.
        titles_exclude:
          type: array
          items:
            type: string
          description: >-
            Job title must not contain any of these. Stored lowercase. Up to 80;
            extra entries are dropped.
        topics_to_leave_out:
          type: array
          items:
            type: string
          description: >-
            Topics to leave out of the keyword topics, e.g. job openings. Up to
            40; extra entries are dropped.
        exclude_companies:
          type: array
          items:
            type: string
          description: >-
            Kinds of companies to leave out, e.g. staffing firms. Up to 20;
            extra entries are dropped.
      required:
        - name
        - audience
        - keywords
    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.