파일 업로드
파일 페이지의 업로드 버튼과 같은 방식으로 파일을 워크스페이스에 저장합니다. 본문은 JSON도 multipart도 아닌 파일 그 자체이며, 형식은 `Content-Type`에 담습니다.
본인 키로 워크스페이스에 실제 호출을 실행합니다.
POST /files
파일 페이지의 업로드 버튼과 같은 방식으로 파일을 워크스페이스에 저장합니다. 본문은 JSON도 multipart도 아닌 파일 그 자체이며, 형식은 Content-Type에 담습니다.
예시
threads:write가 필요합니다. 파일 이름은 filename 쿼리 매개변수나 URI 인코딩한 X-Filename 헤더로 지정합니다. 응답은 파일을 담은 201이며, 그 id는 발송에 { fileId }로 첨부할 수 있습니다.
curl -X POST "$OE/files?filename=price-list.pdf" -H "$AUTH" -H 'content-type: application/pdf' --data-binary @price-list.pdf{ "object": "file", "id": "file_0c4e7a91d2b84f63a5e19b7d", "filename": "price-list.pdf", "mimeType": "application/pdf", "sizeBytes": 248112, "direction": "uploaded", "threadId": null, "messageId": null, "deliveredTo": null, "usage": null, "deletable": true, "createdAt": "2026-09-24T09:12:40.000Z"}이름은 거부되지 않고 정리됩니다. 파일 이름에 쓸 수 없는 문자는 _가 되고, 255자를 넘는 이름은 확장자를 남긴 채 잘립니다. MIME 형식이 아닌 Content-Type은 application/octet-stream으로 저장됩니다.
이름이 없으면 400 upload_no_name, 프로그램이나 스크립트는 400 upload_dangerous, 빈 본문은 400 upload_empty, 100 MB를 넘는 파일은 413 upload_too_large입니다.
워크스페이스는 삭제된 것까지 포함해 시간당 500건의 업로드를 받고, 업로드된 파일을 한 번에 10 GB까지 보관합니다. 이를 넘으면 응답은 429 upload_rate_limited나 507 upload_storage_full입니다. 502 upload_failed는 저장소가 실패했다는 뜻이며 다시 시도할 만합니다.
모든 주소에 닿는 키는 워크스페이스 전체로 업로드하며 deliveredTo는 null입니다. 특정 주소나 도메인으로 제한된 키는 가진 첫 번째 주소로 업로드하고, 주소가 하나도 없는 키는 403 upload_no_address를 받습니다.