Docs

FreshBooks API Authentication

How to authenticate FreshBooks API requests: one Bearer API key plus a connectionId. MindCloud runs the OAuth flow and refreshes FreshBooks tokens for you.

Every FreshBooks API request through MindCloud needs two things: a MindCloud API Key and a connectionId for your FreshBooks account. This page covers both, plus exactly how to send them, so you do not need to visit any other page to get authenticated.

Steps to authenticate

  1. Create a MindCloud account at app.mindcloud.co if you do not already have one.
  2. Generate a MindCloud API Key in API Keys. This is the Bearer token you send on every request. Keep it on your server.
  3. Create a FreshBooks connection in Connections. FreshBooks uses OAuth. When you create the connection, you are redirected to sign in to FreshBooks and approve access — MindCloud stores the resulting tokens and refreshes them automatically, so your integration never has to.
  4. Copy the connection’s connectionId — you will send it on every request alongside your MindCloud API Key.

How requests are authenticated

Authentication has two layers. Your MindCloud API Key authenticates the request to MindCloud, sent as a Bearer token in the Authorization header. The connectionId selects the connected FreshBooks account that should run the action. MindCloud stores and refreshes the FreshBooks credentials behind that connection, so you never send provider tokens with your requests.

Pass connectionId in the query string for GET and DELETE actions, and in the JSON body for POST, PUT, and PATCH actions.

For example, calling Get Current User Profile with an FreshBooks connection looks like this:

curl --request POST \
  --url "https://connect.mindcloud.co/v2/universal/apps/freshBooks/actions/get-current-user-profile/run" \
  --header "Authorization: Bearer $MINDCLOUD_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
  "connectionId": "$CONNECTION_ID",
  "arguments": {}
}'

The Authorization: Bearer <your MindCloud API Key> header authenticates you to MindCloud; the connectionId tells MindCloud which FreshBooks account to run the action against. Missing or invalid Authorization returns 401, and a missing or mismatched connectionId returns 400.

Create FreshBooks OAuth credentials

Sign in to a FreshBooks account that can access the Developer Hub and make sure the FreshBooks app already includes the full scope set MindCloud will request for the FreshBooks build.

  1. Open the Developer Hub

    Open the FreshBooks Developer Hub and select Apps.

    Developer Hub → Apps
  2. Open the FreshBooks app you use for MindCloud

    Open the existing app whose Client ID and Client Secret you use in MindCloud.

  3. Confirm the full build scopes are enabled

    MindCloud now requests: user:profile:read, user:clients:read, user:clients:write, user:invoices:read, user:invoices:write, user:estimates:read, user:estimates:write, user:expenses:read, user:expenses:write, user:projects:read, user:projects:write, user:time_entries:read, user:time_entries:write, and user:billable_items:read. Make sure those same scopes are enabled on the FreshBooks app before you authorize.

  4. Re-authorize the MindCloud connection

    Start the FreshBooks authorization flow again so the access token is issued with the expanded scopes.

Keep your key safe

Keep your MindCloud API Key on your server; do not ship it in browser code, mobile apps, public repositories, or logs. Anyone with the key can call the Universal API as your MindCloud account, across every connection you have created.