Skip to main content
Every endpoint in this reference is also a tool on the Dueflow MCP server:
Most tools are the public API with a different transport: a tool call is dispatched as the REST request it stands for, so scopes, role ceilings, organization policy, rate limits and the activity log apply exactly as they do over HTTP. A few tools exist only here – payments_charges, and payments_refund, which refunds a member payment. They run the same operation and read under the same token rules, money-movement opt-in, rate limits and activity log. A write tool among them takes a _requestId that you reuse only to retry, and an error comes back as a message with isError: true.

Connect from ChatGPT or Claude

ChatGPT and Claude can’t paste a token; they sign in with OAuth. Add Dueflow as a custom connector (MCP server) with the URL above and choose OAuth if you are asked. The client discovers everything else from the server.
1

Sign in to Dueflow

You are sent to dueflow.co to sign in with your usual account. Nothing is shared with the assistant until you approve the next screen.
2

Approve the connection

Pick the organization the assistant may act in and tick the scopes it may use. Scopes your role can’t hold, or that the organization has blocked, are shown but can’t be granted. Decline and the assistant gets nothing.
3

Ask away

The assistant now holds a short-lived access token (one hour) and a refresh token it renews silently. Every change it makes appears in the organization’s API activity log, attributed to you via the app; its calls to REST-backed tools are counted in API usage.
The connection appears under Settings → API tokens → Connected apps, with the organization, the granted scopes and when it was last used. Disconnect revokes it immediately; the assistant has to be authorized again to continue.
A connection acts as you, with personal-token semantics: change roles and it narrows the same minute, leave the organization and it stops working. Scopes are re-evaluated every time the token is refreshed, so a connection can lose scopes over time but never gain them.

Connect with a bearer token

Clients that can send a header – Claude Code, Cursor, scripts, anything headless – skip OAuth and use a personal or service token directly:
This is the only way a service token reaches the MCP server. OAuth is a person consenting, so it only ever issues personal-token access; an integration that has to survive officer turnover uses a dfs_ token in a header, as it would for REST.

Tools

tools/list returns one tool per operation or read the token is allowed to call, named after it with the dot replaced by an underscore – GET /v1/members is members_list, PATCH /v1/members/{memberId} is members_update. An operation with several endpoints is one tool with a _route argument (cards_setFrozen covers freeze and unfreeze). Path parameters, query parameters and body fields are all arguments of the tool; the input schema is the endpoint’s, so the reference page for an endpoint documents its tool too. Tools the token’s scopes can’t call are omitted rather than listed and refused, so an assistant never plans around something it can’t do. An API error inside a call – validation, insufficient_scope, not_found – comes back as a tool result with isError: true and the same error body as REST, not as a transport failure.

For MCP client authors

The server implements the Streamable HTTP transport, statelessly: POST JSON-RPC to the URL above with a bearer; there is no session header and no server-to-client stream (GET returns 405). An unauthenticated request returns 401 with the protected-resource metadata the MCP authorization spec requires:
Authorization server metadata (RFC 8414) is at https://www.dueflow.co/.well-known/oauth-authorization-server (issuer https://www.dueflow.co). In short: Access tokens are ordinary personal tokens, so everything in Authentication about live roles, organization policy and revocation applies to them unchanged, with two differences. A connected app never receives parent or guardian contact details (even with members:pii), and GET /v1/me leaves out your account email and your other organizations. And it acts for you only while it is connected, so it can’t hand out credentials or staff access that would outlive the connection. Creating or rotating API tokens, adding people to the team or changing their roles, inviting chapter admins, turning on workflows that keep acting as you and changing the organization’s API policy are refused for it; do those from the dashboard. Of these, only a roster sync that names chapter admins (chapters_applyRosterSync with adminEmails) can be reached over REST or MCP, and it is refused before any chapter is created. Team, workflow, token and policy changes have no endpoint or tool for any token.