CONNECT YOUR AI

Let ChatGPT or Claude publish pages for you

Connect once and your AI can publish an HTML file as a shareable page, update it later with the same link, add a poll or a form, and read the comments that come back. No keys to copy. It signs in with your FileShare Pro account, and you can disconnect it any time.

ChatGPT
Paid ChatGPT plans
  1. 1Open Settings → Connectors. If there is no Create button, turn on Developer mode under Advanced.
  2. 2Choose Create, name it FileShare Pro, and use https://fileproapp.com/mcp as the server URL. Leave authentication on OAuth.
  3. 3Save, sign in when it sends you to FileShare Pro, press Allow. Enable the connector in a chat and ask it to publish something.
Claude
claude.ai and the Claude apps
  1. 1Open Settings → Connectors → Add custom connector.
  2. 2Name it FileShare Pro and paste https://fileproapp.com/mcp.
  3. 3Press Add, then Connect, sign in, press Allow. Done.
Claude Code
In the terminal
  1. 1Run claude mcp add --transport http filesharepro https://fileproapp.com/mcp
  2. 2Type /mcp, pick filesharepro, sign in in the browser, press Allow.
  3. 3Ask it to publish a file. It hands you the link.
Cursor, Windsurf, anything with MCP
Any tool that speaks the Model Context Protocol
  1. 1In the tool's MCP settings add a remote or HTTP server.
  2. 2Use https://fileproapp.com/mcp. It will open a sign-in.
  3. 3If the tool cannot sign in, create an API token in the app (Connect → Advanced) and send it as a Bearer token.
Then just ask
“Publish this as a page and give me the link.”“Update my Q3 report with this version, same link.”“Add a poll to my page: pizza or tacos? Show results under it.”“Show me the responses to my signup form.”“Password-protect the pricing page; expire it Friday.”“List the comments on my proposal and approve Dana's.”

Forms and polls with no code

Any page you publish can collect responses. Give a form one attribute and the page does the rest; add an element with data-fsp-results to show a poll's tally. Responses are visible only to you and the people on the file, in the document view and as CSV. The world can only submit, one bounded row at a time; a poll exposes counts for the one field you declared, never rows.

<form data-fsp-form="lunch" data-fsp-poll="choice" data-fsp-thanks="Thanks for voting!">
  <label><input type="radio" name="choice" value="Pizza"> Pizza</label>
  <label><input type="radio" name="choice" value="Tacos"> Tacos</label>
  <button>Vote</button>
</form>
<div data-fsp-results="choice" data-fsp-form="lunch"></div>
FOR DEVELOPERS

The REST API

Everything the app can do, a script can do. The CLI and both MCP servers are thin wrappers over exactly these endpoints.

Authentication

Create a token in the app under Connect → Advanced and send it as a bearer credential. Tokens start with fsp_ and carry your full account access. The only thing a token cannot do is manage tokens. Connected apps get the same kind of token through OAuth 2.1 (discovery at /.well-known/oauth-authorization-server, dynamic registration, PKCE).

curl https://fileproapp.com/api/me \
  -H "Authorization: Bearer fsp_your_token_here"

Uploading a file

Three steps: declare the file, PUT the bytes to the presigned URL, confirm. A file that is never confirmed is never served. Optional workspace_id and folder_id put it somewhere on the way in.

# 1. Declare — returns file_id, slug and a presigned upload_url
curl -X POST https://fileproapp.com/api/files \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"file_name": "page.html", "size_bytes": 4096, "content_type": "text/html"}'

# 2. Upload the bytes (no auth header — the URL itself is the credential)
curl -X PUT "$UPLOAD_URL" -H "Content-Type: text/html" --data-binary @page.html

# 3. Confirm — the share link goes live
curl -X POST https://fileproapp.com/api/files/$FILE_ID/complete -H "Authorization: Bearer $TOKEN"

Files

GET/api/filesYour files, workspace files, and files shared with you
GET/api/files/:idOne file, with your role on it
POST/api/filesBegin an upload
POST/api/files/:id/completeFinalize an upload or a replace
PATCH/api/files/:idTitle, visibility, expiry, password, comments, forms, workspace, folder, tags
POST/api/files/:id/replaceNew content, same link; the old content becomes a version
GET/api/files/:id/statsView timeline for the plan's window
GET/api/files/:id/membersPeople on the file
POST/api/files/:id/membersAdd someone by email, as commenter or editor
GET/api/files/:id/access-requestsWho is waiting to be let in
POST/api/access-requests/:id/approveLet them in (body: role); /decline says no
GET/api/files/:id/submissionsForm responses (add ?format=csv)
DELETE/api/files/:idDelete; the link 404s immediately

PATCH accepts visibility (public · expiring · disabled), expires_at, password (empty string removes it), comments_enabled, comments_visibility (approval · open), suggestions_enabled, forms_enabled.

disabled turns the public link off and leaves the file open to the owner and to everyone added under /members. A password is a way in for people who were never added; those who were get in without it. For either, the file list returns a short-lived k — append it to the raw URL to load the page bytes.

The document

GET/api/doc/:slugEverything the document view shows: comments, suggestions, versions, forks
POST/api/doc/:id/publishApply block changes (or file a suggestion, by role)
POST/api/doc/:id/versions/:n/restoreUndo to a version
POST/api/doc/:id/copyDuplicate privately, or fork
POST/api/doc/:id/pullTake a fork's page as your next version
POST/api/doc/:id/unlockTrade a link password for an access key (k)
POST/api/doc/:id/request-accessAsk the owner to be let in (sign-in required)

Comments

GET/api/comments?file_id=…Thread for a file
POST/api/commentsReply as yourself, or as a guest with a name
PATCH/api/comments/:id/approvePublish a held guest comment
DELETE/api/comments/:idRemove a comment on your file
GET/api/reviewEverything held across your files

Forms

POST/api/forms/:fileId/submitPublic, any origin: one row, up to 10 fields, 2 KB
GET/api/forms/:fileId/counts?form=&field=Public tally for a declared poll field

Media assets and mini-sites

GET/api/assetsYour assets, each with a CDN URL
POST/api/assetsBegin an upload (same declare → PUT → complete flow)
GET/api/sitesYour mini-sites
POST/api/sitesCreate one with a starter page
PATCH/api/sites/:idSave the draft: pages plus shared nav, header and footer
POST/api/sites/:id/publishCompose and publish to a live URL

MCP tools

The hosted server at https://fileproapp.com/mcp exposes: upload_file, list_files, get_file, replace_file, delete_file, set_link, move_file, list_workspaces, file_stats, list_comments, review_queue, approve_comment, list_submissions, poll_results, account_info. Content travels as text, up to 10 MB. The fsp CLI runs the same tools locally over stdio (fsp mcp).

Conventions

  • Errors are JSON: {"error": "what went wrong"} with a meaningful status. A 403 with "upgrade": true means the plan, not the request.
  • Writes are rate-limited per account. Back off on 429; the window is about a minute.
  • IDs are UUIDs. Share links are fileproapp.com/v/<slug>; raw content is on r.fileproapp.com. The API answers on fileproapp.com and file-share-pro.com.
  • The API and connected apps are open to every beta account; after beta they are Basic and up.

Connect in two minutes

Sign up free, open Connect, pick your tool.

Get early access