Extole Batch Jobs API

The Batch Jobs API from Extole — 6 operation(s) for batch jobs.

OpenAPI Specification

extole-batch-jobs-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  description: 'Consumer-to-Extole integration endpoints: consumer event submission, zone rendering, profile management, and SDK-backing operations for browser and native app environments.'
  title: Integration API - Consumer to Extole Audiences Batch Jobs API
  version: '1.0'
servers:
- description: Production
  url: https://{brand}.extole.io
  variables:
    brand:
      default: yourcompany
      description: Your Extole client subdomain (e.g. 'mycompany' for mycompany.extole.io)
security:
- HEADER: []
- QUERY: []
- COOKIE: []
tags:
- name: Batch Jobs
paths:
  /v6/batches:
    get:
      description: Returns a paginated list of batch jobs for the authenticated client. Filter by `name`, `event_name`, `tags`, `status`, or `user_id`. Results are ordered by creation date descending. Default page size is 100.
      operationId: listBatches
      parameters:
      - in: query
        name: name
        schema:
          type: string
      - in: query
        name: event_name
        schema:
          type: string
      - in: query
        name: user_id
        schema:
          type: string
      - in: query
        name: tags
        schema:
          items:
            type: string
          type: array
          uniqueItems: true
      - in: query
        name: status
        schema:
          items:
            enum:
            - CANCELED
            - DISPATCHING
            - DONE
            - EXPIRED
            - FAILED
            - IN_PROGRESS
            - PENDING
            - QUEUED
            type: string
          type: array
          uniqueItems: true
      - in: query
        name: limit
        schema:
          format: int32
          type: integer
      - in: query
        name: offset
        schema:
          format: int32
          type: integer
      responses:
        '200':
          description: List of batch jobs matching the filter criteria.
        '400':
          content:
            application/json:
              examples:
                binding_error:
                  $ref: '#/components/examples/binding_error'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Missing or invalid access token.
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: List batch jobs
      tags:
      - Batch Jobs
      x-extole-bundle: integration-server-to-extole
      x-extole-visibility: visible
    post:
      description: Creates a new asynchronous batch job that reads its data source row-by-row and dispatches a consumer event for each row. The data source can be a previously run report, an audience list, or an uploaded file asset (CSV, PSV, or JSON). The job begins processing immediately after creation; poll `GET /v6/batches/{batchId}` to monitor `status`. For small inline batches of events, use `POST /v6/async-events` in the event-api instead.
      operationId: createBatch
      requestBody:
        content:
          application/json:
            example:
              columns:
              - name: name
                prefix: prefix
                type: FULL_NAME_MATCH
                validation_policy: OPTIONAL
              data_source:
                audience_list_id: audience_list_id
                type: AUDIENCE_LIST
              default_event_name: default_event_name
              event_columns:
              - event_column
              event_data:
                event_data_key: event_data_key
              event_name: event_name
              name: name
              scopes:
              - CLIENT_ADMIN
              tags:
              - tag
            schema:
              $ref: '#/components/schemas/BatchJobCreateRequest'
        description: Batch job creation request.
        required: true
      responses:
        '200':
          description: Batch job created. Returns the full job record with an initial `status` of `PENDING`.
        '400':
          content:
            application/json:
              examples:
                batch_job_data_source_empty:
                  $ref: '#/components/examples/batch_job_data_source_empty'
                batch_job_event_name_invalid:
                  $ref: '#/components/examples/batch_job_event_name_invalid'
                batch_job_name_invalid:
                  $ref: '#/components/examples/batch_job_name_invalid'
                batch_job_tag_invalid:
                  $ref: '#/components/examples/batch_job_tag_invalid'
                batch_job_unauthorized_scopes:
                  $ref: '#/components/examples/batch_job_unauthorized_scopes'
                binding_error:
                  $ref: '#/components/examples/binding_error'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: 'Validation error. Check the `code` field — common causes: missing or invalid `data_source`, unsupported `event_name` format, or a column reference that doesn''t exist in the data source.'
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Missing or invalid access token.
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: Create a batch job
      tags:
      - Batch Jobs
      x-extole-bundle: integration-server-to-extole
      x-extole-visibility: visible
  /v6/batches/{batchId}:
    get:
      description: 'Returns the full record for a single batch job, including current `status`, `success_rows`, `failed_rows`, and data source configuration. Poll this endpoint to monitor job progress until `status` reaches a terminal state: `DONE`, `FAILED`, `CANCELED`, or `EXPIRED`.'
      operationId: getBatch
      parameters:
      - description: Batch job ID.
        in: path
        name: batchId
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Batch job record.
        '400':
          content:
            application/json:
              examples:
                batch_job_delete_not_allowed:
                  $ref: '#/components/examples/batch_job_delete_not_allowed'
                batch_job_invalid_state_transition:
                  $ref: '#/components/examples/batch_job_invalid_state_transition'
                binding_error:
                  $ref: '#/components/examples/binding_error'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Missing or invalid access token.
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '404':
          description: Batch job not found or does not belong to this client.
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '423':
          content:
            application/json:
              examples:
                batch_job_locked:
                  $ref: '#/components/examples/batch_job_locked'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Error
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: Get a batch job
      tags:
      - Batch Jobs
      x-extole-bundle: integration-server-to-extole
      x-extole-visibility: visible
    put:
      description: 'Updates the mutable fields of an existing batch job: `name`, `tags`, and `scopes`. The job must not be in a terminal state (`DONE`, `FAILED`, `CANCELED`, or `EXPIRED`). Data source, event name, and column mappings are immutable after creation.'
      operationId: updateBatch
      parameters:
      - description: Batch job ID.
        in: path
        name: batchId
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            example:
              name: name
              scopes:
              - CLIENT_ADMIN
              tags:
              - tag
            schema:
              $ref: '#/components/schemas/BatchJobUpdateRequest'
      responses:
        '200':
          description: Batch job updated. Returns the full updated job record.
        '400':
          content:
            application/json:
              examples:
                batch_job_data_source_empty:
                  $ref: '#/components/examples/batch_job_data_source_empty'
                batch_job_delete_not_allowed:
                  $ref: '#/components/examples/batch_job_delete_not_allowed'
                batch_job_event_name_invalid:
                  $ref: '#/components/examples/batch_job_event_name_invalid'
                batch_job_invalid_state_transition:
                  $ref: '#/components/examples/batch_job_invalid_state_transition'
                batch_job_name_invalid:
                  $ref: '#/components/examples/batch_job_name_invalid'
                batch_job_tag_invalid:
                  $ref: '#/components/examples/batch_job_tag_invalid'
                batch_job_unauthorized_scopes:
                  $ref: '#/components/examples/batch_job_unauthorized_scopes'
                binding_error:
                  $ref: '#/components/examples/binding_error'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_null:
                  $ref: '#/components/examples/invalid_null'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Invalid field value or omissible constraint violation.
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Missing or invalid access token.
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '404':
          description: Batch job not found or does not belong to this client.
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '423':
          content:
            application/json:
              examples:
                batch_job_locked:
                  $ref: '#/components/examples/batch_job_locked'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Error
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: Update a batch job
      tags:
      - Batch Jobs
      x-extole-bundle: integration-server-to-extole
      x-extole-visibility: visible
    delete:
      description: Permanently deletes a batch job record. The job must be in a terminal state (`DONE`, `FAILED`, `CANCELED`, or `EXPIRED`). This action is irreversible; the job record cannot be recovered after deletion.
      operationId: deleteBatch
      parameters:
      - description: Batch job ID.
        in: path
        name: batchId
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Batch job deleted. Returns the final job record at the time of deletion.
        '400':
          content:
            application/json:
              examples:
                batch_job_delete_not_allowed:
                  $ref: '#/components/examples/batch_job_delete_not_allowed'
                batch_job_invalid_state_transition:
                  $ref: '#/components/examples/batch_job_invalid_state_transition'
                binding_error:
                  $ref: '#/components/examples/binding_error'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Missing or invalid access token.
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '404':
          description: Batch job not found or does not belong to this client.
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '423':
          content:
            application/json:
              examples:
                batch_job_locked:
                  $ref: '#/components/examples/batch_job_locked'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Error
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: Delete a batch job
      tags:
      - Batch Jobs
      x-extole-bundle: integration-server-to-extole
      x-extole-visibility: visible
  /v6/batches/{batchId}/cancel:
    post:
      description: Requests cancellation of a batch job. The job transitions to `CANCELED` status. Only jobs in a non-terminal state (`PENDING`, `QUEUED`, `IN_PROGRESS`, or `DISPATCHING`) can be canceled.
      operationId: cancelBatch
      parameters:
      - description: Batch job ID.
        in: path
        name: batchId
        required: true
        schema:
          type: string
      responses:
        '200':
          description: 'Cancellation accepted. Returns the updated job record with `status: CANCELED`.'
        '400':
          content:
            application/json:
              examples:
                batch_job_delete_not_allowed:
                  $ref: '#/components/examples/batch_job_delete_not_allowed'
                batch_job_invalid_state_transition:
                  $ref: '#/components/examples/batch_job_invalid_state_transition'
                binding_error:
                  $ref: '#/components/examples/binding_error'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Missing or invalid access token.
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '404':
          description: Batch job not found or does not belong to this client.
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '423':
          content:
            application/json:
              examples:
                batch_job_locked:
                  $ref: '#/components/examples/batch_job_locked'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Error
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: Cancel a batch job
      tags:
      - Batch Jobs
      x-extole-bundle: integration-server-to-extole
      x-extole-visibility: visible
  /v6/batches/{batchId}/expire:
    post:
      description: Marks a completed batch job as expired, releasing associated resources. Only jobs in terminal state (`DONE`, `FAILED`, or `CANCELED`) can be expired. Once expired, the job record remains queryable but its data source reference is released.
      operationId: expireBatch
      parameters:
      - description: Batch job ID.
        in: path
        name: batchId
        required: true
        schema:
          type: string
      responses:
        '200':
          description: 'Batch job expired. Returns the updated job record with `status: EXPIRED`.'
        '400':
          content:
            application/json:
              examples:
                batch_job_delete_not_allowed:
                  $ref: '#/components/examples/batch_job_delete_not_allowed'
                batch_job_invalid_state_transition:
                  $ref: '#/components/examples/batch_job_invalid_state_transition'
                binding_error:
                  $ref: '#/components/examples/binding_error'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Missing or invalid access token.
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '404':
          description: Batch job not found or does not belong to this client.
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '423':
          content:
            application/json:
              examples:
                batch_job_locked:
                  $ref: '#/components/examples/batch_job_locked'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Error
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
      summary: Expire a batch job
      tags:
      - Batch Jobs
      x-extole-bundle: integration-server-to-extole
      x-extole-visibility: visible
  /v6/jobs/history:
    get:
      description: Returns file validation monitor execution history aggregated across all pods.
      operationId: listJobsHistory
      parameters:
      - in: query
        name: limit
        schema:
          format: int32
          type: integer
      - in: query
        name: offset
        schema:
          format: int32
          type: integer
      - in: query
        name: job_id
        schema:
          type: string
      - in: query
        name: status
        schema:
          enum:
          - FAIL
          - IN_PROGRESS
          - SUCCESS
          type: string
      - in: query
        name: start_date
        schema:
          $ref: '#/components/schemas/ZonedDateTime'
      - in: query
        name: end_date
        schema:
          $ref: '#/components/schemas/ZonedDateTime'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/JobHistoryResponse'
                type: array
          description: Job execution history entries.
        '400':
          content:
            application/json:
              examples:
                binding_error:
                  $ref: '#/components/examples/binding_error'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                job_history_not_found:
                  $ref: '#/components/examples/job_history_not_found'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unauthorized
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '429':
          content:
            application/json:
       

# --- truncated at 32 KB (53 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/extole/refs/heads/main/openapi/extole-batch-jobs-api-openapi.yml