---
title: "Create push reservation"
method: POST
path: "/v1/integration/advanced-dsl/projects/{projectId}/push-reservation"
tags: ["Advanced DSL Project Management"]
---

# Create push reservation

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

## 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-reservation`
- Auth: HTTP bearer

Atomically checks push readiness and acquires a distributed lock for the project.

**Features:**
- Atomic revision conflict detection and lock acquisition
- Distributed Redis-based locking with configurable TTL
- Heartbeat-based lock extension per batch
- Automatic lock release on success or failure

**Use Cases:**
- VS Code extension initiating a DSL project push
- CLI tooling pushing project changes to Suite

**Process:**
1. Validates the base revision number against the server's latest revision.
2. Attempts to acquire a Redis-based distributed lock (TTL: 300s).
3. Returns the proposed revision number (latest + 1) and reservation expiry.

**Conflict scenarios:**
- `REVISION_CONFLICT` (409): The client's base revision is stale — a newer revision exists.
- `PUSH_IN_PROGRESS` (409): Another user currently holds the push lock.

**Lock behavior:**
- Lock TTL: 300 seconds (extended via heartbeat per batch).
- Auto-released on push success or failure.
- Only one concurrent push per project.

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

## Path parameters

- `projectId` string, required

## Request body

- PushReservationRequest: Request payload for acquiring a push reservation (lock) on a DSL project
  - `baseRevisionNumber` integer, required: The base revision number that the client last synced from. The server uses this to detect revision conflicts (stale base). Must match the latest server revision for the reservation to succeed.

## Response `201`

Push reservation acquired successfully

- PushReservationResponse: Response containing push reservation details after successful lock acquisition
  - `reservationId` string: Unique identifier of the reservation (used as correlation ID for subsequent push requests)
  - `projectId` string: The project ID for which the reservation was acquired
  - `proposedRevisionNumber` integer: The proposed revision number assigned by the server (latest + 1)
  - `expiresAt` string, date-time: Timestamp when the reservation expires (300s TTL from acquisition)

## Other responses

- `400`: Invalid request — missing or invalid baseRevisionNumber
- `401`: Unauthorized — authentication required
- `403`: Forbidden — user lacks the required 'replication-pipeline::create' or legacy 'replication-pipeline::manage' permission
- `409`: Conflict — revision conflict or push already in progress
- `500`: Internal server error during push reservation

---

[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)
