---
title: "Get push status"
method: GET
path: "/v1/integration/advanced-dsl/projects/{projectId}/push-status"
tags: ["Advanced DSL Project Management"]
---

# Get push status

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

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

Retrieves the current push readiness status for a project without acquiring a lock.

**Features:**
- Non-locking status check
- Revision conflict detection
- Active lock holder information
- Lock expiry countdown

**Use Cases:**
- Fast-fail check before starting expensive conflict detection
- Dashboard status display for project push availability
- CI/CD gate check before automated push

**Scenarios:**
- Pre-flight call immediately before `push-reservation`
- Polling while another user holds the push lock
- Detecting stale local revision before upload begins

**Status values:**
- `ready` — No lock held, revision number matches expectations.
- `push_in_progress` — Another user holds the lock.
- `revision_conflict` — Proposed revision number doesn't match latest + 1.

**Required Permissions:** `replication-pipeline::view`

## Path parameters

- `projectId` string, required

## Query parameters

- `proposedRevisionNumber` integer, required

## Response `200`

Push status retrieved successfully

- PushStatusResponse: Push readiness and concurrency status for a project (informational — no lock acquired)
  - `projectId` string: The project ID (catalog asset ID)
  - `proposedRevisionNumber` integer: The proposed revision number provided by the caller
  - `latestRevisionId` string: Catalog asset ID of the latest DISDSLRevision, or null if none
  - `latestRevisionNumber` integer: The latest revision number on the server
  - `canPush` boolean: Whether the caller can proceed with a push at this moment
  - `reason` 'ready' | 'revision_conflict' | 'push_in_progress': Reason for the readiness state
  - `reservation` ReservationStatus: Snapshot of the in-flight push reservation
    - `reservationId` string: Reservation ID of the in-flight push
    - `state` 'in_progress' | 'completed' | 'failed' | 'expired': State of the reservation
    - `owner` string: Owner of the reservation (request/client identifier)
    - `expiresAt` string, date-time: ISO 8601 timestamp when the reservation (lock) expires
    - `retryAfterSeconds` integer: Suggested seconds to wait before retrying
    - `ownedByRequester` boolean: True when the requesting user's principal matches the lock owner. Clients can use this to show a context-aware message: true → 'You already have a push in progress (possibly from another window or a previous session that did not complete).' false → 'Another user is pushing to this project. Please wait.'

## Other responses

- `401`: Unauthorized — authentication required
- `403`: Forbidden — user lacks 'replication-pipeline::view' permission
- `422`: Unprocessable entity — invalid proposed revision number
- `500`: Internal server error during push status check

---

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