
Get and update an Origin App via the API
Publishers read one app with GET https://api.cursor.com/v1/origin/apps/{appId} and change its settings with PATCH https://api.cursor.com/v1/origin/apps/{appId}. Official reference: Origin API → Get App and Update App.
Origin is in Early Beta and subject to change. Both calls take a Cursor user access token. Get App requires namespace:apps:read. Update App requires app:settings:write. Availability: Early Beta per the API overview.
Get App is the management read for publishers. Get Authenticated App (GET /v1/origin/app with an app JWT) is the app's self-read of the same metadata shape.
Get App
Path parameters
| Param | Required | Meaning |
|---|---|---|
appId |
yes | App identifier prefixed app_ |
curl --request GET \
--url 'https://api.cursor.com/v1/origin/apps/APP_ID' \
--header 'Authorization: Bearer YOUR_USER_ACCESS_TOKEN'
Response fields
| Field | Meaning |
|---|---|
id |
Globally unique app id |
displayName |
Human-facing name |
webhookUrl |
HTTPS webhook URL; empty when the app receives no deliveries |
events |
Webhook event subscriptions |
createdAt / updatedAt |
RFC 3339 timestamps |
installationRedirectUris |
Exact OAuth install callback allowlist |
namespaceSlug |
Owning namespace slug |
description / websiteUrl |
Publisher fields; empty when unset |
defaultScopes |
Default scopes offered at install |
Cost: 1 point.
Update App
Omitted fields stay unchanged. Send at least one settable field. Nested objects that replace a list (events, installationRedirectUris, defaultScopes) are clean replaces: omit the object to leave the list alone; send an empty inner array to clear it.
Clearing webhookUrl with an empty string disables outbound webhook delivery and cancels the app's pending deliveries. Setting a URL again does not resurrect cancelled deliveries.
Path parameters
| Param | Required | Meaning |
|---|---|---|
appId |
yes | App identifier prefixed app_ |
Request body (all optional; at least one required)
| Field | Meaning |
|---|---|
displayName |
New name; must not be empty when provided |
webhookUrl |
Absolute HTTPS URL, or "" to disable delivery |
events.events |
Complete new webhook event set |
description |
New description; "" clears |
websiteUrl |
New publisher site; "" clears |
installationRedirectUris.installationRedirectUris |
Complete new callback allowlist |
defaultScopes.scopes |
Complete new default install scopes |
curl --request PATCH \
--url 'https://api.cursor.com/v1/origin/apps/APP_ID' \
--header 'Authorization: Bearer YOUR_USER_ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"webhookUrl": "https://ci.acme.dev/webhooks/origin-v2",
"events": {
"events": [
"pull_request.created",
"pull_request.merged",
"repository.pushed"
]
}
}'
Response
Same app object shape as Get App, reflecting the updated settings. Cost: 5 points.
After changing the webhook URL, call Ping Webhook (POST /v1/origin/app/webhook/pings with an app JWT) to confirm the receiver answers 2xx.
Base URL: https://api.cursor.com/v1/origin.