{"components":{"parameters":{"IdempotencyKey":{"description":"Replays the first response for 24 h (keyed by caller). A different request under the same key is 422.","in":"header","name":"Idempotency-Key","schema":{"maxLength":128,"type":"string"}}},"responses":{"ErrorResponse":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Error envelope (schemas §6.9); the status code is the error's HTTP status."}},"schemas":{"AccessToken":{"description":"A serving token. Append it as ?token= to the file's public_url or any render URL in its scope.","properties":{"expires_at":{"description":"Null = never expires.","format":"date-time","nullable":true,"type":"string"},"render_url_template":{"description":"path tokens: the render template with the token appended; fill {op}/{params}/{name}.","nullable":true,"type":"string"},"scope":{"properties":{"audiences":{"items":{"type":"string"},"type":"array"},"constraints":{"additionalProperties":{"type":"string"},"description":"Limits on renders: width \u003c=N, height \u003c=N, blur \u003e=N.","type":"object"},"path":{"description":"The one file the token opens, e.g. /photos/cat.png.","type":"string"},"prefix":{"description":"The folder the token opens, e.g. /photos; / = the whole app.","type":"string"}},"required":["audiences"],"type":"object"},"token":{"type":"string"},"url":{"description":"path tokens: the file's URL with the token appended.","nullable":true,"type":"string"}},"required":["token","expires_at","scope"],"type":"object"},"Action":{"description":"One next step. Switch on id (stable); title may change. An HTTP step has method + href (or template); a step on the developer's machine has local instead.","properties":{"after_seconds":{"description":"Wait this long first.","type":"integer"},"audience":{"description":"human: relay to the person (the agent cannot do it). Omitted = agent.","enum":["agent","human"],"type":"string"},"body":{"additionalProperties":true,"description":"Example request body.","type":"object"},"docs":{"type":"string"},"examples":{"additionalProperties":{"type":"string"},"description":"image.render: operation (fill, fit, crop, convert) → ready URL.","type":"object"},"headers":{"additionalProperties":{"type":"string"},"type":"object"},"href":{"description":"Fully resolved URL.","type":"string"},"id":{"enum":["trial.create","key.store","account.claim","docs.open","upload.create","upload.put","upload.poll","upload.get","upload.abort","upload.list","file.get","file.list","file.serve","file.delete","image.render","access.token","usage.get","quota.warning","quota.upgrade","retry"],"type":"string"},"local":{"$ref":"#/components/schemas/LocalStep"},"method":{"type":"string"},"recommended":{"description":"The step to take now; at most one per list.","type":"boolean"},"remind_every_seconds":{"description":"quota.warning: tell the human at most this often.","type":"integer"},"template":{"description":"URL with {placeholders} to fill.","type":"string"},"title":{"type":"string"}},"required":["id","title"],"type":"object"},"App":{"properties":{"app_id":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"is_default":{"type":"boolean"},"keys":{"type":"integer"},"name":{"type":"string"},"user_id":{"type":"string"}},"required":["app_id","user_id","name","is_default","created_at","keys"],"type":"object"},"AppList":{"properties":{"apps":{"items":{"$ref":"#/components/schemas/App"},"type":"array"}},"required":["apps"],"type":"object"},"AppMeterUsage":{"description":"Per-app usage carries the five cost meters with used and unit only; limits and windows live on the user.","properties":{"reserved":{"description":"storage only","format":"int64","type":"integer"},"unit":{"type":"string"},"used":{"format":"int64","type":"integer"}},"required":["used","unit"],"type":"object"},"CreatedKey":{"properties":{"app_id":{"type":"string"},"key_id":{"type":"string"},"secret":{"type":"string"},"shown_once":{"type":"boolean"}},"required":["key_id","app_id","secret","shown_once"],"type":"object"},"EmailRequest":{"properties":{"email":{"format":"email","type":"string"}},"required":["email"],"type":"object"},"Error":{"properties":{"code":{"enum":["quota_exhausted","rate_limited","feature_not_licensed","unauthorized","forbidden","not_found","conflict","invalid_request","invalid_callback_url","idempotency_mismatch","payload_too_large","upstream_error","gone","length_required","client_closed","internal"],"type":"string"},"hint":{"description":"What to do next, when not obvious from the code. Storage quota with reserved bytes: list open uploads (GET /uploads), abort stuck ones (DELETE /uploads/{upload_id}).","type":"string"},"limit":{"format":"int64","type":"integer"},"message":{"type":"string"},"meter":{"type":"string"},"next":{"description":"What to do next, ordered; at most one is recommended (design/agent-hints.md). Omitted with Prefer: return=minimal.","items":{"$ref":"#/components/schemas/Action"},"type":"array"},"request_id":{"type":"string"},"reserved":{"description":"storage only: bytes held by open upload sessions (omitted when 0); the gate compares used + reserved with limit","format":"int64","type":"integer"},"retry_after":{"description":"Seconds, rate_limited only. A rate_limited error also names the limit it hit: meter (rate.requests per key, rate.upload / rate.token / rate.purge per app), limit and unit (e.g. 30 per minute).","nullable":true,"type":"integer"},"unit":{"type":"string"},"upgrade_url":{"type":"string"},"used":{"format":"int64","type":"integer"},"window":{"type":"string"}},"required":["code","message","request_id"],"type":"object"},"ErrorEnvelope":{"properties":{"error":{"$ref":"#/components/schemas/Error"}},"required":["error"],"type":"object"},"File":{"description":"A stored file, or a folder (type dir: size 0, empty mime_type and hash, null URLs).","properties":{"acl":{"enum":["public","private"],"type":"string"},"created_at":{"format":"date-time","type":"string"},"hash":{"type":"string"},"mime_type":{"type":"string"},"next":{"description":"What to do next, ordered; at most one is recommended (design/agent-hints.md). Omitted with Prefer: return=minimal.","items":{"$ref":"#/components/schemas/Action"},"type":"array"},"path":{"description":"Path in the app, rooted at /, e.g. /photos/cat.png (a folder: /photos).","type":"string"},"public_url":{"description":"Null for private files and folders.","nullable":true,"type":"string"},"render_url_template":{"description":"Serving URL plus /v1/{op}/{params}/{name}; copy it whole (it carries internal ids). Null for folders.","nullable":true,"type":"string"},"size":{"format":"int64","type":"integer"},"type":{"enum":["file","dir"],"type":"string"}},"required":["path","type","size","mime_type","acl","hash","created_at","public_url","render_url_template"],"type":"object"},"FileList":{"properties":{"files":{"items":{"$ref":"#/components/schemas/File"},"type":"array"},"next_cursor":{"description":"Pass as ?cursor= for the next page; null on the last page.","nullable":true,"type":"string"}},"required":["files","next_cursor"],"type":"object"},"LocalStep":{"description":"A step on the developer's machine: write content to a file with mode, and git-ignore its folder.","properties":{"content":{"type":"string"},"gitignore":{"type":"boolean"},"mode":{"type":"string"},"write":{"type":"string"}},"required":["write","content"],"type":"object"},"MeterUsage":{"properties":{"limit":{"format":"int64","nullable":true,"type":"integer"},"reserved":{"description":"storage only: bytes held by open upload sessions; the gate compares used + reserved","format":"int64","type":"integer"},"unit":{"type":"string"},"used":{"format":"int64","type":"integer"},"window":{"type":"string"}},"required":["used","limit","unit","window"],"type":"object"},"Pending":{"properties":{"status":{"enum":["pending"],"type":"string"}},"required":["status"],"type":"object"},"Serving":{"properties":{"reason":{"nullable":true,"type":"string"},"since":{"format":"date-time","nullable":true,"type":"string"},"state":{"enum":["allow","signed_url_only","suspended"],"type":"string"}},"required":["state","reason","since"],"type":"object"},"SessionInfo":{"properties":{"expires_at":{"format":"date-time","type":"string"},"kind":{"enum":["user","staff"],"type":"string"},"token":{"description":"amps_sess_… bearer (Authorization: Bearer); the API sets no cookie.","type":"string"}},"required":["token","kind","expires_at"],"type":"object"},"SessionRequest":{"properties":{"code":{"description":"Magic-link code.","type":"string"},"oauth":{"properties":{"code":{"type":"string"},"provider":{"enum":["google"],"type":"string"}},"required":["provider","code"],"type":"object"}},"type":"object"},"SessionResult":{"properties":{"app":{"$ref":"#/components/schemas/App"},"key":{"$ref":"#/components/schemas/CreatedKey"},"session":{"$ref":"#/components/schemas/SessionInfo"},"user":{"$ref":"#/components/schemas/User"}},"required":["session","user"],"type":"object"},"TrialCreated":{"properties":{"app":{"$ref":"#/components/schemas/App"},"key":{"$ref":"#/components/schemas/CreatedKey"},"next":{"description":"What to do next, ordered; at most one is recommended (design/agent-hints.md). Omitted with Prefer: return=minimal.","items":{"$ref":"#/components/schemas/Action"},"type":"array"},"user":{"$ref":"#/components/schemas/User"}},"required":["user","app","key"],"type":"object"},"UploadList":{"properties":{"uploads":{"items":{"$ref":"#/components/schemas/UploadStatus"},"type":"array"}},"required":["uploads"],"type":"object"},"UploadRequest":{"properties":{"acl":{"default":"public","enum":["public","private"],"type":"string"},"callback_url":{"description":"Optional webhook: AMPS will POST upload.completed / upload.expired (signed, components/api.md §10) once webhook.deliver ships; today the URL is validated, stored and echoed. https and a public DNS name; otherwise 400 invalid_callback_url. Without it, poll GET /uploads/{upload_id}.","maxLength":2048,"type":"string"},"mime_type":{"default":"application/octet-stream","type":"string"},"path":{"description":"Path in the app, e.g. /photos/cat.png (the leading / is optional; folders are created implicitly).","maxLength":1024,"type":"string"},"protocol":{"default":"put","description":"tus is accepted by the schema but refused with 400 until the TUS forwarder ships (M4.5); use put.","enum":["put","tus"],"type":"string"},"size":{"description":"Declared size in bytes; binding.","format":"int64","minimum":1,"type":"integer"}},"required":["path","size"],"type":"object"},"UploadSession":{"properties":{"expires_at":{"format":"date-time","type":"string"},"next":{"description":"What to do next, ordered; at most one is recommended (design/agent-hints.md). Omitted with Prefer: return=minimal.","items":{"$ref":"#/components/schemas/Action"},"type":"array"},"path":{"description":"Path in the app, rooted at /, e.g. /photos/cat.png.","type":"string"},"protocol":{"enum":["put","tus"],"type":"string"},"reserved_bytes":{"format":"int64","type":"integer"},"upload_id":{"type":"string"},"upload_url":{"type":"string"}},"required":["upload_id","upload_url","protocol","expires_at","path","reserved_bytes"],"type":"object"},"UploadStatus":{"properties":{"acl":{"enum":["public","private"],"type":"string"},"app_id":{"type":"string"},"callback_url":{"nullable":true,"type":"string"},"created_at":{"format":"date-time","type":"string"},"expires_at":{"format":"date-time","type":"string"},"file":{"$ref":"#/components/schemas/File"},"mime_type":{"description":"The session's upload parameters, as POST /uploads received them.","type":"string"},"next":{"description":"What to do next, ordered; at most one is recommended (design/agent-hints.md). Omitted with Prefer: return=minimal.","items":{"$ref":"#/components/schemas/Action"},"type":"array"},"path":{"description":"Path in the app, rooted at /, e.g. /photos/cat.png.","type":"string"},"protocol":{"enum":["put","tus"],"type":"string"},"received_bytes":{"description":"Bytes WixMP confirmed stored.","format":"int64","type":"integer"},"reserved_bytes":{"description":"Declared size; held against the storage quota while open.","format":"int64","type":"integer"},"status":{"enum":["open","completed","expired","aborted"],"type":"string"},"streamed_at":{"description":"When the full declared size was last streamed to storage (null = not yet).","format":"date-time","nullable":true,"type":"string"},"stuck":{"description":"Open sessions only: true when the session will not complete on its own (past expires_at, or its full size was streamed more than 2 minutes ago without completing). Abort it (DELETE /uploads/{upload_id}) and upload again.","type":"boolean"},"upload_id":{"type":"string"}},"required":["upload_id","app_id","path","status","reserved_bytes","received_bytes","created_at","expires_at","stuck","streamed_at","callback_url"],"type":"object"},"Usage":{"properties":{"apps":{"additionalProperties":{"additionalProperties":{"$ref":"#/components/schemas/AppMeterUsage"},"type":"object"},"description":"Always lists every app with all five cost meters (storage, cpu, bandwidth, ingress, invalidations).","type":"object"},"meters":{"additionalProperties":{"$ref":"#/components/schemas/MeterUsage"},"type":"object"},"resets_at":{"format":"date-time","type":"string"},"serving":{"$ref":"#/components/schemas/Serving"},"window":{"type":"string"}},"required":["window","resets_at","serving","meters","apps"],"type":"object"},"User":{"properties":{"apps":{"type":"integer"},"created_at":{"format":"date-time","type":"string"},"email":{"nullable":true,"type":"string"},"email_verified_at":{"format":"date-time","nullable":true,"type":"string"},"max_apps":{"type":"integer"},"plan":{"type":"string"},"serving":{"$ref":"#/components/schemas/Serving"},"status":{"enum":["trial","active","suspended","deleting","deleted"],"type":"string"},"user_id":{"type":"string"}},"required":["user_id","status","email","email_verified_at","plan","created_at","apps","max_apps","serving"],"type":"object"}},"securitySchemes":{"BearerAuth":{"description":"`Authorization: Bearer \u003cAPI key\u003e` (`amps_live_…`) or a session token (`amps_sess_…`).","scheme":"bearer","type":"http"}}},"info":{"description":"Agent-first Media Processing and Storage.\nAuthenticate with `Authorization: Bearer \u003cAPI key\u003e` (`amps_live_…`) or a session token (`amps_sess_…`).\nErrors use one envelope (`Error`).\nRetries are safe: `POST /uploads` is idempotent by path (repeat it and you get the same open session back);\nother authenticated POST and DELETE calls accept `Idempotency-Key` (24 h replay, a reused key with a different\nrequest is `422 idempotency_mismatch`).\n","title":"AMPS API","version":"0.1.0"},"openapi":"3.0.3","paths":{"/access/token":{"get":{"description":"Mint a token your server appends to a private file's URLs as ?token= (the file, and every render of it). Scope it to one path, a folder prefix, or the whole app (prefix=/). Mint on your server, never in a browser: the API key must not reach clients. Tokens are signed and cannot be revoked before they expire, so cache one per folder with a long ttl for ordinary private content, and use a short ttl (with redirect_url) only for sensitive links. Trials have no private files (402 feature_not_licensed).","operationId":"GetAccessToken","parameters":[{"description":"One file, e.g. /photos/cat.png. Pass path or prefix, not both.","in":"query","name":"path","schema":{"maxLength":1024,"type":"string"}},{"description":"A folder, e.g. /photos (every file under it); / = the whole app.","in":"query","name":"prefix","schema":{"maxLength":1024,"type":"string"}},{"description":"Seconds until it expires; 0 = never. Default one year.","in":"query","name":"ttl","schema":{"default":31536000,"maximum":315360000,"minimum":0,"type":"integer"}},{"description":"What the token allows, comma-separated: file.download (the file itself), image.operations (renders). Default both.","explode":false,"in":"query","name":"audiences","schema":{"items":{"enum":["file.download","image.operations"],"type":"string"},"type":"array"},"style":"form"},{"description":"https URL on your server; an expired token redirects there (with user-agent-redirect 1) so you can re-mint and bounce back.","in":"query","name":"redirect_url","schema":{"maxLength":2048,"type":"string"}},{"description":"Renders at most this wide (px); 0 = no limit.","in":"query","name":"max_width","schema":{"minimum":0,"type":"integer"}},{"description":"Renders at most this tall (px); 0 = no limit.","in":"query","name":"max_height","schema":{"minimum":0,"type":"integer"}},{"description":"Renders must blur at least this much (blur_N), e.g. for previews; 0 = no requirement.","in":"query","name":"blur_min","schema":{"minimum":0,"type":"integer"}},{"description":"Download file name (Content-Disposition).","in":"query","name":"filename","schema":{"maxLength":255,"type":"string"}},{"description":"With filename: display inline instead of downloading.","in":"query","name":"inline","schema":{"type":"boolean"}},{"description":"Required with a session; a key may only name its own app.","in":"query","name":"app_id","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessToken"}}},"description":"The token and what it allows."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"summary":"Get a serving token for private files","tags":["Access"]}},"/account/claim":{"post":{"description":"Attach an e-mail identity to a trial user (magic link), unlocking sessions and upgrade.","operationId":"ClaimAccount","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Pending"}}},"description":"A claim link was sent."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"summary":"Claim a trial with an e-mail","tags":["Account"]}},"/apps":{"get":{"description":"List the caller's applications.","operationId":"ListApps","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppList"}}},"description":"Applications."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"summary":"List applications","tags":["Applications"]}},"/files":{"get":{"description":"List the direct children of a folder in the app (the app root is /): files as type file, sub-folders as type dir, sorted by path. The listing is storage's own index (WixMP), so a file appears as soon as its upload completed. A key lists its own app; a session must pass app_id.","operationId":"ListFiles","parameters":[{"description":"Folder in the app, e.g. /photos (empty or / = the app root; the leading / is optional). Direct children only.","in":"query","name":"prefix","schema":{"maxLength":1024,"type":"string"}},{"description":"next_cursor of the previous page.","in":"query","name":"cursor","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":200,"minimum":1,"type":"integer"}},{"description":"Required with a session; a key may only name its own app.","in":"query","name":"app_id","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileList"}}},"description":"One page of the folder."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"summary":"List a folder","tags":["Files"]}},"/files/{path}":{"delete":{"description":"Delete a file now, e.g. DELETE /files/photos/cat.png. Storage goes down by its size and one invalidation is charged (rate.purge, invalidations +1): the CDN copy is purged in the background, typically within a minute, at most 15. Do not reuse the path for new content inside that window. A folder is deleted only when it is empty (no files, no open uploads); a non-empty folder is 409. An open upload on the path is 409: wait for it or abort it. A key deletes in its own app; a session must pass app_id.","operationId":"DeleteFile","parameters":[{"description":"Path in the app without its leading /, e.g. photos/cat.png.","in":"path","name":"path","required":true,"schema":{"maxLength":1024,"type":"string"}},{"description":"Required with a session; a key may only name its own app.","in":"query","name":"app_id","schema":{"type":"string"}}],"responses":{"204":{"description":"Deleted."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"summary":"Delete one file or an empty folder","tags":["Files"]},"get":{"description":"One entry of the app by its path, e.g. GET /files/photos/cat.png for /photos/cat.png (slashes are part of the path). A file comes back with its size, hash, access and URLs; a folder comes back as type dir with no URLs. Unknown paths are 404 not_found. A key reads its own app; a session must pass app_id.","operationId":"GetFile","parameters":[{"description":"Path in the app without its leading /, e.g. photos/cat.png. A trailing / is ignored.","in":"path","name":"path","required":true,"schema":{"maxLength":1024,"type":"string"}},{"description":"Required with a session; a key may only name its own app.","in":"query","name":"app_id","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/File"}}},"description":"The file, or the folder as type dir."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"summary":"Get one file","tags":["Files"]}},"/me":{"get":{"description":"Return the caller's user, plan and serving state (usage is GET /usage).","operationId":"GetMe","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}},"description":"The caller."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"summary":"Who am I","tags":["Account"]}},"/register":{"post":{"description":"Start an e-mail login: unknown e-mail gets a registration link, known e-mail a sign-in link; both answer 202.","operationId":"Register","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Pending"}}},"description":"A magic link was sent."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"security":[],"summary":"Start e-mail sign-in or registration","tags":["Account"]}},"/session":{"delete":{"description":"End the current session.","operationId":"DeleteSession","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"204":{"description":"Signed out."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"summary":"Sign out","tags":["Account"]},"post":{"description":"Exchange a magic-link code or an OAuth code for a session. The token is in the body; send it as `Authorization: Bearer amps_sess_…` (the API sets no cookie; the console keeps it server-side).","operationId":"CreateSession","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionResult"}}},"description":"Signed in (session or claim purpose)."},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionResult"}}},"description":"Registered: user, default app and first key (shown once) plus the session."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"security":[],"summary":"Exchange a code for a session","tags":["Account"]}},"/trial":{"post":{"description":"Create an anonymous trial user with a default app and its first key.","operationId":"CreateTrial","requestBody":{"content":{"application/json":{"schema":{"properties":{"name":{"description":"Default app name","maxLength":64,"type":"string"}},"type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrialCreated"}}},"description":"Trial created. The key secret is shown once."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"security":[],"summary":"Create a trial","tags":["Account"]}},"/uploads":{"get":{"description":"List open upload sessions (the reservations that occupy storage quota). A key lists its app's sessions; a session lists every app of the user.","operationId":"ListUploads","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadList"}}},"description":"Open sessions, newest first."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"summary":"List open uploads","tags":["Uploads"]},"post":{"description":"Reserve storage and open an upload session on the Upload Proxy. Idempotent by path (one open session per app path); an Idempotency-Key header is accepted and ignored.","operationId":"CreateUpload","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadSession"}}},"description":"Upload session opened."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"summary":"Open an upload session","tags":["Uploads"]}},"/uploads/{upload_id}":{"delete":{"description":"Abort an upload session and release its reservation. If the bytes already reached storage but the upload never completed (stuck), the stored file is removed too; upload again to retry.","operationId":"AbortUpload","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"204":{"description":"Aborted."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"summary":"Abort an upload","tags":["Uploads"]},"get":{"description":"Check an upload session's progress and state. Read-only: the state changes when storage confirms the file (AMPS's own callback) or the session expires, never because it was read.","operationId":"GetUpload","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadStatus"}}},"description":"Upload status."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"summary":"Upload status","tags":["Uploads"]},"parameters":[{"in":"path","name":"upload_id","required":true,"schema":{"type":"string"}}]},"/usage":{"get":{"operationId":"GetUsage","parameters":[{"description":"Billing window YYYY-MM; default current.","in":"query","name":"window","schema":{"pattern":"^[0-9]{4}-[0-9]{2}$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"}}},"description":"Usage."},"default":{"$ref":"#/components/responses/ErrorResponse"}},"summary":"Usage and limits","tags":["Usage"]}}},"security":[{"BearerAuth":[]}],"servers":[{"url":"https://api.amps.media"}],"tags":[{"description":"Trials, e-mail and Google sign-in, sessions.","name":"Account"},{"name":"Applications"},{"description":"Reserve storage, stream bytes to the Upload Proxy, track and abort sessions.","name":"Uploads"},{"description":"Each app's files, rooted at /: list folders, read one file.","name":"Files"},{"description":"Serving tokens for private files, appended to their URLs as ?token=.","name":"Access"},{"name":"Usage"}]}