Stop sharing a web app
October 12, 2026
Table of contents
Stop sharing a web app published with POST /assets/assetId/share. Its public link stops working, and shareUrl in GET /assets becomes null. The app itself stays in the Library. Publish it again at any time.
https://api.useapi.net/v1/muse/assets/
assetId/share
assetIdis the URL-encodedassetIdof a web app, an asset oftypeweb.
Request Headers
Authorization: Bearer {API token}
API tokenis required, see Setup useapi.net for details.
Responses
-
{ "assetId": "user:12345-email:6578616d706c6540676d61696c2e636f6d-web:space~hello-demo", "shareUrl": null } -
400 Bad Request — the path value is not a Muse
assetId, or the asset is not a web app.{ "error": "Only web apps (assets of type web) can be shared", "code": 400 } -
Invalid API token.
{ "error": "useapi.net ⁝ Unauthorized", "code": 401 } -
403 Forbidden — the
assetIdwas issued to a different API token.{ "error": "This asset id does not belong to this API token", "code": 403 } -
404 Not Found — the web app is not there or is not shared, or the account that holds it is not added.
{ "error": "Asset not found, or not shared", "code": 404 } -
502 Bad Gateway — Muse did not stop sharing. Retry shortly.
{ "error": "Muse did not stop sharing (HTTP 500: …), please retry", "code": 502 } -
503 Service Unavailable — Muse could not be reached. Retry shortly.
{ "error": "Could not connect to the Muse workspace of account [email protected] (…), please retry shortly", "code": 503 } -
504 Gateway Timeout — Muse did not answer in time. Check
shareUrlin GET /assets?type=web, then retry.{ "error": "Muse did not answer (…): check shareUrl in GET /assets?type=web, then retry", "code": 504 } -
596 Account Error
The account needs your attention, and it is paused until you add it again. You receive an email when this happens. There are two causes.
Meta asks for a security check on the account. Sign in once at muse.ai in a browser, complete the check, then add the account again with POST /accounts using the same email and password. The API keeps using its session, so no new sign-in is needed.
{ "error": "Account [email protected]: Meta asks for a security check on account [email protected] (\"This account must complete a security checkpoint on the web\"). Sign in once at https://muse.ai in a browser, complete the check, then add the account again with POST /accounts", "code": 596 }Or Muse refused to sign the account in again when its session needed renewing, most often because the password was changed. Add the account again with the current password.
{ "error": "Account [email protected]: Muse refused to sign in account [email protected] (…). Update its password with POST /accounts, or sign in at https://muse.ai to clear the block, then re-add it", "code": 596 }
Model
{ // TypeScript, all fields are optional
assetId: string
shareUrl: string | null // the public link, null after stopping sharing
error?: string // errors only
code?: number // errors only
}
Examples
-
ASSETID="user:12345-email:6578616d706c6540676d61696c2e636f6d-web:space~hello-demo" curl -X DELETE -H "Authorization: Bearer …" \ "https://api.useapi.net/v1/muse/assets/$(python3 -c "import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1],safe=''))" "$ASSETID")/share" -
const token = "API token"; const assetId = "assetId of a web app from GET /assets?type=web"; const apiUrl = `https://api.useapi.net/v1/muse/assets/${encodeURIComponent(assetId)}/share`; const response = await fetch(apiUrl, { method: "DELETE", headers: { "Authorization": `Bearer ${token}`, }, }); console.log("response", response.status, await response.json()); -
import requests from urllib.parse import quote token = "API token" assetId = "assetId of a web app from GET /assets?type=web" apiUrl = "https://api.useapi.net/v1/muse/assets/" + quote(assetId, safe="") + "/share" headers = { "Authorization" : f"Bearer {token}" } response = requests.delete(apiUrl, headers=headers) print(response, response.json())