Skip to content

Admin enhanced dashboard

GET
/api/v1/admin/dashboard/enhanced
curl --request GET \
--url https://api.deploybase.eu/api/v1/api/v1/admin/dashboard/enhanced \
--header 'Authorization: <Authorization>'

Platform totals, recent deployments and teams, plan distribution, revenue, the activation funnel and this week’s functions block (functions_week, null when the reliability rollup is not wired)

OK

Media type application/json
object
data
meta
object
request_id
string
timestamp
string
trace_id
string
data
object
active_builds
integer
all_time_funnel
object
has_custom_domain
integer
has_project
integer
has_success_deploy
integer
paying
integer
teams
integer
deployments_by_status
Array<object>
object
count
integer
status
string
functions_week

FunctionsWeek is filled by the service, not GetEnhancedStats: half of it is the DEP-851 reliability rollup, which belongs to another repository. Null when that repository is not wired.

object
http_requests
integer
http_requests_prev
integer
measured_hours
integer
measured_hours_prev
integer
ssr_projects_new

SSRProjectsNew is how many projects got their first SSR function this ISO week.

integer
ssr_requests
integer
ssr_requests_prev
integer
ssr_sites_live

SSRSitesLive is how many projects serve production from a ready SSR function.

integer
week_start
string
plan_distribution
Array<object>
object
count
integer
plan
string
recent_deployments
Array<object>
object
branch
string
build_finished_at
string
build_started_at
string
created_at
string
created_by_email
string
framework
string
id
string
project_name
string
status
string
team_name
string
team_slug
string
recent_teams
Array<object>
object
activation_pending_until

ActivationPendingUntil is set on a team created on a paid plan until its first checkout completes (DEP-766). While set the team cannot create projects, deploy, add hostnames or invite (services.ErrTeamAwaitingPayment); past it, the activation reaper deletes the team. A column, not a Status value: Status is the deletion machine and must never see this.

string
bunny_pull_zone_id

Bunny.net Pull Zone (lazy-created on first deployment)

integer
bunny_pull_zone_url
string
created_at
string
default_preview_access

DefaultPreviewAccess is the preview access level (models.AccessLevel*) a NEW project starts at (DEP-468). Changing it never touches existing projects.

string
deletion_kind

DeletionKind is which erasure the request asked for (DEP-763). NULL when none is open (cleared on cancel), kept on a purged tombstone; read via models.DeletionKindOrAccount.

string
Allowed values: account team
deletion_requested_at
string
deletion_requested_by

DeletionRequestedBy is the requesting owner’s Zitadel subject. Text, not uuid: there is no users table and a subject is a snowflake.

string
deployment_count
integer
external_id
string
functions_beta

FunctionsBeta is a closed-beta GRANT for HTTP functions (DEP-375), not just an allowlist: when true it overrides the plan gate entirely, serving HTTP functions at the beta profile’s sizing (billing.ApplyFunctionsBetaProfile) even on a plan that excludes them. Flipped by a platform admin. Background functions are never gated by it.

boolean
functions_beta_granted_at
string
functions_beta_requested_at

The closed-beta application trail (DEP-378). A team applies for itself and a platform admin approves later, so “applied” and “enrolled” are two different states: FunctionsBetaRequestedAt set with FunctionsBeta still false is the pending queue.

FunctionsBetaRequestedBy is the applicant’s Zitadel subject — the person who clicked apply, not whoever represents the team. Text, not uuid: there is no users table. FunctionsBetaGrantedAt is stamped on the false->true flip and KEPT if the grant is later revoked, so it records when the team was first let in rather than mirroring the flag.

string
functions_beta_requested_by
string
functions_beta_requested_by_email

FunctionsBetaRequestedByEmail is the address of the member who applied for the functions closed beta (DEP-378), resolved from Team.FunctionsBetaRequestedBy. Empty when nobody applied or the applicant has since left the team. Deliberately NOT the owner-preference lookup: the admin needs to know who asked, not who represents the team.

string
functions_beta_terms_version
string
id
string
lapsed_at

LapsedAt is set while this extra team is a second Free team of one of its owners (DEP-889): its sites keep serving, but it cannot deploy or create projects (services.ErrTeamLapsed). Set and cleared by the lapse sweeper, cleared at once by a payment. The team is deleted TeamLapseRemovalAfter after it; the clock resets whenever the column clears.

string
last_activity_at

LastActivityAt is a denormalized timestamp bumped on meaningful team activity (deployment create, build start, domain add, authed API call). Used by the admin dashboard for fast activity-bucket filtering.

string
legal_hold
boolean
member_count
integer
name
string
notification_email

Email notifications

string
notification_email_legacy_grace_until
string
notification_email_pending

NotificationEmailPending is a requested address awaiting confirmation. Never mailed except for the confirmation itself.

string
notification_email_status

Verification state of NotificationEmail (DEP-710). Only verified is mailed (plus a migrated legacy address while pending within NotificationEmailLegacyGraceUntil); anything else falls back to the owners. See RecipientsFor in the repository.

string
Allowed values: none pending verified suppressed
notification_email_verified_at
string
owner_email

OwnerEmail / OwnerName are the team’s representative identity, resolved by ownerPreferenceOrder: the owner membership (earliest joined if several), falling back to any member. Both empty when the team has no members yet.

string
owner_name
string
plan
string
Allowed values: free starter pro scale
primary_domain

PrimaryDomain is the team’s first verified custom domain, if any.

string
project_count
integer
purge_after
string
purged_at
string
slug
string
slug_chosen_at

SlugChosenAt is NULL until the owner deliberately saved the slug (DEP-533). Auto-picked slugs at provisioning time and the one-off backfill both leave it NULL, and that NULL is what drives the “name your team” nudge — so it is a record of intent, not of the last write. A rename by the owner stamps it; SetAutoIdentity never does.

string
status

Account deletion (DEP-186). The whole 14-day grace period lives in these columns; no job row exists until the purge is claimed (spec D7).

string
Allowed values: active pending_deletion purging purged
subscription_complimentary

SubscriptionComplimentary marks an admin-granted plan with no payment provider behind it (DEP-482). The service zeroes MRR for these; the admin UI badges them.

boolean
subscription_status
string
Allowed values: active pending_payment past_due cancelled suspended
suspended_at

Suspension (DEP-299), the abuse kill switch. A sibling of LegalHold, deliberately not a TeamStatus value: the deletion state machine above must never see it, so a suspended team still purges on schedule and a team under a deletion request can still be suspended. SuspendedBy is the admin’s Zitadel subject; text, not uuid, because there is no users table.

string
suspended_by
string
suspended_reason
string
suspension_notified_at

SuspensionNotifiedAt is when the statement of reasons for the current suspension went out (DEP-774). NULL on a suspended team means it is still owed.

string
updated_at
string
welcome_email_sent_at
string
revenue
object
failed_invoices
integer
paid_invoices
integer
pending_invoices
integer
total_revenue_cents
integer
total_bandwidth_gb
number
total_build_minutes
integer
total_deployments
integer
total_domains
integer
total_projects
integer
total_teams
integer
verified_domains
integer
weekly_funnel

WeeklyFunnel / AllTimeFunnel power the activation funnel chart (DEP-196).

Array<object>
object
deployed_ok
integer
made_project
integer
signups
integer
week
string

Example

{
"data": {
"recent_teams": [
{
"deletion_kind": "account",
"notification_email_status": "none",
"plan": "free",
"status": "active",
"subscription_status": "active"
}
]
}
}

Unauthorized

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string

Example generated

{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Forbidden

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string

Example generated

{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Internal Server Error

Media type application/json
object
code
string
details
error
string
meta
object
request_id
string
timestamp
string
trace_id
string

Example generated

{
"code": "example",
"details": "example",
"error": "example",
"meta": {
"request_id": "example",
"timestamp": "example",
"trace_id": "example"
}
}

Live f79d25b6 built