{"openapi":"3.1.0","info":{"title":"Put It Online API","version":"1.0.0","description":"Put files and AI-made web pages online as short links. Anonymous calls create 7-day links and return a manage token; an API key (Authorization: Bearer pio_…) or OAuth token connects your account. Every upload passes the same safety checks as the website.","contact":{"url":"https://putit.online/connect"}},"servers":[{"url":"https://putit.online/api/v1"}],"tags":[{"name":"Uploads"},{"name":"Links"},{"name":"Paid plans"},{"name":"Account"}],"paths":{"/files":{"post":{"operationId":"upload_file","summary":"Upload a file","description":"Put a file online (text, or base64 for binary) and get a short link. Status \"checking\"/\"publishing\" means not live yet (poll get_link before sharing); \"unpublished\" means publishing needs a plan (checkout_url).","tags":["Uploads"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":200,"description":"File name including extension, e.g. \"report.pdf\" or \"index.html\". The extension decides how the link renders."},"content":{"type":"string","description":"File content: plain text, or base64 when encoding is \"base64\" (use base64 for any binary file)."},"encoding":{"default":"text","description":"How `content` is encoded.","type":"string","enum":["text","base64"]},"mime_type":{"description":"Optional MIME type; used to add a missing file extension.","type":"string","maxLength":100},"slug":{"type":"string","minLength":3,"maxLength":40,"pattern":"^[a-zA-Z0-9-]+$","description":"Subscribers only: choose the link name (3-40 letters, digits, dashes)."},"password":{"type":"string","minLength":4,"maxLength":200,"description":"Subscribers only: visitors must enter this password to open the link."}},"required":["filename","content"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","description":"The public link to share."},"status":{"type":"string","enum":["awaiting_upload","checking","live","in_review","unpublished","publishing","removed","expired","deleted"],"description":"checking = not live yet (poll get_link); live = shareable; unpublished = not published yet; the person needs to subscribe to publish it (checkout_url); publishing = will be live soon (poll get_link); in_review = not available right now; removed = removed by moderation (see removed_reason, appeal_url)."},"status_message":{"type":"string"},"checkout_url":{"description":"Only with status unpublished: where the uploader subscribes to publish this link.","type":"string"},"removed_reason":{"description":"Only with status removed: why, in plain words.","type":"string"},"removed_category":{"description":"Only with status removed: the moderation category (malware, phishing, explicit, …); null when not disclosed.","type":["string","null"]},"appeal_url":{"description":"Only with status removed: mailto link to appeal to abuse@putit.online.","type":"string"},"kind":{"type":"string","description":"html | site | file | bundle | pending"},"title":{"type":"string"},"size_bytes":{"type":"number"},"file_count":{"type":"number"},"views":{"description":"View count. null when the link owner is on Free or the link has no account: view counts require a paid plan (see /pricing).","type":["number","null"]},"permanent":{"type":"boolean"},"password_protected":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"ISO time the link stops working; null for permanent links."},"manage_url":{"description":"Private page to manage/delete the link. Only returned on creation; keep it secret.","type":"string"},"manage_token":{"description":"Secret token for get_link/delete_link without an account. Only returned on creation.","type":"string"}},"required":["slug","url","status","status_message","kind","title","size_bytes","file_count","views","permanent","password_protected","created_at","expires_at"],"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Authorization required or token invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"402":{"description":"Subscription required (see upgrade_url)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Blocked: VPN/proxy, banned uploader or missing scope","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"422":{"description":"Rejected by the safety check","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}},"security":[{},{"bearerAuth":[]},{"oauth2":["links:read","links:write","account:read"]}]}},"/upload-sessions":{"post":{"operationId":"create_upload_session","summary":"Get a one-time PUT URL for a large file","description":"Reserves a link and returns upload_url. PUT the raw bytes there, then poll get_link.","tags":["Uploads"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":200,"description":"Name of the file that will be uploaded, including extension."},"size_bytes":{"description":"Expected size, checked against your plan limit up front.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"slug":{"type":"string","minLength":3,"maxLength":40,"pattern":"^[a-zA-Z0-9-]+$","description":"Subscribers only: choose the link name (3-40 letters, digits, dashes)."},"password":{"type":"string","minLength":4,"maxLength":200,"description":"Subscribers only: visitors must enter this password to open the link."}},"required":["filename"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"upload_url":{"type":"string","description":"One-time URL: PUT the raw file bytes here (no auth header needed)."},"method":{"type":"string","const":"PUT"},"headers":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"max_bytes":{"type":"number"},"expires_at":{"type":"string"},"complete_url":{"description":"When present: POST here (no body) after the PUT finishes. The curl command already does it.","type":"string"},"curl":{"type":"string","description":"Ready-to-run command for the user."},"link":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","description":"The public link to share."},"status":{"type":"string","enum":["awaiting_upload","checking","live","in_review","unpublished","publishing","removed","expired","deleted"],"description":"checking = not live yet (poll get_link); live = shareable; unpublished = not published yet; the person needs to subscribe to publish it (checkout_url); publishing = will be live soon (poll get_link); in_review = not available right now; removed = removed by moderation (see removed_reason, appeal_url)."},"status_message":{"type":"string"},"checkout_url":{"description":"Only with status unpublished: where the uploader subscribes to publish this link.","type":"string"},"removed_reason":{"description":"Only with status removed: why, in plain words.","type":"string"},"removed_category":{"description":"Only with status removed: the moderation category (malware, phishing, explicit, …); null when not disclosed.","type":["string","null"]},"appeal_url":{"description":"Only with status removed: mailto link to appeal to abuse@putit.online.","type":"string"},"kind":{"type":"string","description":"html | site | file | bundle | pending"},"title":{"type":"string"},"size_bytes":{"type":"number"},"file_count":{"type":"number"},"views":{"description":"View count. null when the link owner is on Free or the link has no account: view counts require a paid plan (see /pricing).","type":["number","null"]},"permanent":{"type":"boolean"},"password_protected":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"ISO time the link stops working; null for permanent links."},"manage_url":{"description":"Private page to manage/delete the link. Only returned on creation; keep it secret.","type":"string"},"manage_token":{"description":"Secret token for get_link/delete_link without an account. Only returned on creation.","type":"string"}},"required":["slug","url","status","status_message","kind","title","size_bytes","file_count","views","permanent","password_protected","created_at","expires_at"],"additionalProperties":false}},"required":["upload_url","method","headers","max_bytes","expires_at","curl","link"],"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Authorization required or token invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"402":{"description":"Subscription required (see upgrade_url)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Blocked: VPN/proxy, banned uploader or missing scope","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"422":{"description":"Rejected by the safety check","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}},"security":[{},{"bearerAuth":[]},{"oauth2":["links:read","links:write","account:read"]}]}},"/sites":{"post":{"operationId":"publish_site","summary":"Publish a web page or static site","description":"Put a page or small site online from a map of path to content. index.html is required.","tags":["Uploads"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"files":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Map of path -> text content, e.g. {\"index.html\": \"<!doctype html>…\", \"style.css\": \"body{…}\"}. Must include index.html."},"base64_files":{"description":"Optional map of path -> base64 content for binary assets such as images.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"title":{"description":"Name for the site (shown in the dashboard).","type":"string","maxLength":80},"slug":{"type":"string","minLength":3,"maxLength":40,"pattern":"^[a-zA-Z0-9-]+$","description":"Subscribers only: choose the link name (3-40 letters, digits, dashes)."},"password":{"type":"string","minLength":4,"maxLength":200,"description":"Subscribers only: visitors must enter this password to open the link."}},"required":["files"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","description":"The public link to share."},"status":{"type":"string","enum":["awaiting_upload","checking","live","in_review","unpublished","publishing","removed","expired","deleted"],"description":"checking = not live yet (poll get_link); live = shareable; unpublished = not published yet; the person needs to subscribe to publish it (checkout_url); publishing = will be live soon (poll get_link); in_review = not available right now; removed = removed by moderation (see removed_reason, appeal_url)."},"status_message":{"type":"string"},"checkout_url":{"description":"Only with status unpublished: where the uploader subscribes to publish this link.","type":"string"},"removed_reason":{"description":"Only with status removed: why, in plain words.","type":"string"},"removed_category":{"description":"Only with status removed: the moderation category (malware, phishing, explicit, …); null when not disclosed.","type":["string","null"]},"appeal_url":{"description":"Only with status removed: mailto link to appeal to abuse@putit.online.","type":"string"},"kind":{"type":"string","description":"html | site | file | bundle | pending"},"title":{"type":"string"},"size_bytes":{"type":"number"},"file_count":{"type":"number"},"views":{"description":"View count. null when the link owner is on Free or the link has no account: view counts require a paid plan (see /pricing).","type":["number","null"]},"permanent":{"type":"boolean"},"password_protected":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"ISO time the link stops working; null for permanent links."},"manage_url":{"description":"Private page to manage/delete the link. Only returned on creation; keep it secret.","type":"string"},"manage_token":{"description":"Secret token for get_link/delete_link without an account. Only returned on creation.","type":"string"}},"required":["slug","url","status","status_message","kind","title","size_bytes","file_count","views","permanent","password_protected","created_at","expires_at"],"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Authorization required or token invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"402":{"description":"Subscription required (see upgrade_url)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Blocked: VPN/proxy, banned uploader or missing scope","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"422":{"description":"Rejected by the safety check","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}},"security":[{},{"bearerAuth":[]},{"oauth2":["links:read","links:write","account:read"]}]}},"/links":{"get":{"operationId":"list_links","summary":"List my links","description":"Links in the connected account, newest first.","tags":["Links"],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"offset","in":"query","required":false,"schema":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"links":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","description":"The public link to share."},"status":{"type":"string","enum":["awaiting_upload","checking","live","in_review","unpublished","publishing","removed","expired","deleted"],"description":"checking = not live yet (poll get_link); live = shareable; unpublished = not published yet; the person needs to subscribe to publish it (checkout_url); publishing = will be live soon (poll get_link); in_review = not available right now; removed = removed by moderation (see removed_reason, appeal_url)."},"status_message":{"type":"string"},"checkout_url":{"description":"Only with status unpublished: where the uploader subscribes to publish this link.","type":"string"},"removed_reason":{"description":"Only with status removed: why, in plain words.","type":"string"},"removed_category":{"description":"Only with status removed: the moderation category (malware, phishing, explicit, …); null when not disclosed.","type":["string","null"]},"appeal_url":{"description":"Only with status removed: mailto link to appeal to abuse@putit.online.","type":"string"},"kind":{"type":"string","description":"html | site | file | bundle | pending"},"title":{"type":"string"},"size_bytes":{"type":"number"},"file_count":{"type":"number"},"views":{"description":"View count. null when the link owner is on Free or the link has no account: view counts require a paid plan (see /pricing).","type":["number","null"]},"permanent":{"type":"boolean"},"password_protected":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"ISO time the link stops working; null for permanent links."},"manage_url":{"description":"Private page to manage/delete the link. Only returned on creation; keep it secret.","type":"string"},"manage_token":{"description":"Secret token for get_link/delete_link without an account. Only returned on creation.","type":"string"}},"required":["slug","url","status","status_message","kind","title","size_bytes","file_count","views","permanent","password_protected","created_at","expires_at"],"additionalProperties":false}},"total":{"type":"number"},"next_offset":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["links","total","next_offset"],"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Authorization required or token invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"402":{"description":"Subscription required (see upgrade_url)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Blocked: VPN/proxy, banned uploader or missing scope","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"422":{"description":"Rejected by the safety check","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}},"security":[{"bearerAuth":[]},{"oauth2":["links:read","links:write","account:read"]}]}},"/links/{slug}":{"get":{"operationId":"get_link","summary":"Get link status","description":"Status (live, checking, publishing, unpublished + checkout_url, in_review, removed + removed_reason/appeal_url, expired, awaiting_upload), expiry and views. Anonymous callers send the manage token in X-Manage-Token.","tags":["Links"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Link name, e.g. k3x9pq"},{"name":"X-Manage-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Manage token from creation (anonymous callers)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","description":"The public link to share."},"status":{"type":"string","enum":["awaiting_upload","checking","live","in_review","unpublished","publishing","removed","expired","deleted"],"description":"checking = not live yet (poll get_link); live = shareable; unpublished = not published yet; the person needs to subscribe to publish it (checkout_url); publishing = will be live soon (poll get_link); in_review = not available right now; removed = removed by moderation (see removed_reason, appeal_url)."},"status_message":{"type":"string"},"checkout_url":{"description":"Only with status unpublished: where the uploader subscribes to publish this link.","type":"string"},"removed_reason":{"description":"Only with status removed: why, in plain words.","type":"string"},"removed_category":{"description":"Only with status removed: the moderation category (malware, phishing, explicit, …); null when not disclosed.","type":["string","null"]},"appeal_url":{"description":"Only with status removed: mailto link to appeal to abuse@putit.online.","type":"string"},"kind":{"type":"string","description":"html | site | file | bundle | pending"},"title":{"type":"string"},"size_bytes":{"type":"number"},"file_count":{"type":"number"},"views":{"description":"View count. null when the link owner is on Free or the link has no account: view counts require a paid plan (see /pricing).","type":["number","null"]},"permanent":{"type":"boolean"},"password_protected":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"ISO time the link stops working; null for permanent links."},"manage_url":{"description":"Private page to manage/delete the link. Only returned on creation; keep it secret.","type":"string"},"manage_token":{"description":"Secret token for get_link/delete_link without an account. Only returned on creation.","type":"string"}},"required":["slug","url","status","status_message","kind","title","size_bytes","file_count","views","permanent","password_protected","created_at","expires_at"],"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Authorization required or token invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"402":{"description":"Subscription required (see upgrade_url)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Blocked: VPN/proxy, banned uploader or missing scope","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"422":{"description":"Rejected by the safety check","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}},"security":[{},{"bearerAuth":[]},{"oauth2":["links:read","links:write","account:read"]}]},"delete":{"operationId":"delete_link","summary":"Delete a link","description":"Permanently delete a link and its files. Owners or holders of the manage token (X-Manage-Token).","tags":["Links"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Link name, e.g. k3x9pq"},{"name":"X-Manage-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Manage token from creation (anonymous callers)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"deleted":{"type":"boolean"}},"required":["slug","deleted"],"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Authorization required or token invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"402":{"description":"Subscription required (see upgrade_url)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Blocked: VPN/proxy, banned uploader or missing scope","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"422":{"description":"Rejected by the safety check","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}},"security":[{},{"bearerAuth":[]},{"oauth2":["links:read","links:write","account:read"]}]}},"/links/{slug}/password":{"put":{"operationId":"set_password","summary":"Set or remove a link password","description":"Paid plans: protect a link with a password, or send null to remove it.","tags":["Paid plans"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Link name, e.g. k3x9pq"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"anyOf":[{"type":"string","minLength":4,"maxLength":200,"description":"Subscribers only: visitors must enter this password to open the link."},{"type":"null"}],"description":"New password, or null to remove protection."}},"required":["password"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","description":"The public link to share."},"status":{"type":"string","enum":["awaiting_upload","checking","live","in_review","unpublished","publishing","removed","expired","deleted"],"description":"checking = not live yet (poll get_link); live = shareable; unpublished = not published yet; the person needs to subscribe to publish it (checkout_url); publishing = will be live soon (poll get_link); in_review = not available right now; removed = removed by moderation (see removed_reason, appeal_url)."},"status_message":{"type":"string"},"checkout_url":{"description":"Only with status unpublished: where the uploader subscribes to publish this link.","type":"string"},"removed_reason":{"description":"Only with status removed: why, in plain words.","type":"string"},"removed_category":{"description":"Only with status removed: the moderation category (malware, phishing, explicit, …); null when not disclosed.","type":["string","null"]},"appeal_url":{"description":"Only with status removed: mailto link to appeal to abuse@putit.online.","type":"string"},"kind":{"type":"string","description":"html | site | file | bundle | pending"},"title":{"type":"string"},"size_bytes":{"type":"number"},"file_count":{"type":"number"},"views":{"description":"View count. null when the link owner is on Free or the link has no account: view counts require a paid plan (see /pricing).","type":["number","null"]},"permanent":{"type":"boolean"},"password_protected":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"ISO time the link stops working; null for permanent links."},"manage_url":{"description":"Private page to manage/delete the link. Only returned on creation; keep it secret.","type":"string"},"manage_token":{"description":"Secret token for get_link/delete_link without an account. Only returned on creation.","type":"string"}},"required":["slug","url","status","status_message","kind","title","size_bytes","file_count","views","permanent","password_protected","created_at","expires_at"],"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Authorization required or token invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"402":{"description":"Subscription required (see upgrade_url)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Blocked: VPN/proxy, banned uploader or missing scope","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"422":{"description":"Rejected by the safety check","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}},"security":[{"bearerAuth":[]},{"oauth2":["links:read","links:write","account:read"]}]}},"/links/{slug}/permanent":{"post":{"operationId":"make_permanent","summary":"Keep a link permanently","description":"Paid plans: make a 7-day link permanent (uses a permanent slot).","tags":["Paid plans"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Link name, e.g. k3x9pq"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","description":"The public link to share."},"status":{"type":"string","enum":["awaiting_upload","checking","live","in_review","unpublished","publishing","removed","expired","deleted"],"description":"checking = not live yet (poll get_link); live = shareable; unpublished = not published yet; the person needs to subscribe to publish it (checkout_url); publishing = will be live soon (poll get_link); in_review = not available right now; removed = removed by moderation (see removed_reason, appeal_url)."},"status_message":{"type":"string"},"checkout_url":{"description":"Only with status unpublished: where the uploader subscribes to publish this link.","type":"string"},"removed_reason":{"description":"Only with status removed: why, in plain words.","type":"string"},"removed_category":{"description":"Only with status removed: the moderation category (malware, phishing, explicit, …); null when not disclosed.","type":["string","null"]},"appeal_url":{"description":"Only with status removed: mailto link to appeal to abuse@putit.online.","type":"string"},"kind":{"type":"string","description":"html | site | file | bundle | pending"},"title":{"type":"string"},"size_bytes":{"type":"number"},"file_count":{"type":"number"},"views":{"description":"View count. null when the link owner is on Free or the link has no account: view counts require a paid plan (see /pricing).","type":["number","null"]},"permanent":{"type":"boolean"},"password_protected":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"ISO time the link stops working; null for permanent links."},"manage_url":{"description":"Private page to manage/delete the link. Only returned on creation; keep it secret.","type":"string"},"manage_token":{"description":"Secret token for get_link/delete_link without an account. Only returned on creation.","type":"string"}},"required":["slug","url","status","status_message","kind","title","size_bytes","file_count","views","permanent","password_protected","created_at","expires_at"],"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Authorization required or token invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"402":{"description":"Subscription required (see upgrade_url)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Blocked: VPN/proxy, banned uploader or missing scope","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"422":{"description":"Rejected by the safety check","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}},"security":[{"bearerAuth":[]},{"oauth2":["links:read","links:write","account:read"]}]}},"/links/{slug}/extend":{"post":{"operationId":"extend","summary":"Extend a link","description":"Paid plans: restart a 7-day link's clock.","tags":["Paid plans"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Link name, e.g. k3x9pq"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","description":"The public link to share."},"status":{"type":"string","enum":["awaiting_upload","checking","live","in_review","unpublished","publishing","removed","expired","deleted"],"description":"checking = not live yet (poll get_link); live = shareable; unpublished = not published yet; the person needs to subscribe to publish it (checkout_url); publishing = will be live soon (poll get_link); in_review = not available right now; removed = removed by moderation (see removed_reason, appeal_url)."},"status_message":{"type":"string"},"checkout_url":{"description":"Only with status unpublished: where the uploader subscribes to publish this link.","type":"string"},"removed_reason":{"description":"Only with status removed: why, in plain words.","type":"string"},"removed_category":{"description":"Only with status removed: the moderation category (malware, phishing, explicit, …); null when not disclosed.","type":["string","null"]},"appeal_url":{"description":"Only with status removed: mailto link to appeal to abuse@putit.online.","type":"string"},"kind":{"type":"string","description":"html | site | file | bundle | pending"},"title":{"type":"string"},"size_bytes":{"type":"number"},"file_count":{"type":"number"},"views":{"description":"View count. null when the link owner is on Free or the link has no account: view counts require a paid plan (see /pricing).","type":["number","null"]},"permanent":{"type":"boolean"},"password_protected":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"ISO time the link stops working; null for permanent links."},"manage_url":{"description":"Private page to manage/delete the link. Only returned on creation; keep it secret.","type":"string"},"manage_token":{"description":"Secret token for get_link/delete_link without an account. Only returned on creation.","type":"string"}},"required":["slug","url","status","status_message","kind","title","size_bytes","file_count","views","permanent","password_protected","created_at","expires_at"],"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Authorization required or token invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"402":{"description":"Subscription required (see upgrade_url)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Blocked: VPN/proxy, banned uploader or missing scope","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"422":{"description":"Rejected by the safety check","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}},"security":[{"bearerAuth":[]},{"oauth2":["links:read","links:write","account:read"]}]}},"/account":{"get":{"operationId":"get_account","summary":"Get my plan and usage","description":"Plan, permanent slots used and limits for the connected account.","tags":["Account"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"plan":{"type":"string"},"plan_name":{"type":"string"},"subscribed":{"type":"boolean"},"permanent_links":{"type":"object","properties":{"used":{"type":"number"},"limit":{"type":"number"}},"required":["used","limit"],"additionalProperties":false},"total_links":{"type":"number"},"max_upload_bytes":{"type":"number"},"free_link_days":{"type":"number"},"features":{"type":"object","properties":{"custom_slugs":{"type":"boolean"},"password_protection":{"type":"boolean"},"permanent_links":{"type":"boolean"},"view_counts":{"type":"boolean"},"replace_files":{"type":"boolean"}},"required":["custom_slugs","password_protection","permanent_links","view_counts","replace_files"],"additionalProperties":false},"upgrade_url":{"type":"string"},"dashboard_url":{"type":"string"}},"required":["email","plan","plan_name","subscribed","permanent_links","total_links","max_upload_bytes","free_link_days","features","upgrade_url","dashboard_url"],"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Authorization required or token invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"402":{"description":"Subscription required (see upgrade_url)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Blocked: VPN/proxy, banned uploader or missing scope","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"422":{"description":"Rejected by the safety check","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"e.g. auth_required, subscription_required, rate_limited, vpn_blocked, uploader_banned, upload_rejected, url_blocked, too_large"},"message":{"type":"string"},"upgrade_url":{"type":"string"},"retry_after_sec":{"type":"number"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}},"security":[{"bearerAuth":[]},{"oauth2":["links:read","links:write","account:read"]}]}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Personal API key from /connect (pio_…) or an OAuth access token"},"oauth2":{"type":"oauth2","flows":{"authorizationCode":{"authorizationUrl":"https://putit.online/oauth/authorize","tokenUrl":"https://putit.online/oauth/token","refreshUrl":"https://putit.online/oauth/token","scopes":{"links:read":"See your links, their status and view counts","links:write":"Upload files and publish pages to your account, and change or delete your links","account:read":"See your plan and how many permanent links you have used"}}}}}}}