---
title: "Push files (batch upload)"
method: POST
path: "/v1/integration/advanced-dsl/projects/{projectId}/push"
tags: ["Advanced DSL Project Management"]
---

# Push files (batch upload)

`POST /v1/integration/advanced-dsl/projects/{projectId}/push`

## Request

- Base URL: `https://integration-adapter.connect.cloud.precisely.com`
- URL: `https://integration-adapter.connect.cloud.precisely.com/v1/integration/advanced-dsl/projects/{projectId}/push`
- Auth: HTTP bearer

Uploads a batch of DSL project files as part of a push operation.

**Features:**
- Multi-file batch upload (up to 499 per batch)
- Automatic content hashing (SHA-256)
- Best-effort compensation on failure
- Lock heartbeat extension per batch
- Relationship creation for final batch

**Use Cases:**
- Large project push split into multiple batches
- Single-batch push for small projects
- Resumable uploads via batching strategy

**Request model:**
- Reservation controls are provided via headers:
        `X-Reservation-Id`, `X-Proposed-Revision-Number`
- Batch controls and metadata are provided as multipart form fields:
        `isFinal`, `description`, `unchangedFileIds`, `transitionDraftAssetIds`, `fileMetadata`
- Changed files are uploaded through the multipart `files` part

**Batch constraints:**
- Maximum 499 assets per batch
- Maximum 24 MB total payload per batch
- Batches are submitted sequentially under one reservation
- `fileMetadata` is sent as a multipart form field in the request body
  (JSON map of `flattenedPath -> {version,mimeType,encoding}`) for uploaded files only
- `unchangedFileIds` and `transitionDraftAssetIds` are accepted only when `isFinal=true`

**Final batch behavior:**
- Set `isFinal=true` on the last batch
- Triggers revision asset creation (DISDSLRevision)
- Creates Defines (ReplicationProject → DISDSLRevision) relationship
- Creates Includes (DISDSLRevision → DISDSLFile) relationships for all files
- Heartbeat extends lock TTL per batch

**Required Permissions:** `replication-pipeline::create` when permission harmonization is enabled; otherwise, `replication-pipeline::manage`.

## Path parameters

- `projectId` string, required

## Query parameters

- `isFinal` boolean
- `description` string
- `unchangedFileIds` string[]
- `transitionDraftAssetIds` string[]
- `fileMetadata` string

## Headers

- `X-Reservation-Id` string, required
- `X-Proposed-Revision-Number` integer, required

## Response `200`

Final batch processed — push completed successfully

- PushSuccessResponse: Response containing the outcome of a successful DSL project push
  - `status` 'success' | 'partial' | 'failed': Status of the push operation
  - `revisionId` string: Unique identifier of the created revision
  - `revisionNumber` integer: The revision number assigned to this push
  - `filesPersistedCount` integer: Total number of files persisted in this revision
  - `fileResults` FileOperationResult[]: Per-file operation results
    - `flattenedPath` string: The flattened path of the file
    - `catalogAssetId` string: The catalog asset ID assigned to this file
    - `action` 'created' | 'draft_version_created' | 'draft_version_updated' | 'draft_to_approved': The action performed on the file
    - `phase` 'draft' | 'approved' | 'pending_deletion': The lifecycle phase of the file
    - `version` integer: The version number of the file asset
    - `catalogLink` string: Direct link to the asset in the Data Catalog UI
  - `retentionEvictions` RetentionEviction[]: Revisions evicted due to retention policy
    - `evictedRevisionId` string: The ID of the evicted revision
    - `evictedRevisionNumber` integer: The revision number of the evicted revision
    - `filesPhysicallyDeleted` integer: Number of file assets physically deleted
    - `filesRelationshipDeleted` integer: Number of relationship links removed
  - `warnings` string[]: Non-fatal warnings produced during the push
  - `timestamp` string, date-time: Server timestamp when the push was finalized

## Other responses

- `202`: Intermediate batch accepted — continue with next batch
- `400`: Invalid batch — exceeds size/count limits or uses final-only inputs on non-final batch
- `401`: Unauthorized — authentication required
- `403`: Forbidden — user lacks the required 'replication-pipeline::create' or legacy 'replication-pipeline::manage' permission
- `422`: Unprocessable entity — constraint validation failed
- `500`: Internal error — push orchestration failed

---

[API](https://skmtc.dev/precisely/apis/precisely-integration-adapter-service.md) · [All operations](https://skmtc.dev/precisely/apis/precisely-integration-adapter-service/llms.txt) · [OpenAPI document](https://skmtc.dev/precisely/apis/precisely-integration-adapter-service/revisions/2d2629f4987d?raw)
