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

# Update lead rules

> Update the lead rules for a campaign. Lead rules determine which leads are automatically included or excluded.

Synced lists continuously feed leads into the campaign. When a lead is added to a synced list, it is added to the campaign. When a lead is removed from all synced lists that contributed it, it is also removed from the campaign.

Excluded lists prevent leads from being targeted. Leads in an excluded list are removed from the campaign even if they exist in a synced list.

Omitted fields are left unchanged. Pass an empty array to clear synced or excluded lists.



## OpenAPI

````yaml patch /campaigns/{campaignId}/rules
openapi: 3.1.1
info:
  title: Inbox API
  version: 1.0.0
  description: >+

    The Inbox API gives you full access to manage the following entities in your
    team:

    - **Threads**: DM conversations on X

    - **Account links**: X accounts connected to your team

    - **Members**: users who can access the team

    - **Prospects**: external profiles on X

    - **Tags**: labels for prospects

    - **Statuses**: pipeline statuses for prospects

    - **Lists**: collections of leads with custom columns and import jobs

    - **Campaigns**: automated multi-step DM sequences


    ## A quick note on IDs

    Inbox stores two types of IDs for objects that relate to X:

    - `id` — The Inbox ID, which is the ID of the Inbox object

    - `platformId` — The original X 'platform' ID, which is the ID of the X
    user, conversation, etc.


    Throughout the API, you'll see instances where multiple IDs are present.
    `platformId` is always the original X ID.


    ## Helpful X URLs


    You can use platform IDs to construct direct links to X:


    - **User profile**: `https://x.com/i/user/{platformId}` — This is the most
    reliable way to link to a user since it uses their immutable ID rather than
    their username, which can change.

    - **User by username**: `https://x.com/{username}` — Note that usernames can
    change, so this link may break if the user updates their handle.

    - **Tweet/Post**: `https://x.com/anyusername/status/{tweetId}` — The
    username in the URL is ignored by X; only the tweet ID matters. You can use
    any string in place of the username and the link will still work.

    - **DM conversation**: `https://x.com/i/chat/{conversationPlatformId}` — The
    conversation ID is formatted as `{smallerUserId}:{largerUserId}`, where the
    two participant user IDs are sorted numerically (smaller ID first).


    ## Encoding objects and arrays in query params


    Inbox's API uses bracket notation to denote objects and arrays.


    ### Objects

    For an endpoint that accepts a `cursor` parameter for instance, with the
    cursor object being

    ```json

    {
      id: "l44e15irdq4db30i77cgphhx",
      timestamp: "2025-11-10T18:03:16.000Z"
    }

    ```


    The URL search params would be encoded as:

    ```txt

    ?cursor[id]=l44e15irdq4db30i77cgphhx&cursor[timestamp]=2025-11-10T18:03:16.000Z

    ```


    ### Arrays

    For an endpoint that accepts an `ids` parameter for instance, with the value
    being

    ```json

    ["1", "2", "3"]

    ```


    there are three options:

    1. Repeat the parameter for each value:

    ```txt

    ?ids=1&ids=2&ids=3

    ```

    2. Append `[]` to explicitly denote an array (useful if there's only one
    value):

    ```txt

    ?ids[]=1&ids[]=2&ids[]=3

    ```

    3. Append `[number]` to denote the array index. This option is the most
    flexible and allows for reordering and skipping values:

    ```txt

    ?ids[0]=1&ids[1]=2&ids[2]=3

    ```

  summary: >-
    The Inbox API gives you full access to manage the following entities in your
    team.
servers:
  - url: https://inboxapp.com/api/v1
security: []
tags:
  - name: Teams
    description: >-
      Teams are shared workspace for members to view and manage account links,
      tags, statuses, campaigns, conversations, and more.
  - name: Threads
    description: >-

      Threads represent conversations between an account linked to your team and
      a prospect on Twitter.
                  
  - name: Messages
    description: |-

      Messages are the individual messages sent in a thread.
                  
  - name: Account Links
    description: |-

      Account links represent X accounts connected to your team.
                  
  - name: Members
    description: |-

      Members are Inbox users who can access the team.
                  
  - name: Prospects
    description: |-

      Prospects represent external profiles on X.
                  
  - name: Tags
    description: |-

      Tags are labels for prospects.
                  
  - name: Statuses
    description: >-

      Statuses are used to track the deal stage or any fixed state for a
      prospect.
                  
  - name: Colors
    description: >-

      Get predefined color options that can be used when creating or updating
      tags and statuses.
                  
  - name: Lists
    description: >-
      Lists are collections of leads that you can organize, filter, and use as
      targeting sources for campaigns.
  - name: List columns
    description: >-
      Custom columns defined on a list. Each column stores a text value per lead
      and can be used as merge variables in campaign messages.
  - name: Leads
    description: >-
      Leads are prospects that belong to a list. Each lead has the full prospect
      profile, CRM context (tags, status, notes), and list-specific custom
      column data.
  - name: Import jobs
    description: >-
      Import jobs populate lists from various sources including CSV files, X
      followers, tweet engagements, and X lists. Poll the job status endpoint to
      track progress.
  - name: Campaigns
    description: >-
      Campaigns are automated multi-step DM sequences sent to leads via your
      linked X accounts.


      A campaign pulls its leads from your existing lists using **lead rules** —
      attach lists to automatically sync leads into the campaign, and optionally
      exclude lists (e.g. a "Do Not Contact" list) to avoid messaging certain
      people. Leads can also be added directly or imported in bulk.


      Each campaign has a **sequence** of steps — messages, delays, and tweet
      interactions — that run for every lead. Messages support variables for
      personalization: use the built-in `first-name` variable or create **custom
      columns** on the campaign to store per-lead data like company name or
      role.


      **Automations** let you trigger actions when certain events occur, such as
      applying a tag or setting a status when a prospect replies.


      Configure a sending schedule and hourly message rate, then enable the
      campaign to start sending.
paths:
  /campaigns/{campaignId}/rules:
    patch:
      tags:
        - Campaigns
      summary: Update lead rules
      description: >-
        Update the lead rules for a campaign. Lead rules determine which leads
        are automatically included or excluded.


        Synced lists continuously feed leads into the campaign. When a lead is
        added to a synced list, it is added to the campaign. When a lead is
        removed from all synced lists that contributed it, it is also removed
        from the campaign.


        Excluded lists prevent leads from being targeted. Leads in an excluded
        list are removed from the campaign even if they exist in a synced list.


        Omitted fields are left unchanged. Pass an empty array to clear synced
        or excluded lists.
      operationId: campaigns.campaign.rules.updateRules
      parameters:
        - name: campaignId
          in: path
          required: true
          schema:
            type: string
            pattern: ^[0-9a-z]+$
            description: The ID of the campaign.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                syncedListIds:
                  type: array
                  items:
                    type: string
                    pattern: ^[0-9a-z]+$
                  description: >-
                    List IDs to sync leads from. Leads in these lists are
                    automatically added to the campaign and removed when they
                    leave all synced lists.
                  examples:
                    - - l44e15irdq4db30i77cgphhx
                excludedListIds:
                  type: array
                  items:
                    type: string
                    pattern: ^[0-9a-z]+$
                  description: >-
                    User-created list IDs to exclude. Leads in these lists are
                    removed from the campaign even if they appear in a synced
                    list. Do not pass system list IDs here — use
                    excludeContacted and excludeMutuals instead.
                  examples:
                    - - kx9r3m7v2n1p5q8w4y6z0taj
                excludeContacted:
                  type: boolean
                  description: >-
                    When true, leads you've already sent a direct message to are
                    excluded from the campaign. Under the hood, this excludes
                    the Contacted system list, which Inbox automatically
                    maintains across all linked accounts.
                  examples:
                    - true
                excludeMutuals:
                  type: boolean
                  description: >-
                    When true, leads with a mutual conversation (at least one
                    message sent and received) are excluded from the campaign.
                    Under the hood, this excludes the Mutual system list, which
                    Inbox automatically maintains across all linked accounts.
                  examples:
                    - false
                columnMappings:
                  type: object
                  propertyNames:
                    type: string
                  additionalProperties:
                    type: object
                    propertyNames:
                      type: string
                    additionalProperties:
                      type: string
                  description: >-
                    Custom column mappings keyed by source list ID. Each entry
                    maps a source column ID to a campaign column ID. Only needed
                    for custom columns — profile data is synced automatically.
                    Columns must be created beforehand via the columns API.
                    Unmapped source columns are ignored.
                  examples:
                    - l44e15irdq4db30i77cgphhx:
                        custom_q5cktl47a6pqa74eu06fz89v: custom_m8r2xj93hd5bk0atcw7oe4fp
                detachBehavior:
                  enum:
                    - unlink
                    - remove
                  default: unlink
                  description: >-
                    Controls what happens to leads when their source list is
                    detached. 'unlink' (default) keeps the leads in the campaign
                    but removes the link to the source list. 'remove' removes
                    leads that were only in the campaign because of the detached
                    list.
                  examples:
                    - unlink
              required: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    const: true
                required:
                  - success

````