Installations
The Installations resource lets you register and manage MarkUp SDK installations for a workspace. An installation issues a public key the SDK uses to initialize commenting and, together with your signing key, to exchange customer-signed JWTs for MarkUp tokens.
Create installation
POST /api/v2/installations
curl "https://api.markup.io/api/v2/installations" \
-X POST \
-H "Authorization: Bearer <API-KEY-SECRET>" \
-H "Markup-API-Version: 2023-02-22" \
-H "Content-Type: application/json" \
--data '{
"workspaceId": "baa61938-0d9a-4092-841a-12750690b91c",
"signingKey": "-----BEGIN PUBLIC KEY-----\\nMIIBIjANBgkqhkiG9w0BAQEFA...\\n-----END PUBLIC KEY-----",
"allowedOrigins": [
"https://app.example.com"
],
"url": "https://app.example.com",
"name": "My App"
}'{
"data": {
"id": "cbc795cf-2d20-4c74-9ac2-9e3ba0213199",
"createdAt": "2026-10-23T12:00:10.822Z",
"modifiedAt": "2026-10-23T12:00:10.822Z",
"workspaceId": "fd8b4a7a-808f-45ea-82cb-85c436afdc32",
"publicKey": "some publicKey",
"status": "active",
"allowedOrigins": [
"https://app.example.com"
],
"markupId": null
}
}Response Body - InstallationResponse
Request Body CreateInstallationRequest
| Option | Type | |
|---|---|---|
| workspaceId | string | |
| signingKey | string | The customer's RSA public key (PEM, RS256) used to verify SDK-signed JWTs during token exchange. Only RS256 is supported. |
| allowedOrigins optional | string[] | Origins allowed to use this installation. When omitted, origin validation falls back to the SDK exchange defaults. |
| url optional | string | Optional website URL. When provided, a MarkUp is created for it and attached to this installation. |
| name optional | string | Optional name for the MarkUp created from |
List installations
GET /api/v2/installations
curl "https://api.markup.io/api/v2/installations?workspaceId=21fa1621-6656-4b7f-a022-2ce23ecf512d" \
-X GET \
-H "Authorization: Bearer <API-KEY-SECRET>" \
-H "Markup-API-Version: 2023-02-22" \
-H "Content-Type: application/json" {
"data": {
"data": [
{}
]
}
}Response Body ListInstallationResponse
| Option | Type | |
|---|---|---|
| data | T[] |
Request Query Params WorkspaceIdRequest
| Option | Type | |
|---|---|---|
| workspaceId | string |
Get installation
GET /api/v2/installations/:id
curl "https://api.markup.io/api/v2/installations/783f966b-8ece-4a6c-89cc-af325ab1e4f7" \
-X GET \
-H "Authorization: Bearer <API-KEY-SECRET>" \
-H "Markup-API-Version: 2023-02-22" \
-H "Content-Type: application/json" {
"data": {
"id": "95956886-dc7a-447a-bbee-a722cbffe13f",
"createdAt": "2026-10-23T12:00:10.822Z",
"modifiedAt": "2026-10-23T12:00:10.822Z",
"workspaceId": "282344cc-d0f2-4e35-8481-77d092433f94",
"publicKey": "some publicKey",
"status": "active",
"allowedOrigins": [
"https://app.example.com"
],
"markupId": null
}
}Response Body - InstallationResponse
Request Path Params IdRequestParam
| Option | Type | |
|---|---|---|
| id | string |
Delete installation
DELETE /api/v2/installations/:id
curl "https://api.markup.io/api/v2/installations/cb7d2f8c-e79d-4903-bf48-4f288246ea1f" \
-X DELETE \
-H "Authorization: Bearer <API-KEY-SECRET>" \
-H "Markup-API-Version: 2023-02-22" \
-H "Content-Type: application/json" 204 No ContentRequest Path Params IdRequestParam
| Option | Type | |
|---|---|---|
| id | string |
Related types
InstallationResponse
| Option | Type | |
|---|---|---|
| id | string | |
| createdAt | Iso8601Timestamp | |
| modifiedAt | Iso8601Timestamp | |
| deletedAt | Iso8601Timestamp | |
| workspaceId | string | |
| publicKey | string | Browser-safe public identifier for this installation, used by the SDK to initialize commenting. |
| status | string | |
| allowedOrigins | string[] | null | |
| markupId | string | null | The MarkUp (project) id this installation is attached to, if any. |