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

# Pushing unlabelled semantic versions must be sequential

> Unlabelled integration versions must be published in order via `zapier-platform push`.

*Effective: 2026-02-23*

## What changed

These rules apply to **unlabelled** [semantic versions](/integrations/manage/versions#version-numbering) only (for example `1.2.3`). **[Labelled versions](/integrations/manage/labeled-versions)** (such as `1.2.3-beta` or `0.0.0-my-feature`) are not part of these checks.

When you push a new unlabelled version, the platform validates **two** things in addition to existing format checks.

### 1. You cannot skip a required predecessor

The API must see the right **previous** unlabelled release before it accepts the new one:

* **Patch bump** (`1.2.3`): the exact unlabelled `1.2.2` must already exist.
* **Minor bump** (`1.3.0`): at least one unlabelled `1.2.x` must exist.
* **Major bump** (`2.0.0` when coming from `1.x`): at least one unlabelled `1.x.x` must exist.

`1.0.0` is unchanged: there is no prior semver to require.

If the predecessor is missing, push fails with **403** and guidance like: *Version X requires Y to exist. Push version Y, then try again.*

### 2. You cannot insert an “intermediate” version behind a newer line

You also cannot push a version if a **newer** unlabelled version already exists in the segment that would make yours a backward insert:

* **`1.2.3`**: blocked if any unlabelled **`1.2.4` or higher** on the same `1.2.*` line already exists. Pushing **`1.3.0`** is still allowed when only `1.3.x` or `2.x.x` exists—those are not on the `1.2.*` patch line.
* **`1.3.0`**: blocked if any unlabelled **`1.4.x` or higher** on the same major (`1.*`) already exists. **`2.0.0`** is still allowed when only `2.x.x` exists.
* **`2.0.0`**: blocked if any unlabelled **`3.x.x` or higher** already exists.

If that applies, push fails with **403** and a message that an existing version would make this an intermediate release, which is not allowed.

## What this means for you

* Plan **patch → patch → minor → major** (or the minimal chain your history needs) using **unlabelled** semver when you are ready to record real releases; use **labelled** snapshots while iterating.
* If you are stuck because old versions were removed, you may still use **[deprecation](/integrations/manage/versions#deprecating-versions)** and, when appropriate, **[delete a deprecated version](/integrations/manage/deprecate#deleting-deprecated-versions)** so your remaining unlabelled history matches what you want to push next.
