MetorialDocs

Portal

Use Portals to create custom branded MCP server marketplaces for your organization.

The Portal object

portal.json
{
  "object": "portal",
  "id": "example_id",
  "status": "active",
  "name": "example_name",
  "slug": "example_slug",
  "description": "example_description",
  "allow_consumer_skill_authoring": false,
  "allow_consumer_skill_publishing": false,
  "skill_configuration": {
    "object": "portal.skill_configuration",
    "id": "example_id",
    "is_default": false,
    "allow_scripts": false,
    "allowed_file_extensions": [
      "example_allowed_file_extensions"
    ],
    "allow_non_standard_directories": false
  },
  "auth": {
    "object": "portal.auth",
    "session_expiry_time_in_seconds": 0,
    "allowed_redirect_url_filters": [
      {},
      {}
    ]
  },
  "urls": [
    {
      "type": "default"
    },
    {
      "type": "default"
    }
  ],
  "magic_mcp_url": "example_magic_mcp_url",
  "created_at": "2026-10-17T09:50:02.683Z",
  "updated_at": "2026-10-17T09:50:02.683Z"
}
object"portal"required
idstringrequired
status"active" | "archived" | "deleted"required
namestringrequired
slugstringrequired
descriptionstringrequirednullable
allow_consumer_skill_authoringbooleanrequired
allow_consumer_skill_publishingbooleanrequired
magic_mcp_urlstringrequired
created_atdaterequired
updated_atdaterequired

Endpoints

List portals

GET/portals

Returns a paginated list of portals.

Query parameters

searchstringoptional

Search by name or description

Example request

curl -X GET "https://api.metorial.com/portals" \
  -H "Authorization: Bearer metorial_sk_io2h4..."

Get portal

GET/portals/:portal_id

Retrieves details for a specific portal.

Path parameters

portal_idstringrequired

The unique identifier for the portal

Example request

curl -X GET "https://api.metorial.com/portals/por_Rm4Mnheq2bfEPhBhP7SY" \
  -H "Authorization: Bearer metorial_sk_io2h4..."

Create portal

POST/portals

Creates a new portal for the instance.

Request body

namestringrequired
descriptionstringoptional
session_expiry_time_in_secondsnumberoptional
allow_consumer_skill_authoringbooleanoptional
allow_consumer_skill_publishingbooleanoptional

Example request

curl -X POST "https://api.metorial.com/portals" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer metorial_sk_io2h4..." \
  -d '{
  "name": "example_name",
  "description": "example_description",
  "allowed_redirect_url_filters": [
    {},
    {}
  ],
  "session_expiry_time_in_seconds": 0,
  "allow_consumer_skill_authoring": false,
  "allow_consumer_skill_publishing": false
}'

Update portal

PATCH/portals/:portal_id

Updates an existing portal for the instance.

Path parameters

portal_idstringrequired

The unique identifier for the portal

Request body

namestringoptional
descriptionstringoptional
session_expiry_time_in_secondsnumberoptional
allow_consumer_skill_authoringbooleanoptional
allow_consumer_skill_publishingbooleanoptional

Example request

curl -X PATCH "https://api.metorial.com/portals/por_Rm4Mnheq2bfEPhBhP7SY" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer metorial_sk_io2h4..." \
  -d '{
  "name": "example_name",
  "description": "example_description",
  "allowed_redirect_url_filters": [
    {},
    {}
  ],
  "session_expiry_time_in_seconds": 0,
  "allow_consumer_skill_authoring": false,
  "allow_consumer_skill_publishing": false,
  "skill_configuration": {
    "allow_scripts": false,
    "allowed_file_extensions": [
      "example_allowed_file_extensions"
    ],
    "allow_non_standard_directories": false
  }
}'

Delete portal

DELETE/portals/:portal_id

Archives a portal.

Path parameters

portal_idstringrequired

The unique identifier for the portal

Example request

curl -X DELETE "https://api.metorial.com/portals/por_Rm4Mnheq2bfEPhBhP7SY" \
  -H "Authorization: Bearer metorial_sk_io2h4..."