Update a project
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| projectId | path | string | Yes | Not published in OpenAPI |
| Idempotency-Key | header | string | No | Optional idempotency key, at most 255 characters (UUIDv4 recommended). A repeated key returns the first response byte-for-byte, including a 5xx. The same key with a different body, or a second in-flight request, returns 409 IDEMPOTENCY_CONFLICT. Keys are unique per tenant and retained for 24 hours. |
| If-Match | header | string | No | Optional precondition. A matching tag proceeds and returns the new ETag. A stale tag returns 412 PRECONDITION_FAILED with no write. Absent proceeds (opt-in this release). If-Match: * succeeds when the resource exists. Malformed values return 400 IF_MATCH_INVALID. |
{
"type": "object",
"properties": {
"dataFormat": {
"type": "string",
"nullable": true,
"enum": [
"mcap",
"rosbag1",
"rosbag2",
"lerobot",
"hdf5-embodiflow",
"hdf5-agilex",
"hdf5-realman",
"hdf5-dobot",
"video",
"bvh",
"aria-vrs",
"umi-gopro"
],
"description": "Optional import default hint; null clears it."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"description": {
"type": "string",
"nullable": true
},
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 96
},
"dataKind": {
"type": "string",
"enum": [
"human",
"robot",
"video"
]
},
"robotType": {
"type": "string",
"nullable": true
},
"defaultFps": {
"type": "number",
"nullable": true,
"minimum": 1
},
"defaultTask": {
"type": "string",
"nullable": true,
"maxLength": 500
},
"requiresSegmentation": {
"type": "boolean"
}
}
}| Status | Description | Content-Type | Schema |
|---|---|---|---|
| 200 | Success | application/json | object |
| 400 | Bad request. Enumerated catalog codes for this operation. | application/problem+json | union |
| 401 | Authentication failed. A specific TOKEN_* cause is returned only when the presented hash matched a stored row. | application/problem+json | union |
| 403 | Authorization failed. PERMISSION_DENIED on an any-of route lists the alternatives in message. | application/problem+json | union |
| 404 | Not found. Enumerated catalog codes for this operation. | application/problem+json | union |
| 409 | Conflict. Enumerated catalog codes for this operation. | application/problem+json | union |
| 412 | If-Match did not match the current resource. No partial write. | application/problem+json | union |
| 429 | Authenticated per-principal or per-tenant request budget exceeded. Rate-limit headers appear only on 429. | application/problem+json | union |
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/ProjectDto"
}
},
"required": [
"data"
]
}{
"allOf": [
{
"$ref": "#/components/schemas/ProblemJson"
},
{
"type": "object",
"properties": {
"status": {
"type": "integer",
"enum": [
400
]
},
"code": {
"type": "string",
"enum": [
"BAD_REQUEST",
"IDEMPOTENCY_KEY_INVALID",
"IF_MATCH_INVALID",
"IMPORT_EXECUTION_FAILED",
"IMPORT_VALIDATION_FAILED",
"INVALID_PERMISSION_OVERLAY",
"INVALID_ROLE_TRANSITION",
"TENANT_CONTEXT_MISMATCH",
"TENANT_REQUIRED",
"VALIDATION_ERROR",
"WORKFLOW_DEFINITION_REVISION_NOT_PUBLISHED"
]
}
}
}
]
}{
"allOf": [
{
"$ref": "#/components/schemas/PublishedAuthProblem"
},
{
"type": "object",
"properties": {
"status": {
"type": "integer",
"enum": [
401
]
},
"code": {
"type": "string",
"enum": [
"TOKEN_MALFORMED",
"TOKEN_NOT_FOUND",
"TOKEN_EXPIRED",
"TOKEN_REVOKED",
"UNAUTHORIZED",
"SESSION_EXPIRED",
"ACTIVATION_REQUIRED",
"MFA_REQUIRED"
]
}
}
}
]
}{
"allOf": [
{
"$ref": "#/components/schemas/PublishedAuthProblem"
},
{
"type": "object",
"properties": {
"status": {
"type": "integer",
"enum": [
403
]
},
"code": {
"type": "string",
"enum": [
"PERMISSION_DENIED",
"PERMISSION_NOT_DECLARED",
"FORBIDDEN",
"MEMBERSHIP_NOT_FOUND",
"MEMBERSHIP_DISABLED",
"MEMBERSHIP_EXPIRED",
"PROJECT_MEMBERSHIP_EXPIRED"
]
}
}
}
]
}{
"allOf": [
{
"$ref": "#/components/schemas/ProblemJson"
},
{
"type": "object",
"properties": {
"status": {
"type": "integer",
"enum": [
404
]
},
"code": {
"type": "string",
"enum": [
"IMPORT_JOB_NOT_FOUND",
"IMPORT_SOURCE_NOT_FOUND",
"NOT_FOUND",
"PIPELINE_BINDING_NOT_FOUND",
"PROJECT_NOT_FOUND",
"RESOURCE_NOT_FOUND",
"USER_NOTIFICATION_NOT_FOUND",
"WORKFLOW_DEFINITION_NOT_FOUND",
"WORKFLOW_NOT_FOUND",
"WORKFLOW_NOT_VISIBLE",
"WORKFLOW_REVISION_NOT_FOUND"
]
}
}
}
]
}{
"allOf": [
{
"$ref": "#/components/schemas/ProblemJson"
},
{
"type": "object",
"properties": {
"status": {
"type": "integer",
"enum": [
409
]
},
"code": {
"type": "string",
"enum": [
"IDEMPOTENCY_CONFLICT",
"IMPORT_SOURCE_CHANGED",
"LAST_OWNER_PROTECTION",
"PIPELINE_BINDING_ALREADY_EXISTS",
"SLUG_GENERATION_CONFLICT",
"WORKFLOW_DEFINITION_CODE_CONFLICT"
]
}
}
}
]
}{
"allOf": [
{
"$ref": "#/components/schemas/ProblemJson"
},
{
"type": "object",
"properties": {
"status": {
"type": "integer",
"enum": [
412
]
},
"code": {
"type": "string",
"enum": [
"PRECONDITION_FAILED"
]
}
}
}
]
}{
"allOf": [
{
"$ref": "#/components/schemas/PublishedAuthProblem"
},
{
"type": "object",
"properties": {
"status": {
"type": "integer",
"enum": [
429
]
},
"code": {
"type": "string",
"enum": [
"RATE_LIMITED"
]
}
}
}
]
}curl -X PATCH 'https://api.embodiflow.com/v1/projects/{projectId}' \
-H 'Authorization: Bearer $EMBODIFLOW_PAT' \
-H 'Content-Type: application/json' \
-d '{}'