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

# Push records by task ID

> Pushes records through the pipeline, directly to an index.

You can make the call synchronous by providing the `watch` parameter, for asynchronous calls, you can use the observability endpoints or the debugger dashboard to see the status of your task.
If you want to transform your data before indexing, this is the recommended way of ingesting your records.
This method is similar to `push`, but requires a `taskID` instead of a `indexName`, which is useful when many `destinations` target the same `indexName`.

**Required ACL:** `addObject`, `deleteIndex`, `editSettings`

**See also:** [Pre-indexing data transformation](https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/how-to/transform-your-data)


## OpenAPI

````yaml specs/ingestion.yml post /2/tasks/{taskID}/push
openapi: 3.1.0
info:
  title: Ingestion API
  summary: >-
    The Ingestion API lets you connect third-party services and platforms with
    Algolia and schedule tasks to ingest your data
  description: >
    The Ingestion API powers the no-code [data
    connectors](https://dashboard.algolia.com/connectors).


    ## Base URLs


    Base URLs for the Ingestion API:


    - `https://data.us.algolia.com`

    - `https://data.eu.algolia.com`


    Use the URL that matches your [analytics
    region](https://dashboard.algolia.com/account/infrastructure/analytics).


    **All requests must use HTTPS.**


    ## Authentication


    Add these headers to authenticate requests:


    - `x-algolia-application-id`. Your Algolia application ID.

    - `x-algolia-api-key`. An API key with the necessary permissions to make the
    request.
      The required access control list (ACL) to make a request is listed in each endpoint's reference.

    You can find your application ID and API key in the [Algolia
    dashboard](https://dashboard.algolia.com/account/api-keys).


    ## Request format


    Request bodies must be JSON objects.


    ## Response status and errors


    Response bodies are JSON objects.


    Successful responses return `2xx` statuses. Client errors return `4xx`
    statuses. Server errors return `5xx` statuses.

    Error responses have a `message` property with more information.


    ## Version


    The current version of the Ingestion API is version 1, indicated by the
    `/1/` in each endpoint's URL.
  version: 1.0.0
servers:
  - url: https://data.{region}.algolia.com
    variables:
      region:
        description: The region where your Algolia application is hosted.
        enum:
          - eu
          - us
        default: us
security:
  - appId: []
    apiKey: []
tags:
  - name: authentications
    x-displayName: Authentications
    description: >-
      Authentication resources describe how to connect to a source or
      destination.
  - name: destinations
    x-displayName: Destinations
    description: >
      Destinations are Algolia products or features where your data should be
      used, such as a search index or events.

      Algolia destinations require authentication with the `algolia` type.

      You can reference authentications by their ID when creating destinations.
  - name: observability
    x-displayName: Observability
    description: >-
      Check the status and details of your task runs. A run is one instance of a
      configured task.
  - name: sources
    x-displayName: Sources
    description: >
      Sources are third-party platforms or services from where you want to
      ingest your data.

      Sources may require authentication. To interact with such sources, you can
      reference an authentication resource by its ID.
  - name: tasks
    x-displayName: Tasks
    description: >
      Tasks contain information how your data should be read from a source and
      stored in a destination.

      Tasks have _triggers_ which determine when the task should run.
  - name: transformations
    x-displayName: Transformations
    description: >
      Transformations let you transform a record before it gets indexed in
      Algolia.
paths:
  /2/tasks/{taskID}/push:
    post:
      tags:
        - tasks
      summary: Push records by task ID
      description: >
        Pushes records through the pipeline, directly to an index. You can make
        the call synchronous by providing the `watch` parameter, for
        asynchronous calls, you can use the observability endpoints or the
        debugger dashboard to see the status of your task.

        If you want to transform your data before indexing, this is the
        recommended way of ingesting your records.

        This method is similar to `push`, but requires a `taskID` instead of a
        `indexName`, which is useful when many `destinations` target the same
        `indexName`.
      operationId: pushTask
      parameters:
        - $ref: '#/components/parameters/pathTaskID'
        - $ref: '#/components/parameters/watch'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PushTaskPayload'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WatchResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
      externalDocs:
        url: >-
          https://www.algolia.com/doc/guides/sending-and-managing-data/send-and-update-your-data/how-to/transform-your-data
        description: Pre-indexing data transformation.
      x-codeSamples:
        - lang: csharp
          label: C#
          source: |-
            // Initialize the client
            var client = new IngestionClient(
              new IngestionConfig("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY", "ALGOLIA_APPLICATION_REGION")
            );

            // Call the API
            var response = await client.PushTaskAsync(
              "6c02aeb1-775e-418e-870b-1faccd4b2c0f",
              new PushTaskPayload
              {
                Action = Enum.Parse<Action>("AddObject"),
                Records = new List<PushTaskRecords>
                {
                  new PushTaskRecords
                  {
                    ObjectID = "o",
                    AdditionalProperties = new Dictionary<string, object>
                    {
                      { "key", "bar" },
                      { "foo", "1" },
                    },
                  },
                  new PushTaskRecords
                  {
                    ObjectID = "k",
                    AdditionalProperties = new Dictionary<string, object>
                    {
                      { "key", "baz" },
                      { "foo", "2" },
                    },
                  },
                },
              }
            );

            // print the response
            Console.WriteLine(response);
        - lang: dart
          label: Dart
          source: |-
            // Initialize the client
            final client = IngestionClient(
                appId: 'ALGOLIA_APPLICATION_ID',
                apiKey: 'ALGOLIA_API_KEY',
                region: 'ALGOLIA_APPLICATION_REGION');

            // Call the API
            final response = await client.pushTask(
              taskID: "6c02aeb1-775e-418e-870b-1faccd4b2c0f",
              pushTaskPayload: PushTaskPayload(
                action: Action.fromJson("addObject"),
                records: [
                  PushTaskRecords(
                    objectID: "o",
                    additionalProperties: {
                      'key': "bar",
                      'foo': "1",
                    },
                  ),
                  PushTaskRecords(
                    objectID: "k",
                    additionalProperties: {
                      'key': "baz",
                      'foo': "2",
                    },
                  ),
                ],
              ),
            );

            // print the response
            print(response);
        - lang: go
          label: Go
          source: >-
            // Initialize the client with your application region, eg.
            ingestion.ALGOLIA_APPLICATION_REGION

            client, err := ingestion.NewClient("ALGOLIA_APPLICATION_ID",
            "ALGOLIA_API_KEY", ingestion.US)

            if err != nil {
              // The client can fail to initialize if you pass an invalid parameter.
              panic(err)
            }


            // Call the API

            response, err := client.PushTask(client.NewApiPushTaskRequest(
              "6c02aeb1-775e-418e-870b-1faccd4b2c0f",
              ingestion.NewEmptyPushTaskPayload().SetAction(ingestion.Action("addObject")).SetRecords(
                []ingestion.PushTaskRecords{
                  *ingestion.NewEmptyPushTaskRecords().SetAdditionalProperty("key", "bar").SetAdditionalProperty("foo", "1").SetObjectID("o"),
                  *ingestion.NewEmptyPushTaskRecords().SetAdditionalProperty("key", "baz").SetAdditionalProperty("foo", "2").SetObjectID("k"),
                }),
            ))

            if err != nil {
              // handle the eventual error
              panic(err)
            }



            // print the response

            print(response)
        - lang: java
          label: Java
          source: >-
            // Initialize the client

            IngestionClient client = new
            IngestionClient("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY",
            "ALGOLIA_APPLICATION_REGION");


            // Call the API

            WatchResponse response = client.pushTask(
              "6c02aeb1-775e-418e-870b-1faccd4b2c0f",
              new PushTaskPayload()
                .setAction(Action.ADD_OBJECT)
                .setRecords(
                  Arrays.asList(
                    new PushTaskRecords().setAdditionalProperty("key", "bar").setAdditionalProperty("foo", "1").setObjectID("o"),
                    new PushTaskRecords().setAdditionalProperty("key", "baz").setAdditionalProperty("foo", "2").setObjectID("k")
                  )
                )
            );


            // print the response

            System.out.println(response);
        - lang: javascript
          label: JavaScript
          source: >-
            // Initialize the client

            // Replace 'us' with your Algolia Application Region

            const client = algoliasearch('ALGOLIA_APPLICATION_ID',
            'ALGOLIA_API_KEY').initIngestion({ region: 'us' });


            // Call the API

            const response = await client.pushTask({
              taskID: '6c02aeb1-775e-418e-870b-1faccd4b2c0f',
              pushTaskPayload: {
                action: 'addObject',
                records: [
                  { key: 'bar', foo: '1', objectID: 'o' },
                  { key: 'baz', foo: '2', objectID: 'k' },
                ],
              },
            });



            // print the response

            console.log(response);
        - lang: kotlin
          label: Kotlin
          source: |-
            // Initialize the client
            val client =
              IngestionClient(
                appId = "ALGOLIA_APPLICATION_ID",
                apiKey = "ALGOLIA_API_KEY",
                region = "ALGOLIA_APPLICATION_REGION",
              )

            // Call the API
            var response =
              client.pushTask(
                taskID = "6c02aeb1-775e-418e-870b-1faccd4b2c0f",
                pushTaskPayload =
                  PushTaskPayload(
                    action = Action.entries.first { it.value == "addObject" },
                    records =
                      listOf(
                        PushTaskRecords(
                          objectID = "o",
                          additionalProperties =
                            mapOf("key" to JsonPrimitive("bar"), "foo" to JsonPrimitive("1")),
                        ),
                        PushTaskRecords(
                          objectID = "k",
                          additionalProperties =
                            mapOf("key" to JsonPrimitive("baz"), "foo" to JsonPrimitive("2")),
                        ),
                      ),
                  ),
              )


            // print the response
            println(response)
        - lang: php
          label: PHP
          source: >-
            // Initialize the client

            $client = IngestionClient::create('ALGOLIA_APPLICATION_ID',
            'ALGOLIA_API_KEY', 'ALGOLIA_APPLICATION_REGION');


            // Call the API

            $response = $client->pushTask(
                '6c02aeb1-775e-418e-870b-1faccd4b2c0f',
                ['action' => 'addObject',
                    'records' => [
                        ['key' => 'bar',
                            'foo' => '1',
                            'objectID' => 'o',
                        ],

                        ['key' => 'baz',
                            'foo' => '2',
                            'objectID' => 'k',
                        ],
                    ],
                ],
            );



            // print the response

            var_dump($response);
        - lang: python
          label: Python
          source: >-
            # Initialize the client

            # In an asynchronous context, you can use IngestionClient instead,
            which exposes the exact same methods.

            client = IngestionClientSync(
                "ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY", "ALGOLIA_APPLICATION_REGION"
            )


            # Call the API

            response = client.push_task(
                task_id="6c02aeb1-775e-418e-870b-1faccd4b2c0f",
                push_task_payload={
                    "action": "addObject",
                    "records": [
                        {
                            "key": "bar",
                            "foo": "1",
                            "objectID": "o",
                        },
                        {
                            "key": "baz",
                            "foo": "2",
                            "objectID": "k",
                        },
                    ],
                },
            )



            # print the response

            print(response)
        - lang: ruby
          label: Ruby
          source: >-
            # Initialize the client

            client = Algolia::IngestionClient.create("ALGOLIA_APPLICATION_ID",
            "ALGOLIA_API_KEY", "ALGOLIA_APPLICATION_REGION")


            # Call the API

            response = client.push_task(
              "6c02aeb1-775e-418e-870b-1faccd4b2c0f",
              Algolia::Ingestion::PushTaskPayload.new(
                action: "addObject",
                records: [
                  Algolia::Ingestion::PushTaskRecords.new(key: "bar", foo: "1", algolia_object_id: "o"),
                  Algolia::Ingestion::PushTaskRecords.new(key: "baz", foo: "2", algolia_object_id: "k")
                ]
              )
            )



            # print the response

            puts(response)
        - lang: scala
          label: Scala
          source: |-
            // Initialize the client
            val client = IngestionClient(
              appId = "ALGOLIA_APPLICATION_ID",
              apiKey = "ALGOLIA_API_KEY",
              region = "ALGOLIA_APPLICATION_REGION"
            )

            // Call the API
            val response = Await.result(
              client.pushTask(
                taskID = "6c02aeb1-775e-418e-870b-1faccd4b2c0f",
                pushTaskPayload = PushTaskPayload(
                  action = Action.withName("addObject"),
                  records = Seq(
                    PushTaskRecords(
                      objectID = "o",
                      additionalProperties = Some(List(JField("key", JString("bar")), JField("foo", JString("1"))))
                    ),
                    PushTaskRecords(
                      objectID = "k",
                      additionalProperties = Some(List(JField("key", JString("baz")), JField("foo", JString("2"))))
                    )
                  )
                )
              ),
              Duration(100, "sec")
            )

            // print the response
            println(response)
        - lang: swift
          label: Swift
          source: >-
            // Initialize the client

            let client = try IngestionClient(appID: "ALGOLIA_APPLICATION_ID",
            apiKey: "ALGOLIA_API_KEY", region: .us)


            // Call the API

            let response = try await client.pushTask(
                taskID: "6c02aeb1-775e-418e-870b-1faccd4b2c0f",
                pushTaskPayload: PushTaskPayload(
                    action: IngestionAction.addObject,
                    records: [
                        PushTaskRecords(from: [
                            "objectID": AnyCodable("o"),
                            "key": AnyCodable("bar"),
                            "foo": AnyCodable("1"),
                        ]),
                        PushTaskRecords(from: [
                            "objectID": AnyCodable("k"),
                            "key": AnyCodable("baz"),
                            "foo": AnyCodable("2"),
                        ]),
                    ]
                )
            )


            // print the response

            print(response)
        - lang: cURL
          label: curl
          source: |-
            curl --request POST \
              --url 'https://data.us.algolia.com/2/tasks/6c02aeb1-775e-418e-870b-1faccd4b2c0f/push?watch=true' \
              --header 'accept: application/json' \
              --header 'content-type: application/json' \
              --header 'x-algolia-api-key: ALGOLIA_API_KEY' \
              --header 'x-algolia-application-id: ALGOLIA_APPLICATION_ID' \
              --data '
            {
              "action": "addObject",
              "records": [
                {
                  "objectID": "test-record-123"
                }
              ]
            }
            '
components:
  parameters:
    pathTaskID:
      name: taskID
      in: path
      required: true
      description: Unique identifier of a task.
      schema:
        $ref: '#/components/schemas/taskID'
    watch:
      name: watch
      in: query
      description: >-
        When provided, the push operation will be synchronous and the API will
        wait for the ingestion to be finished before responding.
      required: false
      schema:
        type: boolean
  schemas:
    PushTaskPayload:
      title: pushTaskPayload
      type: object
      properties:
        action:
          $ref: '#/components/schemas/action'
        records:
          type: array
          items:
            title: pushTaskRecords
            type: object
            additionalProperties: true
            required:
              - objectID
            properties:
              objectID:
                $ref: '#/components/schemas/objectID'
      required:
        - action
        - records
    WatchResponse:
      type: object
      additionalProperties: false
      properties:
        runID:
          $ref: '#/components/schemas/RunID'
        createdAt:
          $ref: '#/components/schemas/CreatedAt'
        data:
          type: array
          description: >
            This field is always null when used with the Push endpoint.

            When used for a source discover or source validate run, it will
            include the sampled data of the source.
          items:
            type: object
        eventID:
          $ref: '#/components/schemas/EventID'
        events:
          description: >-
            in case of error, observability events will be added to the
            response.
          type: array
          items:
            $ref: '#/components/schemas/Event'
        message:
          description: >-
            a message describing the outcome of the operation that has been ran
            (push, discover or validate) run.
          type: string
      required:
        - runID
    taskID:
      type: string
      description: Universally unique identifier (UUID) of a task.
      example: 6c02aeb1-775e-418e-870b-1faccd4b2c0f
    action:
      type: string
      enum:
        - addObject
        - updateObject
        - partialUpdateObject
        - partialUpdateObjectNoCreate
        - deleteObject
        - delete
        - clear
      description: >
        Which indexing operation to perform:


        - `addObject`: adds records to an index.
           Equivalent to the "Add a new record (with auto-generated object ID)" operation.
        - `updateObject`: adds or replaces records in an index.
           Equivalent to the "Add or replace a record" operation.
        - `partialUpdateObject`: adds or updates attributes within records.
           Equivalent to the "Add or update attributes" operation with the `createIfNoExists` parameter set to true.
           (If a record with the specified `objectID` doesn't exist in the specified index, this action creates adds the record to the index)
        - `partialUpdateObjectNoCreate`: same as `partialUpdateObject`, but with
        `createIfNoExists` set to false.
           (A record isn't added to the index if its `objectID` doesn't exist)
        - `deleteObject`: delete records from an index.
          Equivalent to the "Delete a record" operation.
        - `delete`. Delete an index. Equivalent to the "Delete an index"
        operation.

        - `clear`: delete all records from an index. Equivalent to the "Delete
        all records from an index operation".
    objectID:
      type: string
      description: Unique record identifier.
      example: test-record-123
    RunID:
      type: string
      description: Universally unique identifier (UUID) of a task run.
      example: 6c02aeb1-775e-418e-870b-1faccd4b2c0f
    CreatedAt:
      type: string
      description: Date and time when the resource was created, in RFC 3339 format.
    EventID:
      type: string
      description: Universally unique identifier (UUID) of an event.
      example: 6c02aeb1-775e-418e-870b-1faccd4b2c0f
    Event:
      type: object
      description: An event describe a step of the task execution flow.
      additionalProperties: false
      properties:
        batchSize:
          type: integer
          description: The extracted record batch size.
          example: 10
          minimum: 0
          multipleOf: 1
        eventID:
          $ref: '#/components/schemas/EventID'
        publishedAt:
          $ref: '#/components/schemas/PublishedAt'
        runID:
          $ref: '#/components/schemas/RunID'
        status:
          $ref: '#/components/schemas/EventStatus'
        type:
          $ref: '#/components/schemas/EventType'
        data:
          oneOf:
            - type: object
              additionalProperties: true
            - type: 'null'
      required:
        - eventID
        - runID
        - status
        - type
        - batchSize
        - publishedAt
    ErrorBase:
      description: Error.
      type: object
      x-keep-model: true
      additionalProperties: true
      properties:
        message:
          type: string
          example: Invalid Application-Id or API-Key
    PublishedAt:
      type: string
      description: Date and time when the resource was published, in RFC 3339 format.
    EventStatus:
      oneOf:
        - type: string
          enum:
            - created
            - started
            - retried
            - failed
            - succeeded
            - critical
        - type: 'null'
    EventType:
      type: string
      enum:
        - fetch
        - record
        - log
        - transform
  responses:
    BadRequest:
      description: Bad request or request arguments.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorBase'
  securitySchemes:
    appId:
      type: apiKey
      in: header
      name: x-algolia-application-id
      description: Your Algolia application ID.
    apiKey:
      type: apiKey
      in: header
      name: x-algolia-api-key
      description: >
        Your Algolia API key with the necessary permissions to make the request.

        Permissions are controlled through access control lists (ACL) and access
        restrictions.

        The required ACL to make a request is listed in each endpoint's
        reference.

````