|
2010 | 2010 | "post": { |
2011 | 2011 | "operationId": "bulkDeleteFiles", |
2012 | 2012 | "summary": "Delete Files", |
2013 | | - "description": "Delete up to 1,000 workspace files in one operation.", |
| 2013 | + "description": "Delete up to 1,000 workspace files in one operation. This is the same soft delete as `DELETE /api/v2/files/{fileId}`: files are archived, not erased, and `POST /api/v2/files/{fileId}/restore` reverses each one.", |
2014 | 2014 | "tags": ["Files"], |
2015 | 2015 | "requestBody": { |
2016 | 2016 | "required": true, |
|
2057 | 2057 | "404": { |
2058 | 2058 | "$ref": "#/components/responses/NotFound" |
2059 | 2059 | }, |
2060 | | - "409": { |
2061 | | - "$ref": "#/components/responses/Conflict" |
2062 | | - }, |
2063 | 2060 | "413": { |
2064 | 2061 | "$ref": "#/components/responses/PayloadTooLarge" |
2065 | 2062 | }, |
|
3105 | 3102 | "url": { |
3106 | 3103 | "type": "string", |
3107 | 3104 | "format": "uri", |
3108 | | - "description": "Signed URL to which the file bytes are uploaded. Send the bytes with `PUT` to this URL, including exactly the headers in `headers` and nothing that alters the body. Success is `204` with an empty body. A failure is the same `{ \"error\": { \"code\", \"message\" } }` envelope as every other v2 response: `400` when the body does not match the size or content type the session was created for, `403` when the token is invalid, expired, or belongs to another session, and `409` when the session is no longer accepting bytes. The URL is signed and self-describing — construct it from this field only, never by hand." |
| 3105 | + "description": "Signed URL to which the file bytes are uploaded. Send the bytes with `PUT` to this URL, including exactly the headers in `headers` and nothing that alters the body. The URL is signed and self-describing — construct it from this field only, never by hand.\n\n**Where this URL points depends on the deployment, and so does what answers you.** When Sim stores objects itself the URL is Sim's own data plane: success is `204` with an empty body, and a failure is the same `{ \"error\": { \"code\", \"message\" } }` envelope as every other v2 response — `400` when the body does not match the size or content type the session was created for, `403` when the token is invalid, expired, or belongs to another session, and `409` when the session is no longer accepting bytes. When object storage is configured — S3, Google Cloud Storage, or Azure Blob — the URL is that provider's own presigned URL, and the provider answers directly: treat **any `2xx` as success** (S3 and GCS answer `200`, Azure `201`), and on failure expect the provider's error document, typically XML, not the v2 envelope. Do not branch on `204` and do not parse a failure as JSON." |
3109 | 3106 | }, |
3110 | 3107 | "headers": { |
3111 | 3108 | "type": "object", |
|
3259 | 3256 | "url": { |
3260 | 3257 | "type": "string", |
3261 | 3258 | "format": "uri", |
3262 | | - "description": "Signed URL for this upload part. Send the bytes with `PUT` to this URL, including exactly the headers in `headers` and nothing that alters the body. Success is `204` with an empty body. A failure is the same `{ \"error\": { \"code\", \"message\" } }` envelope as every other v2 response: `400` when the body does not match the size or content type the session was created for, `403` when the token is invalid, expired, or belongs to another session, and `409` when the session is no longer accepting bytes. The URL is signed and self-describing — construct it from this field only, never by hand." |
| 3259 | + "description": "Signed URL for this upload part. Send the bytes with `PUT` to this URL, including exactly the headers in `headers` and nothing that alters the body. The URL is signed and self-describing — construct it from this field only, never by hand.\n\n**Where this URL points depends on the deployment, and so does what answers you.** When Sim stores objects itself the URL is Sim's own data plane: success is `204` with an empty body, and a failure is the same `{ \"error\": { \"code\", \"message\" } }` envelope as every other v2 response — `400` when the body does not match the size or content type the session was created for, `403` when the token is invalid, expired, or belongs to another session, and `409` when the session is no longer accepting bytes. When object storage is configured — S3, Google Cloud Storage, or Azure Blob — the URL is that provider's own presigned URL, and the provider answers directly: treat **any `2xx` as success** (S3 and GCS answer `200`, Azure `201`), and on failure expect the provider's error document, typically XML, not the v2 envelope. Do not branch on `204` and do not parse a failure as JSON.\n\nYou do not need to retain the `ETag` each part upload returns. Unlike a raw S3 multipart flow, completion takes no request body: Sim lists the uploaded parts from the provider itself and reads their entity tags there, so `POST .../complete` only has to happen after every part has been sent." |
3263 | 3260 | }, |
3264 | 3261 | "headers": { |
3265 | 3262 | "type": "object", |
|
3859 | 3856 | "type": "null" |
3860 | 3857 | } |
3861 | 3858 | ], |
3862 | | - "description": "Identifier of the affected resource." |
| 3859 | + "description": "Identifier of the affected resource. Always null when `resourceType` is `folder`: folders are addressed by canonical path on this API, so their internal identifiers are withheld rather than published as an id no other endpoint accepts." |
3863 | 3860 | }, |
3864 | 3861 | "resourceName": { |
3865 | 3862 | "anyOf": [ |
|
3884 | 3881 | "description": "Human-readable description of the action." |
3885 | 3882 | }, |
3886 | 3883 | "metadata": { |
3887 | | - "description": "Arbitrary per-action JSON metadata." |
| 3884 | + "description": "Arbitrary per-action JSON metadata. Internal folder identifiers are stripped at every nesting level, for the same reason `resourceId` is null on a folder entry." |
3888 | 3885 | }, |
3889 | 3886 | "createdAt": { |
3890 | 3887 | "type": "string", |
|
0 commit comments