---
title: "Enable cloud link for a mini-app"
method: POST
path: "/v1/cloud/apps/publish"
tags: ["v1", "Cloud Infrastructure"]
---

# Enable cloud link for a mini-app

`POST /v1/cloud/apps/publish`

## Request

- Base URL: `https://memory.papr.ai`
- URL: `https://memory.papr.ai/v1/cloud/apps/publish`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

## Request body

- AppPublishRequest
  - `external_user_id` string, nullable: Parse _User.objectId of the acting user (desktop OAuth). Used for ownership-scoped cloud operations instead of the API key user.
  - `appId` string, required
  - `slug` string, required
  - `visibility` 'private' | 'team' | 'link_read' | 'link_read_write' | 'public_read'
  - `linkPermission` 'read' | 'read_write'
  - `codeAccess` 'off' | 'install': Whether others may install/sync app source into Paprwork.
  - `catalogTitle` string, nullable
  - `catalogDescription` string, nullable
  - `catalogIcon` string, nullable
  - `catalogRequirements` CatalogRequirementEntry[], nullable: API keys the app needs — metadata only (no secret values)
    - `name` string, required
    - `service` string, required
    - `category` string
    - `description` string
    - `required` boolean
    - `credentialScope` 'owner' | 'user': Who provides an API key for a published mini-app.
    - `signupUrl` string, nullable
    - `docsUrl` string, nullable
  - `catalogTags` string[], nullable: Community catalog tags; omit to preserve, [] to clear
  - `catalogPlatform` string[], nullable: Platforms where full functionality is available (macos, windows, linux)
  - `catalogRequiresDesktop` boolean, nullable: True when Paprwork desktop is required for full functionality
  - `catalogAutomation` CatalogAutomationEntry: Denormalized scheduled-job summary for Community catalog cards.
    - `scheduleLabel` string, required
    - `scheduledJobCount` integer, required
    - `hasAgentJob` boolean, nullable
    - `cardLine` string, required
  - `catalogHeadline` string, nullable: Short editorial headline for the Community featured banner; omit to preserve, '' to clear
  - `catalogMedia` CatalogMediaItem[], nullable: Ordered listing media (images / videos). role=cover items drive catalog cards; role=gallery items are for the app details page. Omit to preserve, [] or null to clear.
    - `kind` string, required
    - `url` string, nullable
    - `objectKey` string, nullable
    - `posterObjectKey` string, nullable
    - `role` string
    - `posterUrl` string, nullable
    - `alt` string, nullable
    - `width` integer, nullable
    - `height` integer, nullable
    - `durationMs` integer, nullable
  - `catalogCategory` string, nullable: Broad category (e.g. Sales, Research) for catalog filter pills; omit to preserve, '' to clear
  - `requireSignIn` boolean, nullable: When true with public_read visibility, visitors must sign in with Papr
  - `communityCatalogListed` boolean, nullable: When false, exclude from global Community catalog (specific-people shares)
  - `allowedUserIds` string[], nullable: Share audience people: Parse _User.objectId allowlist
  - `allowedEmails` string[], nullable: Share audience people: signed-in visitors by email
  - `allowedEmailDomains` string[], nullable: Share audience people: signed-in visitors by email domain
  - `intent` 'register' | 'catalog' | 'sharing' | 'scan'
  - `skipPlatformScan` boolean, nullable: When true, trust client catalogPlatform/catalogRequiresDesktop instead of GitHub tarball scan
  - `trackCompletion` boolean, nullable: Opt in to completion tracking: hide a first publish from catalogs until POST /apps/publish/{appId}/complete records the commit that landed.

## Response `200`

Successful Response

- AppPublishResponse
  - `appId` string, required
  - `slug` string, required
  - `visibility` 'private' | 'team' | 'link_read' | 'link_read_write' | 'public_read', required
  - `linkPermission` 'read' | 'read_write', required
  - `codeAccess` 'off' | 'install': Whether others may install/sync app source into Paprwork.
  - `shareUrl` string, required
  - `shareToken` string, nullable: Returned once on publish when visibility uses link tokens
  - `enabled` boolean

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-16** `0e7a5c0d125d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/papr-ai/apis/papr-memory-api/changes/v1/cloud/apps/publish/post.md)

---

[API](https://skmtc.dev/papr-ai/apis/papr-memory-api.md) - [All operations](https://skmtc.dev/papr-ai/apis/papr-memory-api/llms.txt) - [OpenAPI document](https://skmtc.dev/papr-ai/apis/papr-memory-api/revisions/6fc381dc78b3?raw)
