API Reference
Portal
Endpoints for portals, portal display settings, and styling options.
Related In Learn
Portals
Create branded, multi-agent hubs where users can access your agents in one place.
Portal endpoints manage portal containers, portal display settings, and the supported portal styling contract.
Portal creation starts with an empty nav: items: []. Add custom coded pages to portal navigation separately with the Page API.
Endpoints
GET /studio/portal/styling/list
List all portal styling fields supported by the API.
- Full URL:
https://api.pickaxe.co/v1/studio/portal/styling/list
Request Fields
This endpoint does not define request body fields.
Response Includes
style.defaults: Default portal style values.- Enum values for
glassTheme,imageSize, andtextSize. - Numeric ranges for
glassOpacityandroundness. - Boolean styling fields.
- Display fields:
name,image,previewImage,isWhitelabel. - Lockout fields:
lockoutTitle,lockoutMessage,lockoutCTA. - Reserved portal path values.
Examples
curl -X GET https://api.pickaxe.co/v1/studio/portal/styling/list \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN"GET /studio/portal/list
List portals in the current workspace studio.
- Full URL:
https://api.pickaxe.co/v1/studio/portal/list
Request Fields
This endpoint does not define request body fields.
Examples
curl -X GET https://api.pickaxe.co/v1/studio/portal/list \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN"Response Shape
{
"success": true,
"data": [
{
"portalId": "portal-123",
"name": "Landing Portal",
"path": "landing",
"image": "",
"previewImage": "",
"isWhitelabel": false,
"style": {
"glassTheme": "light",
"glassOpacity": 0.1,
"roundness": 24,
"imageSize": "md",
"textSize": "md",
"isShowSidebarImages": true,
"isShowPortalImage": true
},
"items": [],
"createdAt": "2026-04-28T16:20:00.000000",
"updatedAt": "2026-04-28T16:20:00.000000"
}
]
}
POST /studio/portal/create
Create an empty portal.
- Full URL:
https://api.pickaxe.co/v1/studio/portal/create
Request Fields
name(string, required): Portal name.path(string, optional): Portal path.image(string, optional): Portal image URL. Defaults to"".previewImage(string, optional): Portal preview image URL. Defaults to"".isWhitelabel(boolean, optional): White-label portal display flag. Defaults tofalse.style(object, optional): Portal style settings.glassTheme(string, optional): Glass theme. RunGET /studio/portal/styling/listfor supported values.glassOpacity(number, optional): Glass opacity. RunGET /studio/portal/styling/listfor the supported range.roundness(number, optional): Portal roundness. RunGET /studio/portal/styling/listfor the supported range.imageSize(string, optional): Portal image size. RunGET /studio/portal/styling/listfor supported values.textSize(string, optional): Portal text size. RunGET /studio/portal/styling/listfor supported values.isShowSidebarImages(boolean, optional): Whether sidebar item images are visible.isShowPortalImage(boolean, optional): Whether the portal image is visible.
lockoutTitle(string, optional): Title shown when a user lacks access.lockoutMessage(string, optional): Message shown when a user lacks access.lockoutCTA(string, optional): CTA text shown when a user lacks access.portalId(string, optional): Advanced field for explicitly setting the portal ID. If omitted, Pickaxe generates one.
Notes
- Unsupported portal fields are rejected.
- Create rejects an existing
portalIdwith409 portal_id_conflict. - Create rejects an existing path with
409 portal_path_conflict. - Create always starts with
items: []. - This endpoint does not create or link pages. Add pages separately with
POST /studio/page/{pageId}/portal-links.
Examples
curl -X POST https://api.pickaxe.co/v1/studio/portal/create \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"name": "Landing Portal",
"path": "landing",
"image": "",
"previewImage": "",
"isWhitelabel": false,
"style": {
"glassTheme": "light",
"glassOpacity": 0.1,
"roundness": 24,
"imageSize": "md",
"textSize": "md",
"isShowSidebarImages": true,
"isShowPortalImage": true
},
"lockoutTitle": "Access Restricted",
"lockoutMessage": "You do not have access to this portal.",
"lockoutCTA": "Upgrade to continue"
}'Response Shape
{
"success": true,
"data": {
"portalId": "portal-123",
"name": "Landing Portal",
"path": "landing",
"image": "",
"previewImage": "",
"isWhitelabel": false,
"style": {
"glassTheme": "light",
"glassOpacity": 0.1,
"roundness": 24,
"imageSize": "md",
"textSize": "md",
"isShowSidebarImages": true,
"isShowPortalImage": true
},
"items": [],
"createdAt": "2026-04-28T16:20:00.000000",
"updatedAt": "2026-04-28T16:20:00.000000"
}
}
GET /studio/portal/{portalId}
Fetch one portal.
- Full URL:
https://api.pickaxe.co/v1/studio/portal/{portalId}
Request Fields
portalId(string, required): The portal ID in the path.
Examples
curl -X GET https://api.pickaxe.co/v1/studio/portal/portal-123 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN"PATCH /studio/portal/{portalId}
Update portal display, path, lockout copy, or style fields.
- Full URL:
https://api.pickaxe.co/v1/studio/portal/{portalId}
Request Fields
portalId(string, required): The portal ID in the path.name(string, optional): Portal name.path(string, optional): Portal path.image(string, optional): Portal image URL.previewImage(string, optional): Portal preview image URL.isWhitelabel(boolean, optional): White-label portal display flag.style(object, optional): Partial portal style settings. RunGET /studio/portal/styling/listfor supported fields and values.lockoutTitle(string, optional): Lockout title.lockoutMessage(string, optional): Lockout message.lockoutCTA(string, optional): Lockout CTA text.
Notes
- Unsupported portal fields are rejected.
- Update rejects path conflicts with
409 portal_path_conflict. - Nav item and page-link mutation is not performed here. Use the Page API for page-to-portal links.
Examples
curl -X PATCH https://api.pickaxe.co/v1/studio/portal/portal-123 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"name": "Updated Landing Portal",
"style": {
"glassTheme": "light",
"roundness": 24,
"isShowPortalImage": true
}
}'CLI Notes
If you are using the Pickaxe CLI, inspect the supported style contract before creating or updating a portal:
pickaxe portal styling list
pickaxe portal create --name "Landing Portal" --path landing --glass-theme light
pickaxe portal update portal-123 --roundness 24 --show-portal-image true
pickaxe page create --file pages/landing.html --link portal-123
