Live Direct Marketing Companies API

The Companies API from Live Direct Marketing — 19 operation(s) for companies.

Business capability
Customer Data Management BC-420.10

Operations 23

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /api/companies/stats Get company statistics · Get company statistics, optionally scoped to a list #
Ask an LLM
“How many companies do I have in my CRM and how are they broken down?”
“Can I get company stats for just one list?”
Tell an agent
Show company statistics for my whole workspace.
Get company stats scoped to list {listId}.
GET /api/companies List and filter companies · List companies with pagination, search, and filters #
Ask an LLM
“Can I page through my companies and search them by name or domain?”
“Which companies are in a particular list, sorted by when they were added?”
Tell an agent
List companies matching {search} with includeDeleted={includeDeleted}.
Show companies in list {listId} sorted by {sortBy}.
POST /api/companies Create a company record · Create a new company. #
Ask an LLM
“How do I add a new company to my CRM?”
“Can I set the domain, industry and country when creating a company?”
Tell an agent
Create a company named {name} with domain {domain}.
Add company {name} in {country}, industry {industry}.
GET /api/companies/duplicates Find duplicate companies · Find duplicate companies in the workspace. #
Ask an LLM
“Do I have duplicate companies in my workspace?”
“Which companies share the same tax number, domain or name?”
Tell an agent
Find duplicate company groups in my workspace.
Show page {page} of duplicate companies, {pageSize} groups per page.
GET /api/companies/{id} Get a company by id · Get a single company by ID #
Ask an LLM
“What details do I have stored for a specific company?”
“Can I pull up one company record by its id?”
Tell an agent
Show company {id}.
Fetch the full record for company {id}.
PATCH /api/companies/{id} Update a company's details · Update an existing company #
Ask an LLM
“Can I change the website, phone or LinkedIn of an existing company?”
“How do I fix the industry on a company I already added?”
Tell an agent
Change the domain of company {id} to {domain}.
Set the LinkedIn URL of existing company {id} to {linkedin}.
DELETE /api/companies/{id} Move a company to the trash · Soft-delete a company #
Ask an LLM
“How do I delete a company but keep the option to restore it?”
“Can I send a company to the trash instead of erasing it?”
Tell an agent destructive · confirm first
Soft-delete company {id}.
Move company {id} to the trash.
GET /api/companies/{id}/timeline View a company's activity timeline · Get a paginated timeline of events for a company #
Ask an LLM
“What has happened with a company recently?”
“Can I see the event history for one company page by page?”
Tell an agent
Show the timeline of events for company {id}.
Get page {page} of company {id}'s timeline.
POST /api/companies/bulk Run a bulk action on companies · Enqueue a bulk action on multiple companies (async) #
Ask an LLM
“Can I tag or delete many companies at once?”
“Is there a way to add a batch of companies to a list in one go?”
Tell an agent
Run bulk action {action} on companies {companyIds}.
Add companies {companyIds} to list {listId} in bulk using action {action}.
GET /api/companies/bulk/{jobId} Check a bulk company job · Get the status of a bulk company job #
Ask an LLM
“Has my bulk company action finished yet?”
“What is the progress of a bulk job on companies?”
Tell an agent
Check the status of bulk company job {jobId}.
Tell me whether company bulk job {jobId} has finished.
DELETE /api/companies/bulk/{jobId} Cancel a bulk company job · Cancel an in-progress bulk company job #
Ask an LLM
“Can I stop a bulk company action that is still running?”
“How do I abort an in-progress bulk job on companies?”
Tell an agent destructive · confirm first
Cancel bulk company job {jobId}.
Abort the running company bulk job {jobId}.
GET /api/companies/export/columns List exportable company columns · List exportable column definitions for companies #
Ask an LLM
“Which columns can I include when exporting companies?”
“What fields are available for a company export?”
Tell an agent
List the columns available for a company export.
Show me which company fields can be exported.
POST /api/companies/export Export companies to a file · Export companies to a downloadable file #
Ask an LLM
“Can I download my companies as a spreadsheet?”
“How do I export just the companies from one list?”
Tell an agent
Export companies with scope {scope} as {format}.
Export the companies in list {listId} using scope {scope}.
POST /api/companies/merge Merge companies into one record · Merge multiple companies into one keeper record #
Ask an LLM
“Can I combine several duplicate companies into a single record?”
“Which company is kept when I merge duplicates?”
Tell an agent destructive · confirm first
Merge companies {mergeIds} into keeper {keepId}.
Keep company {keepId} and fold {mergeIds} into it.
POST /api/companies/import/google-sheets Fetch company rows from Google Sheets · Fetch rows from a Google Sheets URL for import. #
Ask an LLM
“Can I import companies straight from a Google Sheet?”
“Does it suggest a column mapping when I load a Google Sheets URL?”
Tell an agent
Load company rows from Google Sheet {url}.
Fetch the headers and rows of {url} for a company import.
POST /api/companies/import/preview Preview a companies import · Preview a companies import with proposed mapping #
Ask an LLM
“Can I see how my company rows will be mapped before importing them?”
“What will a companies import look like with my proposed mapping?”
Tell an agent
Preview importing these {rows} with mapping {mapping}.
Dry-run the company import using column mapping {mapping}.
POST /api/companies/import/start Start a companies-only import · Start a companies import. #
Ask an LLM
“How do I actually run an import of companies from my file?”
“Can an import skip, update or enrich companies that already exist?”
Tell an agent
Import company {rows} using mapping {mapping}.
Start the companies import with mapping {mapping} and options {options}.
POST /api/companies/import/combined Import companies with their contacts · Combined companies + contacts import. #
Ask an LLM
“Can I import companies and their contacts from the same file?”
“Is there a single import that creates both company and contact records?”
Tell an agent
Run a combined companies-and-contacts import of {rows} with mapping {mapping}.
Import companies plus contacts using mapping {mapping} and options {options}.
POST /api/companies/{id}/restore Restore a trashed company · Restore a soft-deleted company #
Ask an LLM
“Can I bring back a company I deleted by mistake?”
“How do I undo a company soft-delete?”
Tell an agent
Restore company {id} from the trash.
Undelete company {id}.
DELETE /api/companies/{id}/purge Permanently delete a trashed company · PERMANENTLY delete a trashed company (requires isDeleted). Irreversible #
Ask an LLM
“Can I erase a company from the trash forever?”
“Is there an irreversible delete for companies already in the trash?”
Tell an agent destructive · confirm first
Permanently purge trashed company {id}.
Erase company {id} from the trash for good.
DELETE /api/companies/import/rollback/{batchId} Roll back a company import batch · Roll back a company import batch by ID #
Ask an LLM
“Can I undo a company import that went wrong?”
“How do I remove every company created by one import batch?”
Tell an agent destructive · confirm first
Roll back company import batch {batchId}.
Undo the companies imported in batch {batchId}.
PATCH /api/companies/{id}/freeze Freeze a company to block sending · Freeze a company (set status FROZEN). Blocks campaign sending (#369) #
Ask an LLM
“Can I stop campaigns from emailing a particular company?”
“What does freezing a company do?”
Tell an agent
Freeze company {id} so campaigns skip it.
Block campaign sending to company {id}.
PATCH /api/companies/{id}/unfreeze Unfreeze a company · Unfreeze a company (set status ACTIVE). #
Ask an LLM
“How do I let campaigns reach a frozen company again?”
“Does unfreezing a company resend the messages it skipped?”
Tell an agent
Unfreeze company {id}.
Set frozen company {id} back to active.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/live-direct-marketing-online:live-direct-marketing-online-companies-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

live-direct-marketing-online-companies-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: LDM v3 Companies API
  description: 'Multi-tenant B2B outreach automation platform. Auth: JWT Bearer (15-min) or tenant API key (ldm_*) managed in CRM Settings → API Keys. All tenant-scoped endpoints require the X-Tenant-Id header.'
  version: 1.0.0
  contact: {}
servers:
- url: https://api.live-direct-marketing.online
  description: Production
- url: https://api.dev.live-direct-marketing.online
  description: Development
- url: http://127.0.0.1:3000
  description: Local
tags:
- name: Companies
paths:
  /api/companies/stats:
    get:
      operationId: CompaniesController_getStats
      parameters:
      - name: listId
        required: false
        in: query
        description: Restrict stats to a single list
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Get company statistics, optionally scoped to a list
      tags:
      - Companies
      x-required-scope:
      - crm:read
  /api/companies:
    get:
      operationId: CompaniesController_findAll
      parameters:
      - name: page
        required: false
        in: query
        description: 1-based page number
        schema:
          example: 1
          type: number
      - name: pageSize
        required: false
        in: query
        description: Items per page (default 25)
        schema:
          example: 25
          type: number
      - name: search
        required: false
        in: query
        description: Full-text search across name/domain/description
        schema:
          type: string
      - name: listId
        required: false
        in: query
        description: Filter to companies in this list
        schema:
          type: string
      - name: sortBy
        required: false
        in: query
        description: Sort column (e.g. createdAt, name)
        schema:
          type: string
      - name: sortDir
        required: false
        in: query
        description: Sort direction
        schema:
          enum:
          - asc
          - desc
          type: string
      - name: sort
        required: false
        in: query
        description: Combined sort token (alternative to sortBy/sortDir)
        schema:
          type: string
      - name: quickFilter
        required: false
        in: query
        description: Named quick-filter preset
        schema:
          type: string
      - name: filters
        required: false
        in: query
        description: JSON-stringified array of advanced filter rules
        schema:
          type: string
      - name: includeDeleted
        required: true
        in: query
        schema:
          type: string
      - name: onlyDeleted
        required: true
        in: query
        schema:
          type: string
      - name: limit
        required: false
        in: query
        description: Cap the number of rows returned (overrides pageSize when set)
        schema:
          type: number
      - name: ids
        required: false
        in: query
        description: Restrict to these company ids (repeat the param or send an array)
        schema:
          type: array
          items:
            type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: List companies with pagination, search, and filters
      tags:
      - Companies
    post:
      operationId: CompaniesController_create
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCompanyDto'
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Create a new company.
      tags:
      - Companies
  /api/companies/duplicates:
    get:
      operationId: CompaniesController_findDuplicates
      parameters:
      - name: page
        required: false
        in: query
        description: 1-based page number
        schema:
          example: 1
          type: number
      - name: pageSize
        required: false
        in: query
        description: Groups per page (default 100, max 500)
        schema:
          example: 100
          type: number
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Find duplicate companies in the workspace.
      tags:
      - Companies
      x-required-scope:
      - crm:read
  /api/companies/{id}:
    get:
      operationId: CompaniesController_findById
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Get a single company by ID
      tags:
      - Companies
    patch:
      operationId: CompaniesController_update
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCompanyDto'
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Update an existing company
      tags:
      - Companies
    delete:
      operationId: CompaniesController_softDelete
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Soft-delete a company
      tags:
      - Companies
  /api/companies/{id}/timeline:
    get:
      operationId: CompaniesController_getTimeline
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: page
        required: false
        in: query
        description: 1-based page number
        schema:
          example: 1
          type: number
      - name: pageSize
        required: false
        in: query
        description: Items per page (default 20)
        schema:
          example: 20
          type: number
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Get a paginated timeline of events for a company
      tags:
      - Companies
  /api/companies/bulk:
    post:
      operationId: CompaniesController_bulk
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompaniesBulkDto'
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Enqueue a bulk action on multiple companies (async)
      tags:
      - Companies
      x-required-scope:
      - crm:write
  /api/companies/bulk/{jobId}:
    get:
      operationId: CompaniesController_getBulkStatus
      parameters:
      - name: jobId
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Get the status of a bulk company job
      tags:
      - Companies
    delete:
      operationId: CompaniesController_cancelBulk
      parameters:
      - name: jobId
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Cancel an in-progress bulk company job
      tags:
      - Companies
  /api/companies/export/columns:
    get:
      operationId: CompaniesController_getExportColumns
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: List exportable column definitions for companies
      tags:
      - Companies
      x-required-scope:
      - crm:read
  /api/companies/export:
    post:
      operationId: CompaniesController_exportCompanies
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExportCompaniesDto'
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Export companies to a downloadable file
      tags:
      - Companies
      x-required-scope:
      - crm:write
  /api/companies/merge:
    post:
      operationId: CompaniesController_mergeCompanies
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MergeCompaniesDto'
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Merge multiple companies into one keeper record
      tags:
      - Companies
      x-required-scope:
      - crm:write
  /api/companies/import/google-sheets:
    post:
      operationId: CompaniesController_importFromGoogleSheets
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImportFromGoogleSheetsDto'
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Fetch rows from a Google Sheets URL for import.
      tags:
      - Companies
      x-required-scope:
      - crm:write
  /api/companies/import/preview:
    post:
      operationId: CompaniesController_importPreview
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompaniesImportPreviewDto'
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Preview a companies import with proposed mapping
      tags:
      - Companies
      x-required-scope:
      - crm:write
  /api/companies/import/start:
    post:
      operationId: CompaniesController_importStart
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompaniesImportStartDto'
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Start a companies import.
      tags:
      - Companies
      x-required-scope:
      - crm:write
  /api/companies/import/combined:
    post:
      operationId: CompaniesController_importCombined
      parameters:
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompaniesImportCombinedDto'
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Combined companies + contacts import.
      tags:
      - Companies
      x-required-scope:
      - crm:write
  /api/companies/{id}/restore:
    post:
      operationId: CompaniesController_restore
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '201':
          description: ''
      security:
      - jwt: []
      summary: Restore a soft-deleted company
      tags:
      - Companies
  /api/companies/{id}/purge:
    delete:
      operationId: CompaniesController_purge
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: PERMANENTLY delete a trashed company (requires isDeleted). Irreversible
      tags:
      - Companies
  /api/companies/import/rollback/{batchId}:
    delete:
      operationId: CompaniesController_rollbackImport
      parameters:
      - name: batchId
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Roll back a company import batch by ID
      tags:
      - Companies
  /api/companies/{id}/freeze:
    patch:
      operationId: CompaniesController_freeze
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Freeze a company (set status FROZEN). Blocks campaign sending (#369)
      tags:
      - Companies
  /api/companies/{id}/unfreeze:
    patch:
      operationId: CompaniesController_unfreeze
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      - name: X-Tenant-Id
        in: header
        required: false
        schema:
          type: string
          format: uuid
        description: Tenant UUID — required for all tenant-scoped endpoints
      responses:
        '200':
          description: ''
      security:
      - jwt: []
      summary: Unfreeze a company (set status ACTIVE).
      tags:
      - Companies
components:
  schemas:
    MergeCompaniesDto:
      type: object
      properties:
        keepId:
          type: string
          description: Id of the company record to keep
        mergeIds:
          description: Ids of the companies to merge into keepId and delete
          type: array
          items:
            type: string
      required:
      - keepId
      - mergeIds
    CreateCompanyDto:
      type: object
      properties:
        name:
          type: string
          maxLength: 255
        domain:
          type: string
        industry:
          type: string
        size:
          type: object
        country:
          type: string
        city:
          type: string
        address:
          type: string
        phone:
          type: string
        website:
          type: string
        description:
          type: string
        source:
          type: string
        taxId:
          type: string
          maxLength: 20
        status:
          type: object
        importBatchId:
          type: string
      required:
      - name
    CompaniesBulkDto:
      type: object
      properties:
        action:
          type: string
          description: Bulk action name (e.g. delete, addTags, removeTags, setField, addToList)
        companyIds:
          description: Company ids to act on
          type: array
          items:
            type: string
        ids:
          description: Alias for companyIds
          type: array
          items:
            type: string
        tagIds:
          description: Tag ids for addTags/removeTags actions
          type: array
          items:
            type: string
        listId:
          type: string
          description: Target list id for addToList action
        fieldName:
          type: string
          description: Field name for a setField-style action
        fieldValue:
          type: object
          description: Field value for a setField-style action (shape depends on fieldName)
      required:
      - action
    UpdateCompanyDto:
      type: object
      properties:
        name:
          type: string
          maxLength: 255
        domain:
          type: string
        industry:
          type: string
        size:
          type: object
        country:
          type: string
        city:
          type: string
        address:
          type: string
        phone:
          type: string
        website:
          type: string
        description:
          type: string
        source:
          type: string
        taxId:
          type: string
          maxLength: 20
        status:
          type: object
        importBatchId:
          type: string
        state:
          type: string
        linkedin:
          type: string
        foundedYear:
          type: string
          pattern: /^\d{4}$/
        catalogInn:
          type: string
          maxLength: 12
        logo:
          type: string
    CompaniesImportPreviewDto:
      type: object
      properties:
        rows:
          description: Raw rows parsed from the source file/sheet
          type: array
          items:
            type: object
        mapping:
          type: object
          description: Column -> field mapping (csvColumn -> target field)
      required:
      - rows
      - mapping
    ImportFromGoogleSheetsDto:
      type: object
      properties:
        url:
          type: string
          description: Google Sheets URL to fetch rows from
      required:
      - url
    CompaniesImportCombinedDto:
      type: object
      properties:
        rows:
          description: Raw rows parsed from the source file/sheet
          type: array
          items:
            type: object
        mapping:
          type: object
          description: Column -> field mapping. Company fields (name, domain, inn, industry, size, country, city, address, state, phone, website, source), custom cf:<key>, contact c:firstName/c:lastName/c:email/c:phone/c:position/c:personalEmail/c:linkedin
        options:
          type: object
          description: dedupeBy, genericContactName, listId — see POST /companies/import/combined summary
      required:
      - rows
      - mapping
    CompaniesImportStartDto:
      type: object
      properties:
        rows:
          description: Raw rows parsed from the source file/sheet
          type: array
          items:
            type: object
        mapping:
          type: object
          description: Column -> field mapping (csvColumn -> target field)
        options:
          type: object
          description: 'dedupeBy: "auto"|"inn"|"domain" (default auto); duplicateHandling: "skip"|"update"|"enrich"|"create" (default skip). "enrich" (#1057) fills only EMPTY fields of the matched duplicate from the file, never overwrites non-empty ones; customFields merge by the same rule (canon mergeCustomFields). listId (#1057): every row that matched a card — created, updated, OR a found duplicate (skip/enrich) — is added to this list; must be an existing list id in this tenant.'
      required:
      - rows
      - mapping
    ExportCompaniesDto:
      type: object
      properties:
        scope:
          type: string
          description: Which companies to export
          enum:
          - all
          - filtered
          - selected
        companyIds:
          description: Company ids to export when scope is "selected"
          type: array
          items:
            type: string
        search:
          type: string
          description: Search term applied when scope is "filtered"
        format:
          type: string
          description: Export file format (e.g. csv, xlsx)
        columns:
          description: Column keys to include (defaults to COMPANY_EXPORT_COLUMNS defaults)
          type: array
          items:
            type: string
        listId:
          type: string
          description: Restrict export to companies in this list id
      required:
      - scope
  securitySchemes:
    jwt:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: JWT access token from /auth/login (Bearer <token>)
    tenant-api-key:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: Tenant API key (Bearer ldm_*) for MCP/A2A clients. Issued via CRM Settings → API Keys.
    rpa-service:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: Dedicated RPA service key. No tenant API-key or query-key authentication.