Remotehost Docs

Remove an installed add-on

DELETE
/orgs/{orgId}/addons/{listingId}/installs/{installId}

Removes one install of the listing, or releases a resource's allocation (installId is its id). Needs the same permission as installing it; removing is allowed whatever the listing's state, the org's policy or holding. A caller who cannot read the kind on the install's project gets the same 404 whether or not it exists. Audited.

Authorization

bearerAuth
AuthorizationBearer <token>

A RemoteHost API key (rh_sk_...) or a user session token.

In: header

Path Parameters

orgId*string
listingId*string
installId*string

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://example.com/orgs/string/addons/string/installs/string"
Empty

Install an add-on POST

Installs a catalog add-on at a scope: `org`, `project`, `sandbox` or `atlas_workspace`. Every install passes the same checks, in this order, each refusal with its code. The listing exists and the caller can see it in the org's catalog (`addon_not_found` otherwise), and the caller holds the kind's `.manage` at the scope (`skills.manage`, `mcp.manage`: at the org, on the project, or on the sandbox's project). Only then: the listing is not `blocked` or `retired`; the scope is one of its `attachLevels`; the org's policy allows it (community add-ons need the org's opt-in or an explicit allow); the org holds it (free, included in its plan, or bought: installing never buys); and nothing above the scope has switched it off. Today skills and MCP servers install on a project, one install of a listing per project. A resource is allocated, on a project (the default for its sandboxes) or one sandbox, by `config.quantity`, under `resources.manage` on the project (a sandbox's own project); posting again for the same scope changes its quantity. After the checks above, an allocation also needs, in this order: a quantity; a sandbox no more than its project's default (`resource_exceeds_project`); the org's allocations of the resource within what it bought (`resource_quantity_exceeded`); the plan's cap for it, and a plan with none refuses (`resource_quota_not_set`, `resource_quota_exceeded`); for a resource billed on use, the org's own cap (`resource_org_cap_not_set`, `resource_org_cap_exceeded`); and room on a host (`addon_capacity_unavailable`, 503). Plugins are not installable yet (501), every install and allocation is audited, and apps are added to an Atlas workspace from Atlas.

Buy an add-on POST

Adds the add-on to the org's subscription, charged now for the rest of the period. The purchase is `pending` until Stripe has the payment; when the payment needs confirming, `confirmationUrl` is the invoice's page, and an unpaid purchase expires after 24 hours. Asking again for a pending purchase Stripe never received sends it again, with no second charge. Buying a cancelled add-on again before its `endsAt` keeps it with no second charge, at the quantity held, while the billing period is unchanged. Needs `billing.manage`, a live plan that is not trialing and has no scheduled change, and an org that is billed. Free and included add-ons are not sold. One add-on change per org at a time. Audited.