ONLYOFFICE Setup
Three quick steps. We host the ONLYOFFICE Docs server — you just plug in.
1. Enable the engine.
WebOffice is a broker: our ONLYOFFICE Docs server runs on our side, so you don't need to host one. One click activates the Word-compatible engine on your account.
2. Create API keys for your apps.
Create one key per app — up to 20 active. Every import, save, and export is billed to the key owner. Leaked? Revoke just that key.
No API keys yet. Create your first one above.
3. Download the JumpStart, claim coins, enjoy!
Click Here to download the JumpStart content, then paste one of your API keys from Step 2 where indicated. The cost is 1 Coin or US$ 0.01 per API Call. New users also get 1,000 Welcome Coins — claim below!
Free Coins!
1,000 Coins
Waiting for you — hit Claim Now below.
Already added to your balance. Enjoy!
Bronze
US$ 100.00 (FREE 100 Coins)
Silver
US$ 500.00 (FREE 1,000 Coins)
Gold
US$ 1,000.00 (FREE 5,000 Coins)
Try it live — no download needed
Open the hosted editor with your account: upload a .docx, edit with full Word fidelity (paper, ruler, header/footer, paste from Word), export PDF. Your files stay on WebOffice storage, scoped to your account.
Documentation
Integrate ONLYOFFICE into your own web app — setup, access modes, API reference, and metering rules.
JumpStart setup — what to change
The JumpStart from Step 3 is a complete reference integration: a thin PHP backend plus a browser editor page. Nothing is hidden — you can replace it with your own stack and keep the same contract.
- Download and extract the JumpStart anywhere on your server.
- Create an API key in Step 2 and copy it (
wo_live_…). - Copy
server_reference.phptoserver_local.phpin the same folder, then edit onlyserver_local.php:
| Value | What to put |
|---|---|
WEBOFFICE_BASE |
https://dashboard.weboffice.tech — leave as-is on production |
WEBOFFICE_API_KEY |
your wo_live_… key from Step 2 |
LAB_COOKIE |
'' — lab testing only; leave empty in production |
- Serve the folder with PHP:
php -S localhost:8000(or any Apache/Nginx host with PHP). - Open
index.html. TheOnlyOffice Documents/folder (your file archive) is created automatically and protected by an auto-generated.htaccess.
Never edit server.php (re-extracting the zip replaces it) and never commit or share server_local.php — re-extraction never overwrites it. Full reference: README.md inside the zip.
Access & permission modes (URL parameters)
Every document is opened by URL, so share links are just links. The server stamps the
URL from its own records after the first open, which means author cannot
be spoofed by editing the address bar.
| Mode | URL example | Viewer can… |
|---|---|---|
| Edit | ?doc=Report.docx |
Full editor toolbar. Each changed save is metered (1 call). |
| View only | ?doc=Report.docx&user=client@acme.com |
Read the document; toolbar hidden; only Export PDF remains. |
| Comment | ?doc=Report.docx&user=client@acme.com&comment=1 |
Add and reply to comments; document content stays locked. |
| New document | owner toolbar → New document | Prompts for a file name, creates a blank .docx, autosaves under that name. |
Parameter reference
doc file name · user viewer identity ·
comment=1 comment mode · author display only
(ownership is decided server-side). Owner = the key holder who first opens uploads the
document; everyone else is a viewer.
API reference
A. Your backend → WebOffice broker (auth: Authorization: Bearer wo_live_…)
| Endpoint | Body | Returns | Metered |
|---|---|---|---|
POST /onlyoffice/token |
{file_url, filename, save_url, callback_url, as_user?, author?, comment?} |
{docs_base, config, token, save_token, dockey, readonly, comment_only} |
1 call (import) |
POST /onlyoffice/meter_save |
{event:"save", dockey, save_token, sha256, bytes, filename} |
{success, charged} |
1 call per changed revision; identical content is free |
POST /onlyoffice/upload |
multipart file (≤10 MB, .docx) | {doc_id, name} |
free (staging) |
POST /onlyoffice/export |
{doc_id, format:"pdf"} |
{file: base64} |
1 call |
GET /onlyoffice/files |
— | document list | free |
B. Your JumpStart server.php actions
| Action | Method | Purpose |
|---|---|---|
config |
GET | Build the editor session (params: doc, user, comment). |
upload |
POST | Store an uploaded .docx locally (name kept). |
create |
POST | Create a blank .docx server-side {name}. |
files |
GET | List local documents (JSON). |
file |
GET | Serve a document to the Docs server (requires ct token). |
callback |
POST | Docs server save → write locally → meter ping (requires ct). |
export |
GET | PDF export through the broker (1 call). |
version |
GET | Build self-check — compare with the README inside the zip. |
C. Save flow (tenant storage)
1. Browser calls your ?action=config → your server calls WebOffice POST /onlyoffice/token with the key.
2. WebOffice returns {docs_base, config, token} → browser loads api.js from docs_base and starts new DocsAPI.DocEditor(el, {...config, token}).
3. The Docs server fetches the file from ?action=file&doc=…&ct=….
4. On save, the Docs server calls ?action=callback&ct=… → the file is written to your disk → your server pings /onlyoffice/meter_save.
5. Export PDF uses ?action=export&doc=…&format=pdf (1 charged call); blank pages are always free.
Security & metering rules
- Your key never leaves the server — one key per app; revoke and rotate on any leak.
- Documents are served only with a per-document
cttoken; the archive folder is deny-all via its auto-generated.htaccess. - The save callback only accepts the configured Docs server host (SSRF guard), and only with a valid
ct. - Metering: 1 call on open (import) · 1 call per changed save (identical content is deduplicated by SHA-256) · 1 call per PDF export. Blank pages are free; an empty balance is denied with a message.
- Your files stay on your server. WebOffice signs sessions, meters usage, and never stores your documents.