Skip to content

Build on Onplana

All plansDeveloper or integrator

This page is for the developer connecting another application to Onplana. It lists the five ways in that work today, what each one is for, and where its full guide lives.

You want to Use Plans
Read and change projects and tasks from your code The REST API with a personal access token Every plan
Hear about changes as they happen Webhooks Business and above
Pull data into Power BI, Excel or a warehouse The OData reporting feed Professional and above
Let an AI agent work in Onplana The MCP server Every plan
Send approved time and expense to accounting Accounting export (Xero, or CSV) Onplana Services

Every API request carries a personal access token as a Bearer token. Create one under Settings, then Developer, grant only the scopes your integration needs, restrict it to the projects it should see, and set an expiry. A token acts as the person who made it, in one organization, and can never do more than they can. See Create API tokens.

  • The API reference. The OpenAPI 3.1 spec is at https://api.onplana.com/api/openapi.json, and the same spec as an interactive Swagger UI is at api.onplana.com/api/docs.
  • The organization. A token is bound to the one organization it was made in, so a request with a token needs no organization header. If you get 400 with the code WORKSPACE_NOT_RESOLVED, make a new token: it will carry the organization.
  • Errors come back as JSON: { "error": "...", "code": "...", "requestId": "..." }. The error sentence is safe to show; quote the requestId when you write to support.
  • Rate limits. Some route families allow a fixed number of requests per minute. A refused request answers 429 with a Retry-After header in seconds. Wait that long, then retry.

A webhook POSTs a JSON payload to your URL when the events you chose happen: tasks created, updated, deleted or moved to a new status, projects created, updated, archived or completed, comments, members, clients and deals. Each delivery carries an X-Webhook-Signature header, the HMAC-SHA256 of the raw body with your webhook’s secret, so you can prove it came from Onplana. Your endpoint has 10 seconds to answer with a 2xx, and a webhook that fails 10 times in a row stops being delivered to until you fix it and send a test. See Send webhooks for the full event list and the verification code.

A read-only OData v4 feed at https://api.onplana.com/api/odata serves projects, tasks, assignments, resources, timesheet lines, custom field values and task baselines, under the entity and column names Project Online used, on Professional and above. Authenticate with a token that has the Reporting feed (OData) scope. See Connect Power BI or Excel to the OData feed.

The Model Context Protocol endpoint at https://mcp.onplana.com/mcp lets Claude, ChatGPT, Cursor, Codex and any other MCP client read and manage work in an organization, with the same permissions as the person who connects it. Clients sign in through the browser (OAuth 2.1 with PKCE; clients register themselves, so there is no app to create first) or with a personal access token. See Connect an external AI agent, and the Claude and ChatGPT directory guides.

Before you build, check whether the connection exists: Microsoft Teams, SharePoint, Outlook and Google Calendar, two-way sync with Microsoft To Do, Microsoft Planner, file links from SharePoint, OneDrive, Box and Dropbox, and accounting export to Xero (QuickBooks is coming next). See Connect Google and Microsoft and Export to your accounting system.

Onplana lists itself in the directories of the tools it integrates with. If you run a product and want Onplana in your app directory or marketplace, or you have built an integration you would like us to point to, write to us.