Create projects

Creates a project from the apps it starts with.

POST /v1/platform/projects

Addresshttps://api.hanzo.ai/v1/platform/projects
MethodPOST
Operationpost_platform_projects
AuthAuthorization: Bearer $HANZO_API_KEY

Creates a project from the apps it starts with.

A project is the partOf its apps' values files name, so creating one names it on the listed apps: one commit to hanzoai/universe that moves each file's partOf scalar and touches nothing else. There is no empty project; to start one with a new app, create the app with partOf (POST /v1/platform/apps).

mode is branch (the default: a review branch, nothing deploys) or commit (main). A partOf change relabels the app's pods, so the sync that applies it rolls them. 409 when the name already names apps — move apps into an existing project with PUT /v1/platform/apps/{app}/project. An org admin changes its own org's projects; the platform's own, and another org's, are SuperAdmin.

Request

6 fields, body application/json (required).

FieldInTypeRequiredDescription
appsbodyplatform.declRef[]—Apps are the declarations it starts with, each by values directory (org, defaulting to the caller's own) and name.
apps[].namebodystring—Name is the declaration's name, the file's basename.
apps[].orgbodystring—Org is the values directory the declaration lives in.
modebodystring—Mode is branch (the default: a review branch, nothing deploys) or commit (main).
namebodystring—Name is the project, a DNS-1123 label; it becomes each app's partOf.
orgbodystring—Org names the project's owner, defaulting to the caller's own scope; naming another is an act-as only a SuperAdmin has.

Response

StatusBodyMeaning
201platform.projectWritecreated
defaultproblem-detailsrefused

201 body — 11 fields.

FieldInTypeAlwaysDescription
commitbodystring—Commit is the sha the change created, "" when nothing had to move.
livebodyboolean—Live says whether the generator will see it: true only on main.
modebodystring—Mode is branch (a review; nothing deploys) or commit (main).
movedbodyplatform.relabel[]—Moved are the declarations whose partOf moved, and from what.
moved[].frombodystring—
moved[].namebodystring—
moved[].orgbodystring—
moved[].tobodystring—
projectbodystring—Project is the project the change leaves the moved apps in.
refbodystring—Ref is the branch the change was pushed to, main for a commit.
reviewbodystring—Review is where to open the pull request for a branch.

Failure carries the platform error shape — see Errors.

Examples

hanzo has no subcommand for this operation — the CLI serves only what cloud's live route table confirms. Use HTTP or an SDK.

import { Configuration, PlatformApi } from 'hanzoai';

const api = new PlatformApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postPlatformProjects({ apps: [{"name":"<name>","org":"<org>"}], mode: "<mode>" });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import PlatformApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = PlatformApi(client).post_platform_projects(apps=[{"name":"<name>","org":"<org>"}], mode="<mode>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.PlatformAPI.PostPlatformProjects(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, platform_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = platform_api::post_platform_projects(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.PlatformApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new PlatformApi(client).postPlatformProjects();
curl -X POST https://api.hanzo.ai/v1/platform/projects \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "apps": [
         {
           "name": "<name>",
           "org": "<org>"
         }
       ],
       "mode": "<mode>"
     }'

MCP reaches platform through the platform tool, which names its 38 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "get_build"
         }
       }
     }'

Platform API · All Hanzo APIs · Interactive reference

Was this page useful?