If you’re a platform reselling MIOSA capacity, you need to attribute MIOSA costs back to your own customers. MIOSA emits usage events with resource ownership and external attribution on every billable action; you query them, group, and chargeback in your own currency / margin model.
What’s metered
| Dimension | Unit | When emitted |
|---|---|---|
| Sandbox runtime | sandbox-seconds (per vCPU, per GB-RAM) | Per-second while running |
| Builder runtime | builder-seconds | During publish |
| Runtime instance runtime | runtime-seconds (per vCPU, per GB-RAM) | Per-second while serving |
| Static artifact storage | GB-months | Continuously |
| Static artifact bandwidth | GB egress | Per response |
| Object storage (buckets) | GB-months + GB egress | Continuously / per response |
| Managed Postgres | GB-months + connections | Continuously |
| Managed Redis | GB-months | Continuously |
Ownership and attribution: every event carries workspace_id, project_id, and the external_* fields if present on the source resource |
Computers (desktop product) have a separate metering schema; see Computers for that side.
Usage report API
GET /api/v1/usage?period_start=2026-05-01&period_end=2026-06-01
GET /api/v1/usage?workspace_id=550e8400-e29b-41d4-a716-446655440000
GET /api/v1/usage?external_workspace_id=clinic_123&period=2026-05 Response shape:
{
"data": [
{
"workspace_id": "550e8400-e29b-41d4-a716-446655440000",
"project_id": "660e8400-e29b-41d4-a716-446655440001",
"external_workspace_id": "clinic_123",
"external_user_id": null,
"external_project_id": null,
"total_usd": 4.20,
"line_items": [
{ "dimension": "sandbox_seconds", "qty": 1200, "usd": 0.40 },
{ "dimension": "static_bandwidth_gb", "qty": 38.2, "usd": 3.80 }
]
},
{
"external_workspace_id": "smile-clinic-456",
"total_usd": 11.75,
"line_items": [...]
}
],
"period": { "start": "2026-05-01", "end": "2026-06-01" },
"currency": "usd"
} Use groupBy to slice by any combination of ownership and external IDs. Typical groupings:
["workspace_id"]— per-client workspace["workspace_id", "project_id"]— per-app/project inside a client["external_workspace_id"]— per-customer chargeback["external_workspace_id", "external_project_id"]— per-app within a customer["external_user_id"]— per-user attribution (e.g. for fair-use limits)[]— total for the entire MIOSA organization
Audit log
Every mutation also emits an audit event with attribution. Different table, separate read endpoint:
GET /api/v1/audit?workspace_id=550e8400-e29b-41d4-a716-446655440000
GET /api/v1/audit?external_workspace_id=clinic_123
GET /api/v1/audit?api_key_id=key_...
GET /api/v1/audit?action=deployments.publish Audit is for security / compliance, usage is for billing. Both share the same ownership and attribution model.
Quotas and limits
MIOSA enforces quotas at the organization and plan level. You can enforce per-workspace, per-project, or per-user limits in your own app logic, querying usage to make decisions.
Example: ClinicIQ wants to cap each dental office at $50/month. Their backend:
- Queries
/api/v1/usage?workspace_id=550e8400-e29b-41d4-a716-446655440000&period=current_month. - If
total_usd > 50, denies new sandbox creation in the ClinicIQ app. - Optionally, hits a MIOSA endpoint to suspend the customer’s sandboxes (not a single endpoint today; do it client-side by destroying their sandboxes).
For platform-level safety, MIOSA can also enforce per-external-workspace soft quotas at the tenant config level (Phase 8) — talk to support if you need this.
Pricing
Pricing is plan-dependent. Visit the Pricing page on the marketing site for current rates, or contact support for enterprise plans.
Platform integrations typically negotiate volume rates — talk to sales before scaling to thousands of end users.
Billing tenancy
Important: your MIOSA bill is one bill. MIOSA charges the organization owner for all usage, regardless of which workspace/project or external_workspace_id it came from. Ownership and attribution exist so you can charge your customers. MIOSA does not bill your downstream clinics directly.
MIOSA -> ClinicIQ: $X / month, one invoice
ClinicIQ -> clinic_123: $Y / month (markup, your pricing model)
ClinicIQ -> clinic_456: $Z / month See also
- Ownership and Attribution — the IDs that flow through usage events
- API Keys — the credential for usage queries (
usage:readscope) - Audit — for security log queries