Agencies
Agency owner/admin
Agency owner/admin: client workspaces (id, name, status active|suspended, members_count, projects_count)
Agency owner/admin
Agency owner/admin: create a client workspace (an organization with parent = the agency, no members yet; at most lantfly.agency.max_clients). Agency owner/admins act inside it with X-Lantfly-Account (same role as in the agency) and invite client users there. Billing is per workspace unless the agency owner bills it to the agency (`…/clients/{client}/billing`)
Agency owner/admin
Agency owner/admin: rename, or suspend (read-only: writes answer 423 account_suspended) / reactivate. Audited in both accounts
Agency owner/admin
Agency owner/admin: billing per client workspace for the agency's billing period (?period=current|previous; calendar month while billing is off): period, agency { usage_usd, billed_usd }, billed_total_usd, can_change_mode (owner), clients [{ id, name, status, billing_mode self|agency, spending_cap_usd, usage_usd, billed_to_agency_usd }]. ?format=csv downloads the same rows
Bill a client workspace to the agency
Bill a client workspace to the agency (usage, credit, admission, overage and plan limits resolve to the agency) or back to itself: `mode` is owner only, audited in both accounts; 409 when the workspace has its own live subscription or an unpaid bank-transfer invoice. `spending_cap_usd` (owner/admin, null = none) caps what the workspace spends per agency period
Agency owner/admin
Agency owner/admin: white-label branding (name, logo_url, primary_color, report_footer, custom_domain) and `domain` { domain, status pending|verified|failed, record_name, record_value, checked_at, verified_at, error } (null without a custom domain)
Agency owner/admin
Agency owner/admin: set branding. Shown to the agency's clients (dashboard header, public report page, reports). Saving a new custom_domain starts DNS verification (TXT `_lantfly-verify.⟨domain⟩` = `lantfly-verify=⟨token⟩`); Lantfly's own hosts are refused (422)
Agency owner/admin
Agency owner/admin: look the TXT record up now (10/min); returns the branding with `domain.status`. Verified domains serve the agency's public reports and walls; rechecked every lantfly.agency.domain_recheck_hours
Agency owner/admin
Agency owner/admin: upload the logo (multipart `logo`: PNG, JPEG or WebP, max lantfly.agency.logo_max_kb, 2000 px; no SVG)
Agency owner/admin
Agency owner/admin: remove the logo