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

# Commit an import into a list

> Commits a parsed import into a list: append to an existing one with `listId`, or name the destination with `listName` (an existing list with that exact, case-insensitive name is reused, otherwise it is created). `mapping` confirms the column mapping (source header -> standard field label, e.g. `{"fname": "First Name"}`; headers already named like a standard field need no entry, and the `suggestedMapping` from `POST /business/imports` can be sent back as-is — the `null` it carries for an unmatched header is accepted and leaves that header unmapped). `enrich` runs enrichment on the imported rows in the same job (`none` = raw rows, `email`/`phone`/`phone_and_email` = the waterfall, `demographics` = resolve to canonical contacts; billed like `POST /business/lists/{listId}/enrich`). Async: 202. `jobId` is an opaque orchestration reference and is NOT pollable — poll `GET /business/lists/{listId}` until `completionStatus` leaves `processing`.

Errors:
- `404` `IMPORT_NOT_FOUND` — importId does not decode to an upload of the token owner.
- `404` `LIST_NOT_FOUND` — The destination listId is unknown or not owned.
- `409` `LIST_NAME_AMBIGUOUS` — More than one list carries listName — reference the destination by id.
- `422` `LIST_NAME_RESERVED` — listName is a system/dynamic list title and cannot be a destination.
- `422` `VALIDATION_FAILED` — Neither or both of listId/listName, an unknown body key, an invalid enrich mode, or a malformed mapping.
- `429` `RATE_LIMITED` — The lists rate bucket (120 requests/minute, 10,000/day per token owner) is exhausted.

Requires one of the following token scopes: lists.



## OpenAPI

````yaml /openapi.json post /business/imports/{importId}/commit
openapi: 3.1.0
info:
  title: Fuse Business API
  version: 1.0.0
  description: >-
    External API for lists, campaigns, prospect search and contacts.
    Authenticate with your API token as HTTP Basic. All paths are under /api/v1.
servers:
  - url: https://api.tryfuse.ai/api/v1
    description: Production
security:
  - basicAuth: []
tags:
  - name: Lists
  - name: Custom columns
  - name: Smart columns
  - name: Exports
  - name: Campaigns
  - name: Knowledge hubs
  - name: Analytics
  - name: Website intent
  - name: Account
  - name: Prospect search
  - name: Campaign steps
  - name: Scheduled sends
  - name: Campaign templates
  - name: Agents
  - name: Research
  - name: Company search
  - name: Saved searches
  - name: Folders
  - name: Contacts
paths:
  /business/imports/{importId}/commit:
    post:
      tags:
        - Lists
      summary: Commit an import into a list
      description: >-
        Commits a parsed import into a list: append to an existing one with
        `listId`, or name the destination with `listName` (an existing list with
        that exact, case-insensitive name is reused, otherwise it is created).
        `mapping` confirms the column mapping (source header -> standard field
        label, e.g. `{"fname": "First Name"}`; headers already named like a
        standard field need no entry, and the `suggestedMapping` from `POST
        /business/imports` can be sent back as-is — the `null` it carries for an
        unmatched header is accepted and leaves that header unmapped). `enrich`
        runs enrichment on the imported rows in the same job (`none` = raw rows,
        `email`/`phone`/`phone_and_email` = the waterfall, `demographics` =
        resolve to canonical contacts; billed like `POST
        /business/lists/{listId}/enrich`). Async: 202. `jobId` is an opaque
        orchestration reference and is NOT pollable — poll `GET
        /business/lists/{listId}` until `completionStatus` leaves `processing`.


        Errors:

        - `404` `IMPORT_NOT_FOUND` — importId does not decode to an upload of
        the token owner.

        - `404` `LIST_NOT_FOUND` — The destination listId is unknown or not
        owned.

        - `409` `LIST_NAME_AMBIGUOUS` — More than one list carries listName —
        reference the destination by id.

        - `422` `LIST_NAME_RESERVED` — listName is a system/dynamic list title
        and cannot be a destination.

        - `422` `VALIDATION_FAILED` — Neither or both of listId/listName, an
        unknown body key, an invalid enrich mode, or a malformed mapping.

        - `429` `RATE_LIMITED` — The lists rate bucket (120 requests/minute,
        10,000/day per token owner) is exhausted.


        Requires one of the following token scopes: lists.
      operationId: commitImport
      parameters:
        - name: importId
          in: path
          required: true
          description: >-
            The importId returned by POST /business/imports (or
            /business/imports/presign) that identifies the uploaded file.
          schema:
            type: string
            minLength: 8
            maxLength: 800
            description: >-
              The importId returned by POST /business/imports (or
              /business/imports/presign) that identifies the uploaded file.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                listId:
                  type: string
                  description: >-
                    24-character hex id of an existing contact list to append
                    the rows to; mutually exclusive with listName, and an
                    unknown or non-owned id answers 404 LIST_NOT_FOUND.
                listName:
                  type: string
                  minLength: 1
                  maxLength: 255
                  description: >-
                    Name of the destination contact list (1-255 characters): an
                    existing list with this exact name (case-insensitive) is
                    reused, otherwise it is created; mutually exclusive with
                    listId. Two lists sharing the name answer 409
                    LIST_NAME_AMBIGUOUS and reserved system titles answer 422
                    LIST_NAME_RESERVED.
                mapping:
                  type: object
                  properties: {}
                  description: >-
                    Column mapping from source column header to target field,
                    e.g. {"fname": "First Name"} (up to 200 entries). Each key
                    is a column header spelled exactly as it appears in the file
                    (the `headers` of the import preview). Each value is one of
                    exactly these 21 target labels, spelled and cased exactly
                    like this: Full Name, First Name, Last Name, LinkedIn URL,
                    Company, Company Domain, Job Title, Job Level, Department,
                    Industry, Country, State, City, Email, Phone — plus six
                    aliases, each read only when the label it follows is missing
                    or empty: Company Name (after Company), Mobile Phone (after
                    Phone), Seniority then Level (after Job Level), and
                    linkedinUrl then linkedin (after LinkedIn URL). Map to the
                    primary label where you can. A label outside those 21 is
                    ACCEPTED and then silently drops that column — no error, no
                    custom column. Headers that already match a label
                    case-insensitively (email, first_name, title, domain) need
                    no entry, a header with no target carries null and is
                    ignored — so the suggestedMapping from POST
                    /business/imports can be sent back unchanged — and when two
                    headers name the same target only the last one is used.
                enrich:
                  type: string
                  enum:
                    - none
                    - email
                    - phone
                    - phone_and_email
                    - demographics
                  description: >-
                    Enrichment to run on the imported rows: none (default, rows
                    saved exactly as uploaded), email, phone or phone_and_email
                    (the enrichment waterfall, billed per contact processed) or
                    demographics (resolve rows to canonical contacts, 2 credits
                    per resolved contact).
      responses:
        '202':
          description: Success
          headers:
            RateLimit-Limit:
              schema:
                type: integer
              description: Requests permitted in the current window.
            RateLimit-Remaining:
              schema:
                type: integer
              description: Requests remaining in the current window.
            RateLimit-Reset:
              schema:
                type: integer
              description: Seconds until the current window resets.
          content:
            application/json:
              schema:
                type: object
                required:
                  - import
                properties:
                  import:
                    type: object
                    required:
                      - importId
                      - listId
                      - jobId
                    properties:
                      importId:
                        type: string
                      listId:
                        type: string
                      jobId:
                        type: string
              example:
                import:
                  importId: >-
                    dXBsb2Fkcy82OGExZjIwYjljNDFkMjAwMTRiM2U5MDEvM2Y2ZjBlMmEtOGQ0Yi00ZTFhLTk3YzItNWQ4YjFmMGUyYTdjLmNzdg
                  listId: 68a1f20b9c41d20014b3e901
                  jobId: 3f6f0e2a-8d4b-4e1a-97c2-5d8b1f0e2a7c
        '400':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - basicAuth: []
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
            param:
              type:
                - string
                - 'null'
            doc_url:
              type:
                - string
                - 'null'
            request_id:
              type:
                - string
                - 'null'
          required:
            - code
            - message
      required:
        - error
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >-
        Your API token (`af_…`) as the Basic-auth username, with an empty
        password.

````