Skip to main content

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.

FreshBooks icon

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

SourceDestination

  • 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

  1. 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.

  2. Navigate to the FreshBooks Developer Portal at https://my.freshbooks.com/#/developer.

  3. Click the Create App button to begin registering a new OAuth application.

  4. 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.

  5. Click Save to create the application.

  6. 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.

Important

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.

FieldRequiredSecretDescription
Authorization URLNoNoThe URL endpoint where users authenticate and authorize access
Client IDYesNoA unique public identifier assigned to your application
Access ScopeNoNoA space-separated list of permissions your application requests
Token URLNoNoThe URL endpoint where authorization codes are exchanged for access tokens
Client SecretNoYesA private key used to authenticate your application when requesting tokens
Base URLYesNoFreshBooks API base URL Allowed values: Production

Create a credential in Nexla

  1. After selecting the data source/destination type, click the Add Credential tile to open the Add New Credential overlay.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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.

  10. 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.

  11. 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.

List Clients

This endpoint retrieves a paginated list of all clients in a FreshBooks account. Use this endpoint when you need to sync client contact information, billing details, or client lists to another system for reporting or CRM purposes.

  • Enter your FreshBooks Account ID in the Account ID field. The Account ID is a short alphanumeric string (e.g., MJx3p) that identifies the FreshBooks account from which clients will be retrieved. You can find your Account ID by calling the GET https://api.freshbooks.com/auth/api/v1/users/me endpoint after authenticating and looking for the account_id field within the business_memberships array in the response.

  • This endpoint returns up to 100 clients per page and automatically paginates through all available pages to retrieve the complete client list.

The List Clients endpoint returns detailed client information including organization name, contact details, billing address, currency, and account status. For additional details on the fields returned, refer to the FreshBooks Clients API documentation.

List Invoices

This endpoint retrieves a paginated list of all invoices in a FreshBooks account. Use this endpoint to sync invoice data for financial reporting, accounts receivable analysis, or integration with other accounting or ERP systems.

  • Enter your FreshBooks Account ID in the Account ID field. The Account ID identifies the FreshBooks account from which invoices will be retrieved. You can find your Account ID by calling the GET https://api.freshbooks.com/auth/api/v1/users/me endpoint after authenticating and looking for the account_id field within the business_memberships array.

  • This endpoint returns up to 100 invoices per page and automatically paginates to retrieve all available invoices.

Invoice records include fields such as invoice number, client ID, status (draft, sent, viewed, paid, auto-paid, overdue, etc.), amount due, currency, line items, and creation/due dates. For more information, see the FreshBooks Invoices API documentation.

List Expenses

This endpoint retrieves a paginated list of all expense records in a FreshBooks account. Use this endpoint when you need to export expense data for financial analysis, tax preparation, or integration with expense management tools.

  • Enter your FreshBooks Account ID in the Account ID field. The Account ID identifies the FreshBooks account from which expenses will be retrieved. You can locate your Account ID via the GET https://api.freshbooks.com/auth/api/v1/users/me endpoint, in the account_id field of the business_memberships array.

  • This endpoint returns up to 100 expenses per page and automatically paginates to retrieve the full expense list.

Expense records include fields such as expense category, vendor, amount, currency, date, notes, billable status, and client association. For additional field details, refer to the FreshBooks Expenses API documentation.

List Expense Summaries

This endpoint retrieves summarized expense data for a FreshBooks account. Use this endpoint when you need aggregated expense totals broken down by category or time period rather than individual expense records.

  • Enter your FreshBooks Account ID in the Account ID field. This identifies the FreshBooks account for which expense summaries will be retrieved.

  • This endpoint returns a static response (non-paginated) containing summarized expense data for the account.

Expense summaries are useful for high-level financial reporting and budgeting analysis. For individual expense records with full detail, use the List Expenses endpoint instead.

List Expense Categories

This endpoint retrieves all expense categories configured in a FreshBooks account. Use this endpoint to obtain the list of available expense categories, which can be used to enrich or validate expense data in downstream workflows.

  • Enter your FreshBooks Account ID in the Account ID field. This identifies the FreshBooks account from which expense categories will be retrieved.

  • This endpoint returns a static (non-paginated) list of all expense categories associated with the account.

Get Invoice Details Report

This endpoint retrieves a detailed invoice report for a FreshBooks account, including invoice-level metrics and breakdowns. Use this endpoint for comprehensive invoice analytics and financial reporting purposes.

  • Enter your FreshBooks Account ID in the Account ID field. This identifies the FreshBooks account for which the invoice details report will be generated.

  • This endpoint returns a static (non-paginated) report containing detailed invoice data for the account.

The Invoice Details Report is part of the FreshBooks Accounting Reports API. For related report types and additional documentation, refer to the FreshBooks Reports API documentation.

Get Expense Details Report

This endpoint retrieves a detailed expense report for a FreshBooks account, including expense metrics and category breakdowns. Use this endpoint for in-depth expense analytics and financial reporting.

  • Enter your FreshBooks Account ID in the Account ID field. This identifies the FreshBooks account for which the expense details report will be generated.

  • This endpoint returns a static (non-paginated) report containing detailed expense data for the account.

The Expense Details Report is part of the FreshBooks Accounting Reports API. For related report types, refer to the FreshBooks Reports API documentation.

List Ledger Accounts

This endpoint retrieves all ledger accounts (chart of accounts) configured for a FreshBooks business. Use this endpoint to export your chart of accounts for accounting reconciliation, financial system integration, or audit purposes.

  • Enter your FreshBooks Business ID in the Business ID field. Note that this endpoint uses a Business ID rather than an Account ID. You can retrieve your Business ID by calling the GET https://api.freshbooks.com/auth/api/v1/users/me endpoint and locating the business_id field within the business_memberships array.

  • This endpoint returns a static (non-paginated) list of all ledger accounts associated with the specified business.

Ledger accounts are used in FreshBooks to categorize financial transactions in your chart of accounts. For more information, refer to the FreshBooks Chart of Accounts API documentation.

List Taxes

This endpoint retrieves all tax configurations defined in a FreshBooks account. Use this endpoint to export tax rate definitions for compliance reporting, tax reconciliation, or integration with tax management systems.

  • Enter your FreshBooks Account ID in the Account ID field. This identifies the FreshBooks account from which tax configurations will be retrieved.

  • This endpoint returns a static (non-paginated) list of all taxes configured in the account.

Tax records include the tax name, rate percentage, and associated tax number (e.g., VAT or GST registration number). For more information, refer to the FreshBooks Taxes API documentation.

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.

Create Invoice

This endpoint creates a new invoice in the specified FreshBooks account. Use this template to automate invoice generation—for example, triggering invoice creation when a service is delivered, a subscription renews, or a sales order is fulfilled in another system.

  • Enter your FreshBooks Account ID in the Account Id field. The Account ID identifies the FreshBooks account in which the invoice will be created. You can retrieve your Account ID by calling the GET https://api.freshbooks.com/auth/api/v1/users/me endpoint after authenticating and locating the account_id field in the business_memberships array.

  • The Nexset data will be sent as the JSON body of a POST request to the FreshBooks invoices endpoint. Ensure the Nexset fields match the FreshBooks invoice object schema, including required fields such as customerid (the client ID) and line item details.

Invoices can optionally include custom logo and theme styling. For a full list of fields accepted by the FreshBooks Create Invoice endpoint, refer to the FreshBooks Invoices API documentation.

Delete (void) an Invoice

This endpoint deletes (voids) an existing invoice in a FreshBooks account. Use this template to automate invoice cancellation workflows, such as voiding invoices when orders are cancelled in an upstream system.

  • Enter your FreshBooks Account ID in the Account Id field. This identifies the FreshBooks account that contains the invoice to be deleted.

  • Enter the ID of the invoice to be deleted in the Invoice Id field. The Invoice ID is a numeric identifier assigned by FreshBooks when the invoice was created. You can retrieve invoice IDs using the List Invoices source endpoint.

:::warning Important Deleting (voiding) an invoice in FreshBooks is a permanent action. Voided invoices cannot be recovered. Ensure the correct Invoice ID is provided before activating this destination. :::

Create Credit Note

This endpoint creates a new credit note for a specified client in a FreshBooks account. Use this template to automate the issuance of credit notes for refunds, adjustments, or returns.

  • Optionally, enter your FreshBooks Account ID in the Account ID field to specify which account the credit note will be created in.

  • Optionally, enter the Client ID in the Clientid field to associate the credit note with a specific client.

  • The Nexset data will be sent as the JSON body of a POST request. Ensure the Nexset fields align with the FreshBooks credit note object schema.

Create a New Estimate / Quote

This endpoint creates a new estimate (quote) in a FreshBooks account. Use this template to automate quote generation—for example, creating estimates in FreshBooks when proposals are approved in a CRM or project management system.

  • Enter your FreshBooks Account ID in the Account Id field. This identifies the FreshBooks account in which the estimate will be created.

  • The Nexset data will be sent as the JSON body of a POST request. Include required estimate fields such as client ID and line items. For the full list of accepted fields, refer to the FreshBooks Estimates API documentation.

Create Client

This endpoint creates a new client record in a FreshBooks account. Use this template to sync client data from a CRM, e-commerce platform, or other system into FreshBooks, ensuring your client list remains current.

  • Enter your FreshBooks Account ID in the Account Id field. This identifies the FreshBooks account in which the new client will be created.

  • The Nexset data will be sent as the JSON body of a POST request. Include required fields such as the client's first name, last name, and email address. For the full list of accepted fields, refer to the FreshBooks Clients API documentation.

Update an Existing Client in FreshBooks

This endpoint updates an existing client record in a FreshBooks account. Use this template to keep client contact information, billing details, or account settings current when changes occur in an upstream system.

  • Enter your FreshBooks Account ID in the Account ID field. This identifies the FreshBooks account that contains the client record to be updated.

  • Enter the ID of the client to be updated in the Client ID field. You can retrieve client IDs using the List Clients source endpoint.

  • The Nexset data will be sent as the JSON body of a PUT request. Include only the fields you wish to update. For the full list of updatable fields, refer to the FreshBooks Clients API documentation.

Create Item

This endpoint creates a new item or service in a FreshBooks account. Use this template to sync your product or service catalog into FreshBooks so that items are available for use on invoices and estimates.

  • Enter your FreshBooks Account ID in the Account ID field. This identifies the FreshBooks account in which the new item will be created.

  • The Nexset data will be sent as the JSON body of a POST request. Include required fields such as the item name and unit cost. For additional accepted fields, refer to the FreshBooks API documentation.

Create a New Expense Record in FreshBooks

This endpoint creates a new expense record in a FreshBooks account. Use this template to automatically log expenses in FreshBooks from external sources such as expense reporting tools, corporate card feeds, or receipt capture systems.

  • Enter your FreshBooks Account ID in the Account Id field. This identifies the FreshBooks account in which the expense will be created.

  • The Nexset data will be sent as the JSON body of a POST request. Include required fields such as amount, category ID, and date. For the full list of accepted fields, refer to the FreshBooks Expenses API documentation.

Update an Existing Expense Record

This endpoint updates an existing expense record in a FreshBooks account. Use this template to keep expense records current when changes occur in an upstream expense management or ERP system.

  • Enter your FreshBooks Account ID in the Account Id field. This identifies the FreshBooks account that contains the expense record to be updated.

  • Enter the ID of the expense to be updated in the Expense Id field. You can retrieve expense IDs using the List Expenses source endpoint.

  • The Nexset data will be sent as the JSON body of a PUT request. For the full list of updatable fields, refer to the FreshBooks Expenses API documentation.

Create Payment

This endpoint records a new payment against an invoice in a FreshBooks account. Use this template to automatically log payments received in external payment platforms (such as Stripe or PayPal) against the corresponding FreshBooks invoices.

  • Enter your FreshBooks Account ID in the Account ID field. This identifies the FreshBooks account in which the payment will be recorded.

  • The Nexset data will be sent as the JSON body of a POST request. Include required fields such as invoice ID (invoiceid), amount, and payment date. For the full list of accepted fields, refer to the FreshBooks Payments API documentation.

Create Checkout Link

This endpoint creates a new checkout link for payment collection in a FreshBooks account. Use this template to programmatically generate payment links that can be shared with clients to collect payments outside of the standard FreshBooks invoicing workflow.

  • Enter your FreshBooks Account ID in the Account ID field. This identifies the FreshBooks account for which the checkout link will be created.

  • The Nexset data will be sent as the JSON body of a POST request. For the required fields and checkout link options, refer to the FreshBooks Payments API documentation.

Enable Payment Options on Invoice Profile

This endpoint enables payment gateway options for a specific invoice profile in a FreshBooks account. Use this template to configure which payment methods are available to clients when they receive invoices generated from a given invoice profile.

  • Enter your FreshBooks Account ID in the Account Id field. This identifies the FreshBooks account containing the invoice profile to be updated.

  • Enter the ID of the invoice profile in the Id field. This is the unique identifier for the invoice profile for which payment options will be enabled.

  • The Nexset data will be sent as the JSON body of a POST request containing the payment option configuration. For details on the accepted payment gateway options, refer to the FreshBooks Payments API documentation.

Create a Tax Rate in FreshBooks

This endpoint creates a new tax rate in a FreshBooks account. Use this template to programmatically add tax configurations to FreshBooks, for example when onboarding new business entities or updating tax rates across multiple accounts.

  • Enter your FreshBooks Account ID in the Account ID field. This identifies the FreshBooks account in which the tax rate will be created.

  • The Nexset data will be sent as the JSON body of a POST request. Include required fields such as tax name, tax number, and rate percentage. For the full list of accepted fields, refer to the FreshBooks Taxes API documentation.

Create a Time Entry in FreshBooks

This endpoint creates a new time tracking entry in a FreshBooks business. Use this template to sync time entries from external time tracking tools (such as Toggl, Harvest, or Jira) into FreshBooks for billing and project management purposes.

  • Enter your FreshBooks Business ID in the Business ID field. Note that time tracking endpoints use a Business ID rather than an Account ID. You can retrieve your Business ID by calling the GET https://api.freshbooks.com/auth/api/v1/users/me endpoint and locating the business_id field within the business_memberships array.

  • The Nexset data will be sent as the JSON body of a POST request. Include required fields such as duration, started time, and client or project association. For the full list of accepted fields, refer to the FreshBooks Time Entries API documentation.

Time tracking endpoints in FreshBooks use a Business ID, whereas most accounting endpoints (invoices, clients, expenses) use an Account ID. Ensure you are using the correct identifier type for this endpoint.

Create Retainer

This endpoint creates a new retainer agreement within a FreshBooks business. Use this template to automate the setup of recurring retainer engagements in FreshBooks, for example when a client signs a retainer contract in an external CRM or contract management system.

  • Enter your FreshBooks Business ID in the Business ID field. The Business ID identifies the FreshBooks business under which the retainer will be created. You can retrieve this value from the GET https://api.freshbooks.com/auth/api/v1/users/me endpoint, in the business_id field of the business_memberships array.

  • The Nexset data will be sent as the JSON body of a POST request containing the retainer configuration. For more information, refer to the FreshBooks API documentation.

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.