create project
A script user can create a Project with nothing but {"name": ...}, at 201, but the response echoes only 6 attributes, so read the project back if you need anything else.
API
Q What does creating a Project over REST require, and does it work from a script user?
Endpoint GET /schema/Project/fields ; GET /entity/projects ; POST /entity/projects
Docs claim Projects can be created over REST by a script user. The docs do not say which fields are required.
Actual
Project fields: 42
mandatory: ['name']
editable (first 25): ['archived', 'asset_linked_projects_assets', 'billboard', 'cached_display_name', 'client_site_settings_saved', 'code', 'color', 'current_user_favorite', 'filmstrip_image', 'image', 'last_accessed_by_current_user', 'name', 'phases', 'sg_client_name', 'sg_description', 'sg_flow_am_id', 'sg_flow_schema_config_version', 'sg_latest_version', 'sg_release_date', 'sg_status', 'sg_temp_due', 'sg_type', 'tags', 'tank_name', 'task_templates']
sandbox already present: False
POST /entity/projects -> 201
created id=1180; attributes returned: ['cached_display_name', 'created_at', 'landing_page_url', 'name', 'tracking_settings', 'updated_at']
Teaches
{"name": "sandbox_show"}withContent-Type: application/jsonis a complete create: 201, no project template, nocode, no dates.- On the probed site,
GET /schema/Project/fieldsreturns 42 fields and flags exactly one,name,mandatory: true. That count is site configuration, and a schema flag is not the create contract (probe 012), so it does not establish thatnameis the server's only requirement. This probe never posted a body withoutname; that POST, behind--write, would settle it. - Trap. The 201 body is not an entity read. It echoes 6 attributes (
cached_display_name,created_at,landing_page_url,name,tracking_settings,updated_at); everything else,idapart, needs a GET on the new project. nameis flagged both mandatory and unique in the schema, so creating is not idempotent. Probe first (GET /entity/projects?fields=name) and reuse the hit, as this probe does. Custom fields silently become<name>_1on a duplicate (probe 019); whether a Project name collides or duplicates is<unverified>.- A fresh project has no
sg_status, so a picker must not filter on it (probe 018).