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

# Bulk Create Radars

> Queue a bulk submission for asynchronous radar creation.

<Warning>
  The `bulk_completed` webhook carries the full per-item result array. At 1,000 items with rich `custom_fields` or filter data, the payload can approach 1–2 MB — ensure your receiver can handle it. Alternatively, use [GET /v1/radars/bulk/\{bulk\_id}](/api-reference/get-radars-bulk-status) to fetch results on demand.
</Warning>


## OpenAPI

````yaml /api_specs.yaml POST /v1/radars/bulk
openapi: 3.0.0
info:
  title: TAMradar API
  version: '1.0'
  description: Canonical OpenAPI spec for TAMradar customer-facing APIs.
servers:
  - url: https://api.tamradar.com
    description: Production API server
security: []
paths:
  /v1/radars/bulk:
    post:
      tags:
        - Radars
      summary: Submit an async bulk radar request
      description: >-
        Queues a bulk radar submission for asynchronous processing.


        This endpoint validates only the request envelope, stores all items, and
        returns immediately with a `bulk_id`.


        ## Key behavior

        - Returns `202 Accepted` when the submission is queued.

        - Per-item validation and creation happen asynchronously in the bulk
        processor.

        - Results are delivered through:
          1. `GET /v1/radars/bulk/{bulk_id}` (status polling)
          2. Webhook events (`radar_created`, `radar_failure`, and final `bulk_completed`)

        ## Requirements

        - `webhook_url` is required for async bulk submissions.

        - `radars` must contain at least 1 item and at most 1000 items.

        - Request body size limit is 1MB.


        ## Rate limiting

        - Bulk submissions use a dedicated bulk budget
        (`rate_limit_bulk_per_minute`, default 10/min per account).

        - Each bulk request consumes 1 token regardless of item count.

        - On `429`, use `Retry-After` before retrying.
      operationId: createBulkRadarsAsync
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - webhook_url
                - radars
              properties:
                webhook_url:
                  type: string
                  format: uri
                  maxLength: 2048
                  description: >-
                    Webhook endpoint that receives async item results and the
                    final bulk_completed event.
                  example: https://your-domain.com/webhooks/tamradar
                radars:
                  type: array
                  minItems: 1
                  maxItems: 1000
                  description: >-
                    Array of radar payloads. Each item uses the same body
                    structure as single radar creation (POST /v1/radars):
                    include radar_type plus the matching fields for that radar
                    (for example domain/profile_url/keyword, filters,
                    custom_fields). Item-level validation runs asynchronously
                    after the request is accepted.
                  items:
                    $ref: '#/components/schemas/BulkRadarItem'
              additionalProperties: false
            examples:
              mixed_bulk:
                summary: Mixed company/contact/industry submission
                value:
                  webhook_url: https://your-domain.com/webhooks/tamradar
                  radars:
                    - domain: stripe.com
                      radar_type: company_job_openings
                      departments:
                        - Engineering
                      custom_fields:
                        crm_account_id: acc_001
                    - domain: stripe.com
                      radar_type: contact_job_changes
                      profile_url: https://www.linkedin.com/in/janedoe
                      custom_fields:
                        contact_id: con_001
                    - radar_type: industry_mentions
                      keyword: zero trust security
                      countries:
                        - US
      responses:
        '202':
          description: Bulk submission accepted and queued for async processing
          headers:
            X-RateLimit-Limit:
              description: Per-minute bulk submission limit
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Bulk submission tokens remaining after this request
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Seconds until the bulk minute bucket resets
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                      - success
                  code:
                    type: integer
                    enum:
                      - 202
                  message:
                    type: string
                  bulk_id:
                    type: string
                    format: uuid
                  summary:
                    type: object
                    properties:
                      total:
                        type: integer
                    required:
                      - total
                  timestamp:
                    type: string
                    format: date-time
                required:
                  - status
                  - code
                  - message
                  - bulk_id
                  - summary
                  - timestamp
              example:
                status: success
                code: 202
                message: >-
                  Bulk submission accepted — radars are being created
                  asynchronously
                bulk_id: 5f9da22e-4778-427c-b7e4-dab2a8d9d709
                summary:
                  total: 3
                timestamp: '2026-05-24T18:22:01.000Z'
        '400':
          description: Invalid request body
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                invalid_body:
                  value:
                    status: error
                    code: 400
                    message: Invalid request body
                    errors:
                      - field: webhook_url
                        reason: webhook_url is required for async bulk requests
                    timestamp: '2026-05-24T18:22:01.000Z'
        '401':
          description: Authentication required — missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Bulk rate limit exceeded. No submission was queued.
          headers:
            Retry-After:
              description: Seconds until request can be retried
              schema:
                type: integer
            X-RateLimit-Limit:
              description: Per-minute bulk submission limit
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Bulk submission tokens remaining right now
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                status: error
                code: 429
                message: Rate limit exceeded — wait and retry.
                errors:
                  - field: rate_limit
                    reason: minute
                timestamp: '2026-05-24T18:22:01.000Z'
        '500':
          description: Server error while queuing bulk submission
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    BulkRadarItem:
      type: object
      required:
        - radar_type
      properties:
        radar_type:
          type: string
          description: >-
            Radar type to create. This selects which fields are required for the
            item.
          enum:
            - company_new_hires
            - company_job_openings
            - company_promotions
            - company_reviews
            - company_mentions
            - company_social_posts
            - company_social_posts_cxo
            - company_social_engagements
            - contact_job_changes
            - contact_social_engagements
            - contact_social_posts
            - industry_mentions
            - industry_funding_rounds
            - industry_new_companies
            - industry_job_openings
        domain:
          type: string
          description: >-
            Company domain. Required for all company_* radar types and for
            contact_job_changes.
        profile_url:
          type: string
          format: uri
          description: >-
            LinkedIn profile URL used by contact radar types. Required for
            contact_social_engagements and contact_social_posts.
        email:
          type: string
          format: email
          description: Contact email identifier for contact_job_changes.
        full_name:
          type: string
          description: Contact full-name identifier for contact_job_changes.
        keyword:
          type: string
          minLength: 3
          description: >-
            Keyword filter. Required for industry_mentions and
            industry_job_openings.
        countries:
          type: array
          description: Optional country filter for industry_job_openings (maximum 5).
          maxItems: 5
          items:
            type: string
        departments:
          type: array
          description: Optional company filter.
          items:
            type: string
        seniorities:
          type: array
          description: Optional company filter.
          items:
            type: string
        job_titles:
          type: string
          description: Optional company filter expression.
        custom_fields:
          type: object
          description: >-
            Optional metadata attached to each item. Keys and values should be
            strings.
          additionalProperties:
            type: string
        include_historical:
          type: boolean
          description: >-
            Optional flag to include historical matches for this radar item when
            supported.
      additionalProperties: false
    ErrorResponse:
      type: object
      required:
        - status
        - code
        - message
        - errors
        - timestamp
        - error_id
      properties:
        status:
          type: string
          enum:
            - error
        code:
          type: integer
          enum:
            - 400
            - 401
            - 402
            - 403
            - 404
            - 409
            - 429
            - 500
            - 503
        message:
          type: string
        errors:
          type: array
          items:
            type: object
            required:
              - field
              - reason
            properties:
              field:
                type: string
              reason:
                type: string
        timestamp:
          type: string
          format: date-time
        error_id:
          type: string
          format: uuid
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````