# Reserve a project media upload



URL: /docs/reference/media/reserveMediaUpload

```json
{"openapi":"3.0.3","info":{"title":"Postdot API","description":"The HTTP API for the lightweight, self-hosted Postdot publication orchestrator.","version":"0.1.0"},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"Postdot API key","description":"A user-owned Postdot API key sent as `Authorization: Bearer <token>`. Its project scope is limited by the creator’s current access."},"sessionCookie":{"type":"apiKey","in":"cookie","name":"better-auth.session_token","description":"The Better Auth email/password session cookie used by the web application."}},"schemas":{}},"security":[{"bearerAuth":[]},{"sessionCookie":[]}],"tags":[{"name":"System","description":"Service health and runtime information."},{"name":"Access","description":"Instance membership and invitations."},{"name":"Projects","description":"Project lifecycle and access."},{"name":"Channels","description":"Project publication destinations."},{"name":"Posts","description":"Source posts and publication creation."},{"name":"Publications","description":"Publication workflow operations."},{"name":"Taxonomy","description":"Project categories and publication tags."},{"name":"Media","description":"Project media assets and uploads."},{"name":"Settings","description":"Instance-level runtime configuration."},{"name":"Audit","description":"Project audit history."},{"name":"Notifications","description":"Signed-in user notification inboxes with optional project context."},{"name":"Analytics","description":"Provider-neutral publication and execution analytics."},{"name":"Provider Analytics","description":"Persisted provider-owned metric observations."}],"paths":{"/api/projects/{projectId}/media/uploads":{"post":{"operationId":"reserveMediaUpload","summary":"Reserve a project media upload","tags":["Media"],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string","minLength":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["originalFilename"],"properties":{"originalFilename":{"type":"string","minLength":1,"maxLength":255},"defaultAccessibilityText":{"anyOf":[{"type":"string","minLength":1,"maxLength":10000},{"type":"null"}]},"expectedSize":{"type":"integer","minimum":0},"contentType":{"type":"string","minLength":1,"maxLength":255}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["originalFilename"],"properties":{"originalFilename":{"type":"string","minLength":1,"maxLength":255},"defaultAccessibilityText":{"anyOf":[{"type":"string","minLength":1,"maxLength":10000},{"type":"null"}]},"expectedSize":{"type":"integer","minimum":0},"contentType":{"type":"string","minLength":1,"maxLength":255}}}},"multipart/form-data":{"schema":{"type":"object","required":["originalFilename"],"properties":{"originalFilename":{"type":"string","minLength":1,"maxLength":255},"defaultAccessibilityText":{"anyOf":[{"type":"string","minLength":1,"maxLength":10000},{"type":"null"}]},"expectedSize":{"type":"integer","minimum":0},"contentType":{"type":"string","minLength":1,"maxLength":255}}}}}},"responses":{"201":{"description":"Response for status 201","content":{"application/json":{"schema":{"type":"object","required":["asset","representation","intent","upload"],"properties":{"asset":{"type":"object","required":["id","projectId","originalFilename","defaultAccessibilityText","state","archivedAt","deletionRequestedAt","deletedAt","failureCode","failureMessage","createdByActorId","createdAt","updatedAt"],"properties":{"id":{"type":"string","minLength":1},"projectId":{"type":"string","minLength":1},"originalFilename":{"type":"string","minLength":1},"defaultAccessibilityText":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"type":"string","enum":["reserved","stored","inspecting","ready","failed","deletion_requested","deleted"]},"archivedAt":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"deletionRequestedAt":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"deletedAt":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"failureCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"failureMessage":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdByActorId":{"type":"string","minLength":1},"createdAt":{"type":"integer","minimum":0},"updatedAt":{"type":"integer","minimum":0}}},"representation":{"type":"object","required":["id","projectId","assetId","kind","state","declaredContentType","detectedContentType","detectedFormat","family","byteSize","sha256","width","height","durationMs","pageCount","isAnimated","processorId","processorVersion","recipeJson","failureCode","failureMessage","createdAt","updatedAt"],"properties":{"id":{"type":"string","minLength":1},"projectId":{"type":"string","minLength":1},"assetId":{"type":"string","minLength":1},"kind":{"type":"string","enum":["original","derived"]},"state":{"type":"string","enum":["reserved","stored","inspecting","ready","failed","deletion_requested","deleted"]},"declaredContentType":{"anyOf":[{"type":"string"},{"type":"null"}]},"detectedContentType":{"anyOf":[{"type":"string"},{"type":"null"}]},"detectedFormat":{"anyOf":[{"type":"string"},{"type":"null"}]},"family":{"anyOf":[{"type":"string","const":"image"},{"type":"string","const":"video"},{"type":"string","const":"audio"},{"type":"string","const":"document"},{"type":"null"}]},"byteSize":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"width":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"height":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"durationMs":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"pageCount":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"isAnimated":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"processorId":{"anyOf":[{"type":"string"},{"type":"null"}]},"processorVersion":{"anyOf":[{"type":"string"},{"type":"null"}]},"recipeJson":{"anyOf":[{"type":"string"},{"type":"null"}]},"failureCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"failureMessage":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"integer","minimum":0},"updatedAt":{"type":"integer","minimum":0}}},"intent":{"type":"object","required":["id","projectId","assetId","representationId","state","expectedSize","maxBytes","contentTypeHint","expiresAt","uploadStartedAt","completedAt","failureCode","failureMessage","createdAt","updatedAt"],"properties":{"id":{"type":"string","minLength":1},"projectId":{"type":"string","minLength":1},"assetId":{"type":"string","minLength":1},"representationId":{"type":"string","minLength":1},"state":{"type":"string","enum":["pending","uploading","uploaded","consumed","expired","failed"]},"expectedSize":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"maxBytes":{"type":"integer","minimum":1},"contentTypeHint":{"anyOf":[{"type":"string"},{"type":"null"}]},"expiresAt":{"type":"integer","minimum":0},"uploadStartedAt":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"completedAt":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"failureCode":{"anyOf":[{"type":"string"},{"type":"null"}]},"failureMessage":{"anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"type":"integer","minimum":0},"updatedAt":{"type":"integer","minimum":0}}},"upload":{"type":"object","required":["intentId","storeId","maxBytes","expectedSize","contentType"],"properties":{"intentId":{"type":"string","minLength":1},"storeId":{"type":"string","minLength":1},"maxBytes":{"type":"integer","minimum":1},"expectedSize":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"contentType":{"anyOf":[{"type":"string"},{"type":"null"}]}}}}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"403":{"description":"Response for status 403","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"503":{"description":"Response for status 503","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}},"servers":[{"url":"https://postbot.example","description":"Replace with your Postdot instance origin."}]}
```
