FreshBooks
FreshBooks is cloud-based accounting and invoicing software for small businesses and freelancers. It creates and sends professional invoices, tracks billable time, manages expenses, accepts online payments, and generates financial reports. Its REST API gives programmatic access to invoices, clients, expenses, payments, taxes, and ledger accounts to automate financial workflows and sync accounting data.

Power end-to-end data operations for your FreshBooks API with Nexla. Our bi-directional FreshBooks connector is purpose-built for FreshBooks, making it simple to ingest data, sync it across systems, and deliver it anywhere — all with no coding required. Nexla turns API-sourced data into ready-to-use, reusable data products and makes it easy to send data to FreshBooks or any other destination. With comprehensive monitoring, lineage tracking, and access controls, Nexla keeps your FreshBooks workflows fast, secure, and fully governed.
Features
Type: API
- Seamless API Integration: Connect to any endpoint as source or destination without coding, with automatic data product creation
- Visual Composition & Chaining: Build complex integrations using visual templates, chain API calls, and compose workflows with data validation and filtering
- API Proxy: Expose curated slices of your data securely with a secure and customizable API proxy that validates and transforms data on the fly
- Request optimization with intelligent batching, retry, and caching to minimize API calls and costs
Prerequisites
FreshBooks uses OAuth 2.0 (3-legged authorization code flow) for API authentication. Before creating a FreshBooks credential in Nexla, you must register a developer application in FreshBooks to obtain a Client ID and Client Secret.
Register a FreshBooks Developer Application
-
Sign in to your FreshBooks account at https://my.freshbooks.com, or create a new account at https://www.freshbooks.com if you do not already have one.
-
Navigate to the FreshBooks Developer Portal at https://my.freshbooks.com/#/developer.
-
Click the Create App button to begin registering a new OAuth application.
-
Complete the application registration form with the following information:
-
Application Name: Enter a descriptive name for your integration (e.g., "Nexla Integration").
-
Redirect URI: Enter the redirect URI provided by Nexla. This is the URL to which FreshBooks will send users after they authorize access. Nexla's OAuth redirect URI is
https://app.nexla.io/oauth/callback. -
Application Description: Optionally, provide a description of what the application does.
-
-
Click Save to create the application.
-
After the application is saved, scroll down to the App Settings section to locate your credentials:
-
Client ID: A unique public identifier for your application.
-
Client Secret: A private key used to authenticate your application when requesting tokens. Copy and store this value securely—FreshBooks does not display the secret again after you navigate away from the App Settings page.
-
Store your Client Secret in a secure location immediately after copying it. If you lose it, you will need to regenerate it, which will invalidate all existing tokens issued to your application.
Locate Your FreshBooks Account ID and Business ID
The FreshBooks API uses two types of identifiers to scope requests:
-
Account ID: Used by accounting endpoints (clients, invoices, expenses, taxes, payments). Formatted as a short alphanumeric string (e.g.,
MJx3p). -
Business ID: Used by time tracking and project endpoints.
Both identifiers can be retrieved after authenticating by calling the GET https://api.freshbooks.com/auth/api/v1/users/me endpoint. In the response, locate the business_memberships array—each entry contains an account_id and a business_id for the accounts and businesses associated with your FreshBooks user.
For more details, refer to the FreshBooks API documentation.
Authenticate
Credentials required
3-legged OAuth2 flow for user-authorized access to FreshBooks API. Requires user login and consent.
| Field | Required | Secret | Description |
|---|---|---|---|
| Authorization URL | No | No | The URL endpoint where users authenticate and authorize access |
| Client ID | Yes | No | A unique public identifier assigned to your application |
| Access Scope | No | No | A space-separated list of permissions your application requests |
| Token URL | No | No | The URL endpoint where authorization codes are exchanged for access tokens |
| Client Secret | No | Yes | A private key used to authenticate your application when requesting tokens |
| Base URL | Yes | No | FreshBooks API base URL Allowed values: Production |
Create a credential in Nexla
-
After selecting the data source/destination type, click the Add Credential tile to open the Add New Credential overlay.
-
Enter a name for the credential in the Credential Name field and a short, meaningful description in the Credential Description field.
FreshBooks uses a 3-legged OAuth 2.0 flow, which requires the account owner to log in and explicitly grant Nexla permission to access their FreshBooks data. This is the standard authorization method required by FreshBooks for all third-party integrations.
-
In the Authorization URL field, verify or enter the FreshBooks authorization endpoint. This field is pre-filled with the default value
https://auth.freshbooks.com/oauth/authorize. -
Enter your FreshBooks application's Client ID in the Client ID field. This is the public identifier obtained when you registered your developer application in the FreshBooks Developer Portal.
-
Optionally, enter a space-separated list of OAuth permission scopes in the Access Scope field. FreshBooks scopes control which resources the credential can access. Leave this field blank to request the default set of permissions associated with your registered application.
For most integrations, leaving the Access Scope field blank will grant access to all resources your FreshBooks application is authorized to use. Refer to the FreshBooks API Authentication documentation for a complete list of available scopes.
-
In the Token URL field, verify or enter the FreshBooks token endpoint. This field is pre-filled with the default value
https://api.freshbooks.com/auth/oauth/token. -
Enter your FreshBooks application's Client Secret in the Client Secret field. This is the private key obtained from the App Settings section of your FreshBooks developer application. This value is treated as a password and will be stored securely.
-
In the Base URL field, verify or enter the FreshBooks API base URL. This field is pre-filled with the default production value. Select Production (
https://api.freshbooks.com) from the dropdown or keep the pre-filled value unless your organization requires a different base URL.The Base URL is used to construct all API requests made by this credential. In most cases, the default production URL is the correct value.
-
Once all of the relevant steps in the above sections have been completed, click the Save button at the bottom of the overlay to save the configured credential.
-
Nexla will redirect you through the FreshBooks OAuth login and consent screen. Sign in to FreshBooks with the account you wish to connect, and click Allow to grant Nexla access to your FreshBooks data.
-
After authorization is complete, the newly added credential will appear in a tile on the Authenticate screen during data source/destination creation and can be selected for use with a new data source or destination.
Use as a data source
To create a new data flow, navigate to the Integrate section, and click the New Data Flow button. Select the FreshBooks connector tile, then select the credential that will be used to connect to the FreshBooks account, and click Next; or, create a new FreshBooks credential for use in this flow.
Endpoint templates
Nexla provides pre-built templates that can be used to rapidly configure data sources to ingest data from common FreshBooks endpoints. Select the endpoint from which this source will fetch data from the Endpoint pulldown menu. Available endpoint templates are listed in the expandable boxes below.
Once the selected endpoint template has been configured, click the Test button to the right of the endpoint selection menu to retrieve a sample of the data that will be fetched. Sample data will be displayed in the Endpoint Test Result panel on the right, allowing you to verify that the source is configured correctly before saving.
Manual configuration
FreshBooks data sources can also be manually configured to ingest data from any valid FreshBooks API endpoint, including endpoints not covered by the pre-built templates, chained API calls, or custom request parameters. Select the Advanced tab at the top of the configuration screen, and follow the instructions in Connect to Any API to configure the API method, endpoint URL, date/time and lookup macros, path to data, metadata, and request headers.
FreshBooks accounting endpoints follow the URL pattern https://api.freshbooks.com/accounting/account/{accountId}/{resource}/{resource} (for example, https://api.freshbooks.com/accounting/account/MJx3p/invoices/invoices). All FreshBooks API responses nest the relevant records inside a response.result wrapper object—for example, invoices are returned at $.response.result.invoices[*]—so the Path to Data in Response field must account for this wrapper, or Nexla may not parse the data into usable records.
Once all of the relevant settings have been configured, click the Create button in the upper right corner of the screen to save and create the new FreshBooks data source. Nexla will now begin ingesting data from the configured endpoint and will organize any data that it finds into one or more Nexsets.
Use as a destination
Click the + icon on the Nexset that will be sent to the FreshBooks destination, and select the Send to Destination option from the menu. Select the FreshBooks connector from the list of available destination connectors, then select the credential that will be used to connect to the FreshBooks account, and click Next; or, create a new FreshBooks credential for use in this flow.
Endpoint templates
Nexla provides pre-built templates that can be used to rapidly configure destinations to send data to common FreshBooks endpoints. Select the endpoint to which data will be sent from the Endpoint pulldown menu. Then, click on the template in the list below to expand it, and follow the instructions to configure additional endpoint settings.
Manual configuration
FreshBooks destinations can also be manually configured to send data to any valid FreshBooks API endpoint. Using manual configuration, you can also configure Nexla to automatically send the response received from the FreshBooks API after each call to a new Nexla webhook data source. Select the Advanced tab at the top of the configuration screen, and follow the instructions in Connect to Any API to configure the API method, data format, endpoint URL, request headers, attribute exclusions, record batching, and response webhooks.
FreshBooks requires data to be sent in JSON format for all write operations. Accounting endpoints follow the URL pattern https://api.freshbooks.com/accounting/account/{accountId}/{resource}/{resource} (for example, creating an invoice at https://api.freshbooks.com/accounting/account/MJx3p/invoices/invoices), while time tracking endpoints use https://api.freshbooks.com/timetracking/business/{businessId}/time_entries. For update or delete operations, append the ID of the object to be updated or deleted at the end of the URL.
Save & activate
Once all endpoint settings have been configured, click the Done button in the upper right corner of the screen to save and create the destination. To begin sending data to the configured FreshBooks endpoint, open the destination resource menu, and select Activate.
The Nexset data will not be sent to FreshBooks until the destination is activated. Destinations can be activated immediately or at a later time, providing full control over data movement.