1. AI connectors
uploadthefile API documentation
  • Pages
    • Create a page
      POST
    • Update a page in place
      PUT
    • List pages
      GET
    • Get a page
      GET
    • Rename a page
      PATCH
    • Delete a page
      DELETE
    • Unzip & host a page
      POST
    • List a hosted site's files
      GET
    • Apply a batch of file changes
      POST
    • Replace one file
      PUT
    • Delete one file
      DELETE
    • Get page password state
      GET
    • Set page password
      PUT
    • Remove page password
      DELETE
    • Get page expiry
      GET
    • Set page expiry
      PUT
    • Get email-gate config
      GET
    • Configure email-gate
      PUT
    • Disable email-gate
      DELETE
    • List or export captured emails
      GET
    • Erase captured emails
      DELETE
    • Get page display mode
      GET
    • Set page display mode
      PUT
    • Get PDF chat availability
      GET
    • Enable PDF chat
      PUT
    • Disable PDF chat
      DELETE
    • Bulk delete pages
      POST
  • Short links
    • List short links
    • Create a short link
    • Bulk update short links
    • Get a short link
    • Update a short link
    • Delete a short link
    • Get link click history
  • Domains
    • List custom domains
    • Connect a custom domain
    • Search domain availability
    • Rebind a domain to a different page
    • Disconnect a domain
  • Account
    • Get account, limits, and usage
  • Team
    • List team members
    • Invite a team member
    • Revoke a team member
    • Change a team member's role
    • Resend a pending invite
  • AI connectors
    • Authorization server metadata
      GET
    • Protected resource metadata (MCP endpoint)
      GET
    • Protected resource metadata (RFC 9728 §3.1 path-insertion form)
      GET
    • Register an OAuth client
      POST
    • Authorization endpoint (consent screen)
      GET
    • Consent decision (internal, not a public integration point)
      POST
    • Token endpoint
      POST
    • Revocation endpoint
      POST
    • MCP endpoint
      POST
  • Subjects
    • List subjects
    • Create or get a subject
    • Get a subject
    • Update a subject
    • Delete (tombstone) a subject
  • Subject tokens
    • Mint a subject token
    • Revoke a subject's tokens
  • Sites
    • List a subject's sites
    • Create a site for a subject
    • Get a site
    • Apply a batch of file changes
    • Delete a site
    • List a site's files
    • Read one file's content
  • Usage
    • Per-subject usage for a period
  • Webhooks
    • List webhook endpoints
    • Register a webhook endpoint
    • Get a webhook endpoint
    • Update a webhook endpoint
    • Delete a webhook endpoint
    • Rotate an endpoint's signing secret
    • List deliveries (the delivery log)
    • Replay a delivery
    • Poll event history (no endpoint required)
  • Schemas
    • UploadCreateForm
    • PlatformSubject
    • UploadUpdateForm
    • SubjectCreateRequest
    • SubdomainName
    • SubjectPatchRequest
    • RenamePageRequest
    • SubjectMintRequest
    • CreateLinkRequest
    • SubjectEnvelope
    • UpdateLinkRequest
    • SubjectListEnvelope
    • BulkDeletePagesRequest
    • SubjectDeleteEnvelope
    • BulkLinkActionRequest
    • SubjectMintEnvelope
    • ClickPoint
    • SubjectRevokeEnvelope
    • DisplayMode
    • Site
    • SetDisplayModeRequest
    • SiteCreateRequest
    • SetPasswordRequest
    • SitePatchRequest
    • SetEmailGateRequest
    • SiteFile
    • EmailCapture
    • SiteEnvelope
    • ConnectDomainRequest
    • SiteListEnvelope
    • RebindDomainRequest
    • SitePatchEnvelope
    • DomainConnection
    • SiteDeleteEnvelope
    • SiteFilesEnvelope
    • DomainSearchResult
    • UsageSubject
    • SiteFileContentEnvelope
    • LinkCode
    • UsageSubjectsEnvelope
    • ExpiryOption
    • WebhookEventType
    • ApiPage
    • WebhookEndpoint
    • ShortLink
    • WebhookEndpointCreateRequest
    • AccountInfo
    • WebhookEndpointPatchRequest
    • TeamMember
    • WebhookEndpointEnvelope
    • SeatUsage
    • WebhookEndpointSecretEnvelope
    • InviteMemberRequest
    • WebhookEndpointListEnvelope
    • UpdateMemberRoleRequest
    • WebhookEndpointDeleteEnvelope
    • ResendCooldownError
    • WebhookDelivery
    • UploadResult
    • WebhookDeliveryListEnvelope
    • HostResult
    • WebhookReplayEnvelope
    • DeleteResult
    • WebhookEvent
    • UpgradeNudge
    • WebhookEventListEnvelope
    • UploadResultEnvelope
    • Error
    • PageEnvelope
    • PagesListEnvelope
    • HostEnvelope
    • DeleteEnvelope
    • ProjectFile
    • LinkEnvelope
    • ProjectFilesEnvelope
    • LinksListEnvelope
    • AccountEnvelope
    • TeamMembersEnvelope
    • TeamMemberEnvelope
    • RevokeMemberEnvelope
    • BulkAffectedEnvelope
    • BulkDeletedEnvelope
    • PagePasswordStateEnvelope
    • ClickSeriesEnvelope
    • PagePasswordResultEnvelope
    • EmailGateStateEnvelope
    • EmailGateUpdatedEnvelope
    • EmailGateDisabledEnvelope
    • CapturesEnvelope
    • DisplayModeStateEnvelope
    • DisplayModeResultEnvelope
    • DeleteCapturesRequest
    • CapturesDeletedEnvelope
    • DomainConnectionEnvelope
    • DomainDeletedEnvelope
    • ChatAvailabilityEnvelope
    • DomainSearchEnvelope
    • DomainsListEnvelope
    • OAuthError
    • OAuthAuthorizationServerMetadata
    • OAuthProtectedResourceMetadata
    • OAuthClientRegistrationRequest
    • OAuthClientRegistrationResponse
    • OAuthTokenRequest
    • OAuthTokenResponse
  1. AI connectors

Authorization endpoint (consent screen)

GET
/oauth/authorize
RFC 6749 §4.1.1 authorization endpoint: this is what an OAuth client
redirects the user's browser to. Not a JSON API: it renders an HTML
page.
If client_id or redirect_uri can't be verified against a
registered client, it renders an inline error page directly (there
is nowhere safe to redirect to).
Otherwise, if the visitor isn't signed in to upload.tf, it sends them
to sign in first, then back here.
Once signed in, it renders a consent screen naming the client and
the scopes it's requesting. The visitor's Allow/Deny decision is
submitted via a same-origin form POST (not a public API, see
POST /api/oauth/authorize below), which redirects the browser back
to redirect_uri with either ?code=…&state=… (RFC 6749 §4.1.2) or
?error=…&error_description=…&state=… (§4.1.2.1).
If the signed-in account has not confirmed its email address, the
consent screen explains that instead of offering Allow/Deny. No
authorization code is issued until the address is confirmed.
PKCE (code_challenge + code_challenge_method=S256) is mandatory:
plain is rejected outright, and a request missing PKCE fields
never reaches a consent screen.

Request

Authorization
API Key
Add parameter in header
x-api-key
Example:
x-api-key: ********************
or
Bearer Token
Provide your bearer token in the
Authorization
header when making requests to protected resources.
Example:
Authorization: Bearer ********************
or
Query Params

Responses

🟢200OK
text/html
Consent screen, or an inline error page when client_id was absent, or client_id/redirect_uri could not be verified.
Bodytext/html

🔵302
🔵303
Request Request Example
Shell
JavaScript
Java
Swift
curl --location 'https://upload.tf/api/v1/oauth/authorize?client_id=undefined&redirect_uri=undefined&response_type=undefined&scope=undefined&code_challenge=undefined&code_challenge_method=undefined&state=undefined&resource=undefined' \
--header 'x-api-key: <api-key>'
Response Response Example
{}
Modified at 2026-08-18 09:08:46
Previous
Register an OAuth client
Next
Consent decision (internal, not a public integration point)
Built with