Update the configuration of an existing publication. All updatable fields from the POST – Create a Published Application endpoint are supported here, including security mode, build filter, access control, visibility, branding overrides, and legal terms.
This is a full replacement (PUT), not a partial update (PATCH). Any field not included in the request body will be reset to its default value. Always retrieve the current publication state first and include all fields you want to preserve.
Applivery provides two separate APIs for updating publications, each requiring a different authentication credential.
Choosing the right API
Integrations API | Workspace API | |
|---|---|---|
Designed for | Per-app CI/CD pipelines | Workspace-level automation across multiple apps |
Authentication | App API Token (per-app) | Service Account token (workspace-level) |
App context | Implicit — token is already scoped to an app | Explicit — |
Typical users | Scripts that update a publication's build filter after a new upload | Platform engineers managing publications across multiple apps |
Access to the different APIs might not be available in your current plan. Please check availability on our pricing page.
Integrations API
Use this endpoint when updating publications within the scope of a single app. Authentication uses an App API Token, scoped to the specific app.
To create an App API Token, see Apps API Authentication.
Endpoint
PUT https://api.applivery.io/v1/integrations/distributions/{publishedApplicationId}
Authentication
Authorization: Bearer <your_app_token>
Request format
application/json
Path parameters
Parameter | Type | Required | Description |
|---|---|---|---|
| String | Yes | The unique identifier of the publication to update. E.g. |
Parameters
Identity and Visibility
Parameter | Type | Description |
|---|---|---|
| String | The URL-friendly identifier for this publication. Must be unique within the workspace. Changing the slug changes the publication URL — existing links will break. |
| String | Publication visibility. Allowed values: |
Security and Access Control
Parameter | Type | Description |
|---|---|---|
| String | Authentication mode. Allowed values: |
| String | Required when |
| Array | Restricts access to specific user groups. Supports AND/OR logic. Each inner array is an AND clause; each outer element is an OR clause. E.g. |
| Boolean | Whether to enable audience-based access for this publication. |
| Array | Array of audience assignments for this publication. |
| String | ID of the audience to assign. |
| Boolean | Whether users in this audience should be notified when a new build is processed. |
| Array | ISO 3166-1 alpha-2 country codes to allow access from. Cannot be combined with |
| Array | ISO 3166-1 alpha-2 country codes to block access from. Cannot be combined with |
Build Selection Filter
Parameter | Type | Description |
|---|---|---|
| String | Build selection strategy. Allowed values: |
| String | Required for |
| String | Build ID for the iOS build. Used when |
| String | Build ID for the Android build. Used when |
| String | Build ID for the macOS build. Used when |
| String | Build ID for the Windows build. Used when |
| Array | Array of |
Build Display options
| Parameter | Type | Description |
|---|---|---|
tags |
Array | Tags to categorize this publication. |
showHistory |
Boolean | Whether users can browse and install previous builds. |
showDevInfo |
Boolean | Whether to display technical build information (git metadata, certificate details, tags) to users. |
expirationDate |
String | ISO 8601 timestamp after which the publication becomes unavailable for download. Use to create time-limited distributions, beta programs, or promotional campaigns. E.g. "2025-12-31T23:59:59Z". Set to null to remove an existing expiration date. |
Legal Terms
Parameter | Type | Description |
|---|---|---|
| Boolean | Whether users must accept legal terms before accessing the publication. |
| String | The legal terms text to display. Required when |
Branding and App configuration overrides
Parameter | Type | Description |
|---|---|---|
| String | Overrides the app name displayed in the publication. |
| String | Overrides the app description displayed in the publication. |
| String | Overrides the store logo for this publication. |
| String | Overrides the primary branding color (hex format). E.g. |
| String | Overrides the button color (hex format). |
Example Request
Update a publication to point to a specific git branch and restrict access to logged-in users in a specific group:
curl 'https://api.applivery.io/v1/integrations/distributions/552ae3cfcb5abfc58d733b81' \
-X PUT \
-H 'Authorization: Bearer YOUR_APP_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"slug": "my-app-staging",
"security": "logged",
"visibility": "active",
"filter": {
"type": "gitBranch",
"value": "develop"
},
"groups": [["qa-team"]],
"showHistory": true,
"showDevInfo": true
}'
Responses
{
"status": true,
"data": {
"id": "string",
"updatedAt": "string",
"createdAt": "string",
"application": "string",
"applicationInfo": {
"id": "string",
"slug": "string",
"name": "string",
"picture": "string"
},
"slug": "string",
"filter": {
"type": "last",
"value": "string",
"ios": "string",
"android": "string",
"windows": "string",
"macos": "string",
"builds": [
{
"buildPlatform": "string",
"id": "string"
}
]
},
"security": "public",
"tags": ["string"],
"groups": [["string"]],
"visibility": "active",
"showHistory": true,
"showDevInfo": true,
"distributionUrl": "string",
"terms": {
"active": true,
"text": "string"
}
}
}
Slug already in use.
{
"status": false,
"error": {
"code": 5024,
"message": "Slug already used"
}
}
{
"status": false,
"error": {
"code": 4002,
"message": "No auth token"
}
}
{
"status": false,
"error": {
"code": 3001,
"message": "Entity not found"
}
}
Workspace API
Use this endpoint when updating publications at the workspace level using a single credential across multiple apps.
Authentication uses a Service Account token. To create a Service Account, see Service Accounts.
Endpoint
PUT https://api.applivery.io/v1/organizations/{organizationId}/stores/{storeId}/pubApps/{publishedApplicationId}
Path parameters
Parameter | Type | Required | Description |
|---|---|---|---|
| String | Yes | The unique identifier of your Applivery organization. |
| String | Yes | The unique identifier of the store (app project). |
| String | Yes | The unique identifier of the publication to update. |
Authentication
Authorization: Bearer <your_service_account_token>
Example Request
curl 'https://api.applivery.io/v1/organizations/ORG_ID/stores/STORE_ID/pubApps/PUB_APP_ID' \
-X PUT \
-H 'Authorization: Bearer YOUR_SERVICE_ACCOUNT_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"slug": "my-app-release",
"security": "public",
"visibility": "active",
"filter": {
"type": "last"
}
}'
The request body parameters and response schema are identical to the Integrations API.
Managing OTP Access users
OTP (One-Time Password) access is a Publication-level security option that allows you to share builds securely with external users — freelancers, QA studios, contractors — without requiring them to have an Applivery account or go through your SSO. This is particularly useful for organizations with strict SSO-only policies that need to share builds externally without relaxing their global authentication settings.
OTP access is configured per Publication and does not affect any other Publication or the global App Store authentication settings.
OTP configuration can only be applied in edit mode — it must be set up after the publication has already been created. Enable it by setting security to "private" and enabling OTP in the dashboard, or by using the API endpoint described below to add users to the allowlist.
OTP users are scoped to the specific Publication they accessed. They cannot browse or access other Publications in the App Store.
How it works
Admin side:
Create or update a publication with OTP access enabled (
security: "private"+ OTP allowlist configured).Add the email addresses of authorized external users to the OTP allowlist, and configure each user's lifecycle and single-use settings.
User side:
The user visits the Publication URL and enters their email address.
If their email is on the allowlist, they receive a time-limited OTP via email (valid for 5–10 minutes).
They enter the code to verify their identity and gain access to download the app.
If single-use is enabled, their email is automatically removed from the allowlist after the first successful download.
Adding OTP Users via API
OTP users are managed separately from the publication configuration itself, via a dedicated endpoint. This endpoint is called after creating or updating a publication to add users to its OTP allowlist.
Endpoint
POST https://api.applivery.io/v1/organizations/{organizationSlug}/stores/{storeId}/otp-users
Authentication
Authorization: Bearer <your_service_account_token>
Path parameters
Parameter | Type | Required | Description |
|---|---|---|---|
| String | Yes | The URL-friendly slug of your Applivery organization (not the numeric ID). |
| String | Yes | The unique identifier of the store the publication belongs to. |
Body parameters
Parameter | Type | Required | Description |
|---|---|---|---|
| String | Yes | The email address of the external user to add to the OTP allowlist. |
| Boolean | No | Whether the user should be automatically removed after 30 days. Default: |
| Boolean | No | Whether the user's access should be invalidated after the first successful download. Once downloaded, the email is removed from the allowlist and the user must be re-added to regain access. Default: |
Example Request
curl 'https://api.applivery.io/v1/organizations/my-org-slug/stores/STORE_ID/otp-users' \
-X POST \
-H 'Authorization: Bearer YOUR_SERVICE_ACCOUNT_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"email": "[email protected]",
"temporal": true,
"singleUse": false
}'
Responses
{
"status": true,
"data": {
"id": "string",
"email": "[email protected]",
"temporal": true,
"singleUse": false,
"createdAt": "string"
}
}
Email already exists in the OTP allowlist for this store.
Invalid or missing Service Account token.
Organization slug or store ID not found.
OTP configuration options reference
Option | Description |
|---|---|
Allowlist | The list of email addresses authorized to request an OTP for this publication. |
User lifecycle |
|
Single-use access |
|
OTP expiry | OTPs are time-bound and single-use — valid for 5–10 minutes and cannot be reused even within the validity window. |
New build notifications | When a new build is published, OTP users on the allowlist can receive a notification email with a fresh OTP, allowing them to download without requesting access again manually. |
When to use OTP Access
Scenario | Recommended approach |
|---|---|
Share a build with an external freelancer for a one-time review | OTP + |
Share a beta with an external QA studio for a limited test period | OTP + Expiring Publication |
Distribute to a list of external testers without permanent accounts | OTP + |
Long-term external collaborators needing ongoing access | Private Publication + Audience-based access instead of OTP |
For maximum control over time-limited external access, combine OTP with an Expiring Publication. This ensures access is both identity-verified (via OTP allowlist) and time-bounded (via Publication expiry) — with no manual cleanup needed once the deadline passes.