Salesforce Automation Ingest Jobs API

Bulk data loading operations (insert, update, upsert, delete, hardDelete)

Documentation

📖
Documentation
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/
📖
Authentication
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_oauth_and_connected_apps.htm
📖
GettingStarted
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/quickstart.htm
📖
APIReference
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_list.htm
📖
RateLimits
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_limits.htm
📖
Documentation
https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/
📖
GettingStarted
https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/asynch_api_quickstart.htm
📖
Authentication
https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/authentication.htm
📖
Documentation
https://developer.salesforce.com/docs/atlas.en-us.api_streaming.meta/api_streaming/
📖
GettingStarted
https://developer.salesforce.com/docs/atlas.en-us.api_streaming.meta/api_streaming/quick_start.htm
📖
Documentation
https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/
📖
Documentation
https://developer.salesforce.com/docs/atlas.en-us.bi_dev_guide_rest.meta/bi_dev_guide_rest/
📖
Documentation
https://developer.salesforce.com/docs/atlas.en-us.api_tooling.meta/api_tooling/
📖
Documentation
https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/intro_what_is_chatter_connect.htm
📖
GettingStarted
https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/quickstart.htm
📖
APIReference
https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/connect_resources_overview.htm
📖
RateLimits
https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/intro_rate_limits.htm
📖
Documentation
https://developer.salesforce.com/docs/atlas.en-us.change_data_capture.meta/change_data_capture
📖
Documentation
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_actions_invocable.htm
📖
Documentation
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_composite_composite.htm
📖
Documentation
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_rest.htm
📖
GettingStarted
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_rest_intro.htm
📖
APIReference
https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_restrequest.htm

Specifications

Schemas & Data

Other Resources

🔗
JSONLD
https://raw.githubusercontent.com/api-evangelist/salesforce-automation/refs/heads/main/json-ld/salesforce-automation-context.jsonld
🔗
ChangeLog
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/rest_rns.htm
🔗
PostmanCollection
https://www.postman.com/salesforce-developers/workspace/salesforce-developers/overview
🔗
Best Practices
https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/asynch_api_best_practices.htm
🔗
Developer Guide
https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platform_events_intro.htm
🔗
Flow Object Reference
https://developer.salesforce.com/docs/atlas.en-us.api_tooling.meta/api_tooling/tooling_api_objects_flow.htm
🔗
Examples
https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/quickreference.htm
🔗
Developer Guide
https://developer.salesforce.com/docs/atlas.en-us.change_data_capture.meta/change_data_capture/cdc_what.htm
🔗
Trailhead
https://trailhead.salesforce.com/content/learn/modules/change-data-capture/understand-change-data-capture
🔗
Standard Actions Reference
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_actions_invocable_standard.htm
🔗
Custom Actions Reference
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_actions_invocable_custom.htm
🔗
Flow Actions
https://developer.salesforce.com/docs/atlas.en-us.api_action.meta/api_action/actions_obj_flow.htm
🔗
Launch a Flow from REST API
https://help.salesforce.com/s/articleView?id=sf.flow_distribute_system_rest.htm&language=en_US&type=5
🔗
Developer Guide
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/using_composite_resources.htm
🔗
Composite Batch
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_composite_batch.htm
🔗
Composite Graph
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/using_resources_composite_graph.htm
🔗
Code Samples
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_rest_code_samples.htm

OpenAPI Specification

salesforce-automation-ingest-jobs-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Salesforce Analytics (CRM Analytics) REST Actions Ingest Jobs API
  description: REST API for accessing and managing CRM Analytics (formerly Tableau CRM / Einstein Analytics) resources including datasets, lenses, dashboards, and dataflows. Enables programmatic access to analytics metadata, query execution, and dashboard management. Uses the Wave API resource at /services/data/vXX.0/wave.
  version: '63.0'
  contact:
    name: Salesforce Developer Support
    url: https://developer.salesforce.com/support
    email: developer@salesforce.com
  license:
    name: Salesforce API Terms of Use
    url: https://www.salesforce.com/company/legal/agreements/
servers:
- url: https://{instance}.salesforce.com/services/data/v63.0/wave
  description: Salesforce production or developer instance
  variables:
    instance:
      default: yourInstance
      description: Your Salesforce instance identifier
security:
- oauth2: []
- bearerAuth: []
tags:
- name: Ingest Jobs
  description: Bulk data loading operations (insert, update, upsert, delete, hardDelete)
paths:
  /jobs/ingest:
    get:
      operationId: getIngestJobs
      summary: List all ingest jobs
      description: Returns a list of all Bulk API 2.0 ingest jobs in the org. Supports filtering by job type and pagination through concurrencyMode, jobType, and queryLocator parameters.
      tags:
      - Ingest Jobs
      parameters:
      - name: isPkChunkingEnabled
        in: query
        description: Filter by PK chunking status
        schema:
          type: boolean
      - name: jobType
        in: query
        description: Filter by job type
        schema:
          type: string
          enum:
          - V2Ingest
          - Classic
      - name: queryLocator
        in: query
        description: Locator for the next page of results
        schema:
          type: string
      responses:
        '200':
          description: List of ingest jobs
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IngestJobList'
    post:
      operationId: createIngestJob
      summary: Create an ingest job
      description: Creates a new Bulk API 2.0 ingest job. After creation, the job is in the Open state and ready to accept CSV data uploads via the PUT /jobs/ingest/{jobId}/batches endpoint.
      tags:
      - Ingest Jobs
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateIngestJobRequest'
      responses:
        '200':
          description: Ingest job created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IngestJob'
        '400':
          $ref: '#/components/responses/BadRequest'
  /jobs/ingest/{jobId}:
    get:
      operationId: getIngestJob
      summary: Get ingest job status
      description: Returns the current status and details of a specific Bulk API 2.0 ingest job, including the number of records processed and failed.
      tags:
      - Ingest Jobs
      parameters:
      - $ref: '#/components/parameters/jobId'
      responses:
        '200':
          description: Ingest job details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IngestJob'
    patch:
      operationId: updateIngestJob
      summary: Close or abort an ingest job
      description: Updates the state of an ingest job. Set state to UploadComplete to indicate all data has been uploaded and processing should begin. Set state to Aborted to cancel the job.
      tags:
      - Ingest Jobs
      parameters:
      - $ref: '#/components/parameters/jobId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - state
              properties:
                state:
                  type: string
                  enum:
                  - UploadComplete
                  - Aborted
                  description: The new state for the job
      responses:
        '200':
          description: Job updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IngestJob'
    delete:
      operationId: deleteIngestJob
      summary: Delete an ingest job
      description: Deletes an ingest job. The job must be in a terminal state (JobComplete, Failed, or Aborted) before it can be deleted.
      tags:
      - Ingest Jobs
      parameters:
      - $ref: '#/components/parameters/jobId'
      responses:
        '204':
          description: Job deleted
  /jobs/ingest/{jobId}/batches:
    put:
      operationId: uploadIngestJobData
      summary: Upload data for an ingest job
      description: Uploads CSV data for a Bulk API 2.0 ingest job. The job must be in the Open state. You can upload data in multiple requests, each up to 150 MB. The first row must be the CSV header with field API names.
      tags:
      - Ingest Jobs
      parameters:
      - $ref: '#/components/parameters/jobId'
      requestBody:
        required: true
        content:
          text/csv:
            schema:
              type: string
              description: CSV data with header row containing field API names
      responses:
        '201':
          description: Data uploaded successfully
        '400':
          $ref: '#/components/responses/BadRequest'
  /jobs/ingest/{jobId}/successfulResults:
    get:
      operationId: getIngestJobSuccessfulResults
      summary: Get successful results for an ingest job
      description: Returns CSV data containing successfully processed records for a completed ingest job. Each row includes the sf__Id (the Salesforce record ID) and sf__Created (whether the record was created or updated) columns, followed by the original record data.
      tags:
      - Ingest Jobs
      parameters:
      - $ref: '#/components/parameters/jobId'
      responses:
        '200':
          description: CSV of successfully processed records
          content:
            text/csv:
              schema:
                type: string
  /jobs/ingest/{jobId}/failedResults:
    get:
      operationId: getIngestJobFailedResults
      summary: Get failed results for an ingest job
      description: Returns CSV data containing records that failed to process. Each row includes sf__Error (the error message) and sf__Id columns, followed by the original record data.
      tags:
      - Ingest Jobs
      parameters:
      - $ref: '#/components/parameters/jobId'
      responses:
        '200':
          description: CSV of failed records
          content:
            text/csv:
              schema:
                type: string
  /jobs/ingest/{jobId}/unprocessedrecords:
    get:
      operationId: getIngestJobUnprocessedRecords
      summary: Get unprocessed records for an ingest job
      description: Returns CSV data containing records that were not processed, typically because the job was aborted before all records were processed.
      tags:
      - Ingest Jobs
      parameters:
      - $ref: '#/components/parameters/jobId'
      responses:
        '200':
          description: CSV of unprocessed records
          content:
            text/csv:
              schema:
                type: string
components:
  schemas:
    CreateIngestJobRequest:
      type: object
      required:
      - object
      - operation
      properties:
        object:
          type: string
          description: The SObject type for the job (e.g., Account, Contact)
        operation:
          type: string
          enum:
          - insert
          - update
          - upsert
          - delete
          - hardDelete
          description: The DML operation to perform
        externalIdFieldName:
          type: string
          description: Required for upsert operations. The API name of the external ID field.
        columnDelimiter:
          type: string
          enum:
          - COMMA
          - TAB
          - PIPE
          - SEMICOLON
          - CARET
          - BACKQUOTE
          default: COMMA
        contentType:
          type: string
          enum:
          - CSV
          default: CSV
        lineEnding:
          type: string
          enum:
          - LF
          - CRLF
          default: LF
    IngestJobList:
      type: object
      properties:
        done:
          type: boolean
        records:
          type: array
          items:
            $ref: '#/components/schemas/IngestJob'
        nextRecordsUrl:
          type: string
    IngestJob:
      type: object
      description: A Bulk API 2.0 ingest job for inserting, updating, upserting, or deleting records
      properties:
        id:
          type: string
          description: The unique job identifier
        operation:
          type: string
          enum:
          - insert
          - update
          - upsert
          - delete
          - hardDelete
          description: The DML operation for this ingest job
        object:
          type: string
          description: The SObject type being processed
        createdById:
          type: string
          description: The ID of the user who created the job
        createdDate:
          type: string
          format: date-time
        systemModstamp:
          type: string
          format: date-time
        state:
          type: string
          enum:
          - Open
          - UploadComplete
          - InProgress
          - JobComplete
          - Failed
          - Aborted
          description: The current lifecycle state of the job
        externalIdFieldName:
          type: string
          description: The external ID field used for upsert operations
        concurrencyMode:
          type: string
          enum:
          - Parallel
          - Serial
        contentType:
          type: string
          enum:
          - CSV
        apiVersion:
          type: number
        jobType:
          type: string
          enum:
          - V2Ingest
        lineEnding:
          type: string
          enum:
          - LF
          - CRLF
        columnDelimiter:
          type: string
          enum:
          - COMMA
          - TAB
          - PIPE
          - SEMICOLON
          - CARET
          - BACKQUOTE
        numberRecordsProcessed:
          type: integer
          minimum: 0
        numberRecordsFailed:
          type: integer
          minimum: 0
        retries:
          type: integer
          minimum: 0
        totalProcessingTime:
          type: integer
          minimum: 0
          description: Total processing time in milliseconds
        errorMessage:
          type: string
    ApiError:
      type: object
      properties:
        message:
          type: string
        errorCode:
          type: string
  parameters:
    jobId:
      name: jobId
      in: path
      required: true
      description: The unique identifier of the Bulk API 2.0 job
      schema:
        type: string
  responses:
    BadRequest:
      description: Invalid request
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/ApiError'
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://login.salesforce.com/services/oauth2/authorize
          tokenUrl: https://login.salesforce.com/services/oauth2/token
          scopes:
            api: Access and manage your Salesforce data
            wave_api: Access CRM Analytics REST API resources
    bearerAuth:
      type: http
      scheme: bearer