Developers

Build on Plox

A REST API for documents, data rooms, and view-tracking — secured with OAuth 2.0. It's the same API that powers the official Plox Zapier integration.

Authentication

OAuth 2.0 with PKCE

Plox acts as an OAuth 2.0 authorization server. Registered clients (such as Zapier) redirect the user to /oauth/authorize, the user reviews and approves the requested scopes, and the client exchanges the returned authorization code for an access token at /api/oauth/token.

Both the authorization_code and refresh_token grant types are supported, with optional PKCE (S256). Access tokens are short-lived; refresh tokens are rotated on use.

Every API request is authenticated with a bearer token:

Authorization: Bearer <access_token>

Scopes

documents:readView your documents
documents:writeUpload and modify documents
datarooms:readView your data rooms and their files
datarooms:writeCreate and modify data rooms
analytics:readRead views, visitors and engagement

Base URL

All endpoints are relative to

https://app.tryplox.com/api/v1

Requests and responses are JSON. Successful writes return 201 (created) or 204 (no content); errors return a JSON body shaped { "error": "..." } with a 4xx status.

Reference

Endpoints

GET/me

Identity check — verifies the access token and returns who it belongs to. Used to confirm a connection.

Response

{
  "id": "user_3Fs660s1uSIIwHcNmJzYuIlpZwU",
  "orgId": null,
  "scopes": ["datarooms:read", "datarooms:write", "documents:read", "documents:write", "analytics:read"]
}
GET/documentsdocuments:read

List the caller's documents, most recently updated first.

Response

{
  "documents": [
    {
      "id": "2R_Zzu4mSuvQxvC4_aXue",
      "name": "Sample Document",
      "mime_type": "application/pdf",
      "size": 13264,
      "created_at": "2026-06-30T20:29:53.292Z",
      "updated_at": "2026-06-30T20:29:53.292Z",
      "share_url": "https://docs.tryplox.com/document/2R_Zzu4mSuvQxvC4_aXue/view"
    }
  ]
}
POST/documentsdocuments:write

Create a document from a publicly hosted file URL — Plox fetches and stores it.

Request body

{
  "name": "Sample Document",
  "download_url": "https://example.com/file.pdf"
}

Response

{
  "id": "2R_Zzu4mSuvQxvC4_aXue",
  "name": "Sample Document",
  "mime_type": "application/pdf",
  "size": 13264,
  "created_at": "2026-06-30T20:29:53.292Z",
  "updated_at": "2026-06-30T20:29:53.292Z",
  "share_url": "https://docs.tryplox.com/document/2R_Zzu4mSuvQxvC4_aXue/view"
}
GET/dataroomsdatarooms:read

List the caller's data rooms.

Response

{
  "datarooms": [
    {
      "id": "zE7idlHcGfpXqJBuLa7f_",
      "name": "Sample Dataroom",
      "created_at": "2026-06-30T20:29:43.962Z",
      "updated_at": "2026-06-30T20:29:43.962Z",
      "share_url": "https://docs.tryplox.com/dataroom/zE7idlHcGfpXqJBuLa7f_/view"
    }
  ]
}
POST/dataroomsdatarooms:write

Create a new data room, optionally from a folder template.

Request body

{
  "name": "Sample Dataroom",
  "template_key": "due-diligence"
}

Response

{
  "id": "zE7idlHcGfpXqJBuLa7f_",
  "name": "Sample Dataroom",
  "created_at": "2026-06-30T20:29:43.962Z",
  "updated_at": "2026-06-30T20:29:43.962Z",
  "share_url": "https://docs.tryplox.com/dataroom/zE7idlHcGfpXqJBuLa7f_/view"
}
POST/hooks

Subscribe a target URL to a trigger event (REST Hook). Plox POSTs the event payload to your URL as it happens.

Request body

{
  "event": "document_viewed",
  "target_url": "https://hooks.zapier.com/your-endpoint"
}

Response

{ "id": "ck5uIZfi5ICXFR3XZrErn" }
DELETE/hooks/:id

Unsubscribe a previously created hook. Returns 204 with no body.

Response

HTTP/1.1 204 No Content
GET/triggers/:eventanalytics:read

Sample/recent events for a trigger, built from your most recent real documents or data rooms — used by integration builders (and Zapier's editor) to map fields before going live.

Response

{
  "events": [
    {
      "id": "2R_Zzu4mSuvQxvC4_aXue-sample",
      "event": "document_viewed",
      "occurred_at": "2026-06-30T20:29:53.292Z",
      "viewer_email": null,
      "viewer_name": null,
      "viewer_country": null,
      "viewer_city": null,
      "document_id": "2R_Zzu4mSuvQxvC4_aXue",
      "document_name": "Sample Document"
    }
  ]
}

Webhooks

Trigger events

Subscribe via POST /hooks. When a matching event fires, Plox sends a POST to your target_url with a JSON body. Delivery is best-effort — a failed delivery never retries indefinitely.

document_viewedFires when someone views a shared document.
dataroom_viewedFires when someone views a data room.
new_leadFires when a viewer submits their details to access a data room.

Example payload

{
  "event": "document_viewed",
  "id": "evt_8sH2kLp0qR",
  "occurred_at": "2026-06-30T20:31:10.000Z",
  "document_id": "2R_Zzu4mSuvQxvC4_aXue",
  "document_name": "Sample Document",
  "viewer_email": "investor@example.com",
  "viewer_name": "Jane Doe",
  "viewer_country": "US",
  "viewer_city": "San Francisco"
}

Connect Plox to your stack

Use the API directly, or automate Plox alongside 7,000+ apps with Zapier — no code required.