Skip to content

Requesting Feature Access

This guide explains how to request access to a platform feature your project does not yet have, how that request is reviewed and approved, and how to track it through to Available.

See Permissions Glossary for the canonical definitions of Limit, Grant, Available, and Request.


How access works

Every platform feature — managed apps, DNS, object storage, Kubernetes, compute — starts as not Available to a project until your organization's settings are configured and, in most cases, an org admin has approved it.

The chain:

  1. b'nerd sets a Limit for your organization — the maximum set of features it may use. If no Limit is set, your organization is unbounded and may use any feature the platform supports.
  2. An org admin creates a Grant that distributes specific features to individual projects, within the Limit.
  3. The result — Grant ∩ Limit — is what is Available to the project at runtime.

A Request is how you ask your org admin (or b'nerd, for provisioned features) to extend what is Available to your project.


Who can request

Any organization member can submit a feature request for a project. Whether it is approved automatically or requires an org admin's action depends on two things:

  • Whether you hold the features:request permission for your organization (org admins always hold it; other members can be delegated it — see Delegating request authority below).
  • Whether the feature is self-service or provisioned-tier.

Provisioning tiers

Tier Features What happens on approval
Self-service apps (all kinds), dns, object_storage No b'nerd wiring needed. Approved by org admin (or auto-approved if enabled) → Available immediately.
Provisioned kubernetes, openstack Requires b'nerd to wire per-project infrastructure (OpenStack credentials, Gardener project). Request goes to b'nerd's provisioning queue → b'nerd provisions → Available.

The request lifecycle

Member submits request (POST /projects/{id}/feature_requests)
  ├─ Self-service feature (apps / dns / object_storage)
  │     ├─ Auto-approve enabled (per-feature opt-in by org admin)
  │     │     └─ Approved immediately → AVAILABLE
  │     │
  │     └─ Auto-approve OFF (default — fail-closed)
  │           ├─ You hold features:request
  │           │     └─ Self-authorized → AVAILABLE
  │           └─ You do not hold features:request
  │                 └─ PENDING APPROVAL → Org admin approves or denies
  │                       ├─ Approve → AVAILABLE
  │                       └─ Deny   → DENIED
  └─ Provisioned-tier feature (kubernetes / openstack)
        ├─ You hold features:request
        │     └─ WITH B'NERD → b'nerd provisions → AVAILABLE
        └─ You do not hold features:request
              └─ PENDING APPROVAL → Org admin reviews → forwards to b'nerd
                    ├─ Forward → WITH B'NERD → b'nerd provisions → AVAILABLE
                    └─ Deny   → DENIED

States you will see in the dashboard:

State Meaning
requested Your request was submitted and is pending action.
pending approval Awaiting your org admin's review. For self-service features this means the org admin will approve or deny. For provisioned features (Kubernetes, compute) the org admin will review and forward to b'nerd or deny.
with b'nerd b'nerd is setting up the per-project infrastructure (provisioned tier only).
available Access is live. You can use the feature.
denied The request was denied. Contact your org admin for details.

Every row in the Capabilities view shows the live state of your requests so you always know where your request stands.


Submitting a request

Dashboard

Open your project, go to Capabilities, find the feature you want, and click Request access. The form lets you describe what you need; for provisioned features (Kubernetes, compute), a brief description of your intended use helps b'nerd provision the right configuration.

API

POST /projects/{project_id}/feature_requests
Authorization: Bearer <token>
Content-Type: application/json

{
  "feature_key": "kubernetes",
  "configuration": {
    "allowed_kinds": ["Managed::Kubernetes::V1"]
  },
  "request_notes": "Production cluster for the payments service"
}

Response — 201 Created

{
  "metadata": {},
  "data": {
    "id": "pfr_abc123",
    "feature_key": "kubernetes",
    "status": "pending",
    "provisioning_tier": "provisioned"
  }
}

Response fields

Field Type Description
id string Request ID — use to poll status.
feature_key string The feature you requested.
status string Raw backend status: pending (self-service or non-holder infrastructure request awaiting review), pending_endorsement (non-holder infrastructure request awaiting org admin), provisioning (holder infrastructure request forwarded to b'nerd), approved, or denied. The dashboard maps these to the customer-facing labels in the states table above.
provisioning_tier string self_service or provisioned.

Polling for status

GET /projects/{project_id}/feature_requests/{id}
Authorization: Bearer <token>

Returns the current request with its status. You can also list all requests for a project:

GET /projects/{project_id}/feature_requests
Authorization: Bearer <token>

Auto-approve: zero-click self-service

For self-service features, an org admin can enable auto-approve for a specific feature key. When auto-approve is on, any member's request for that feature within the organization's Limit is approved immediately — no org admin action needed.

Auto-approve is OFF by default (fail-closed). An org admin must explicitly enable it per feature via Organization → Features → [feature] → Auto-approve.

Auto-approve applies only to self-service features (apps, dns, object_storage). Provisioned-tier features (kubernetes, openstack) always require org admin review and then b'nerd provisioning — there is no auto-approve path for them.

Apps selected during onboarding are available immediately

Managed apps you choose when setting up your organization are available from the start — no request needed, regardless of the auto-approve setting.


Delegating request authority

The features:request permission determines whether a member can authorize their own requests (for self-service) or forward a request directly to b'nerd's provisioning queue (for provisioned features) without waiting for an org admin.

  • Org admins always hold this permission.
  • Other members do not hold it by default.
  • An org admin can delegate it to a trusted member via Organization → Members & Roles → [member] → Feature Requests.

When a member who holds features:request submits a request:

  • Self-service feature → self-authorized, approved immediately (regardless of auto-approve setting).
  • Provisioned feature → forwarded directly to b'nerd's provisioning queue, skipping the Requests inbox.

When a member who does not hold features:request submits a request, it goes to the org admin's Requests inbox for review first.

The gate is a permission, not a role

features:request is a per-permission grant, not tied to any built-in preset. Delegation is intentional and audited. Only org admins can grant it.


For org admins: reviewing requests

When a member submits a request and auto-approve is OFF, it appears in Organization → Requests.

Self-service requests

Action What it does
Approve Grants the feature to the project within the Limit. Available immediately.
Deny Declines the request. You can include a reason. The member is notified.

Approval cannot exceed the org's Limit — the platform enforces this unconditionally. Bulk approve is available for clearing multiple pending requests at once.

Provisioned-tier requests (Kubernetes / Compute)

For provisioned features, member requests that need org admin review appear in the inbox. As org admin you can:

Action What it does
Forward to b'nerd Sends the request to b'nerd for provisioning. The request moves to with b'nerd status. You remain the org's point of contact.
Deny Declines the request. The member is notified.

Once forwarded, the request shows as with b'nerd in your Requests view — no further action is needed from you unless b'nerd contacts you for configuration details.

Members who hold features:request

A holder's self-service requests are self-authorized (not in your inbox). Their provisioned-tier requests appear in your inbox as with b'nerd — read-only, already forwarded. You can still deny if needed.

Enabling auto-approve for a feature

To remove the approval step for a self-service feature:

PATCH /organizations/{id}/features/{feature_key}
Authorization: Bearer <token>
Content-Type: application/json

{ "auto_approve": true }

Or via Organization → Features → [feature] → Auto-approve: on.

Disabling auto-approve takes effect immediately for new requests; requests already approved are unaffected.


Notifications

You receive an in-app and email notification when:

  • As a requester: your request is approved, denied, or becomes Available.
  • As an org admin: a new self-service request arrives (when auto-approve is OFF).
  • As an org admin: a new provisioned-tier request arrives requiring your review.

See also