Project resources

The project record itself holds only identity and attribution:

FieldPurpose
idCanonical UUID. Store this after the first resolution.
tenant_idThe Organization that owns the project.
workspace_idThe Workspace the project lives in. Required.
nameDisplay name, 1 to 120 characters.
slugURL-safe key, 1 to 80 characters, unique per workspace. Derived from the name when omitted.
descriptionOptional free text.
metadataArbitrary key-value map.
is_defaultTrue for the workspace’s Default project. A client cannot set this.
external_project_idYour own project id, unique per Organization. Attribution only.
external_workspace_idYour own workspace id, inherited from the Workspace. Attribution only.

Where a project fits

Every Workspace also has one Default project, created on demand and marked is_default. It is the home for resources created without an explicit project, and it can neither be deleted nor moved.

What lives in a project

Resources attach to a project through a canonical project_id column, and most also carry workspace_id and your external_project_id. A resource create call can resolve the project for you: pass project_id, project_slug, project_name, or external_project_id and MIOSA resolves or creates the project before inserting the resource.

ResourceIn a projectNotes
SandboxYesThe mutable development environment. Carries project_id and workspace_id.
Sandbox previewYesGenerated preview URL for a sandbox.
ComputerYesThe desktop runtime. Carries project_id; computers have no workspace_id column.
DeploymentYesDurable production identity. It owns versions, releases, services, environments, builds, runtime instances, and preview environments, and every one of those children carries the same project_id.
Managed databaseYesProject-scoped with no workspace column. One is auto-provisioned when the project is created.
DatabaseYesDatabase attached to a sandbox.
Managed serviceYesProject-scoped with no workspace column.
Storage bucketYesS3-compatible object storage.
VolumeYesDurable filesystem. A /data volume is auto-created with the project.
Custom domainYesAn exact hostname attached to a sandbox, computer, or deployment.
Edge functionYesCode that runs at the edge.
Cron jobYesScheduled executions.
WorkflowYesCarries project_id with no workspace column.
Project authYesBuilt-in auth for one sandbox or deployment, with an encrypted JWT secret.
Project integrationYesProvider credentials such as Stripe, Resend, and Twilio.
Runtime env varYesscope is tenant, workspace, or project. Values are encrypted at rest.
Agent definition and runtime profileYesAgent configuration scoped to the project.
Usage meterYesThe billing dimension a resource is metered under.
RunYesDetached when the project is deleted: project_id is set to null, the run is not deleted.
Project memberYesCascades on project delete.
Product linkYesA Product groups one or more projects inside a workspace.
Audit, usage, and platform eventsAttribution onlyImmutable history. It keeps the project it was recorded under and is never rewritten.
WorkspaceNoThe parent boundary. A project has exactly one.
OrganizationNoTwo levels above the project. It owns billing and policy.

For the live counts, health roll-up, last deploy, and linked repository of one project, call GET /api/v1/projects/{id}/summary.

Project, workspace, or organization?

NeedUse
Separate company billing and policyOrganization
Separate team, customer, or business boundaryWorkspace
Group one app and its resourcesProject
Develop mutable sourceSandbox
Operate one stable production appDeployment
Keep a persistent interactive desktopComputer

Create separate Projects when applications need independent deployment history, domains, environments, or usage attribution.

Do not create a new Project for every build, preview, or release. Previews and releases belong to the Deployment inside the project, not to a new project.

Domains

Preview domains are an organization-level setting, not a per-project one. A tenant preview domain white-labels generated preview links for the whole organization; an exact custom hostname attaches to one Deployment or Computer.

The effective order is:

Exact deployment/computer hostname
  -> Organization preview domain
  -> MIOSA-managed fallback

Always display URLs returned by MIOSA instead of rebuilding them from slugs.

Every custom domain row carries project_id and workspace_id alongside the resource it points at, so a hostname is scoped and attributed the same way the resource is.

Mapping your own platform onto projects

Your platformMIOSA
Company accountOrganization
Customer or teamWorkspace
App, site, document, or productProject
Editable build environmentSandbox
Live applicationDeployment

Three worked examples:

PlatformShapeWhy
LumenOne Project per customer app, inside one WorkspaceEach app gets its own deployment history, domains, and usage line while the whole platform stays on one billing account.
Acme CorpOne Project per internal tool, inside one Workspace per departmentTools share the company’s Organization and policy but roll up their usage and members separately.
Northwind AgencyOne Workspace per client, one Project per deliverableThe client boundary is the Workspace, so isolating clients never leaks into a per-deliverable project.

Store the canonical workspace_id and project_id after the first resolution. Use external_workspace_id, external_project_id, and external_user_id for correlation, not as substitutes for MIOSA ownership.

Was this page helpful?