Karbon Connector
Description
Karbon is a collaborative practice management platform for accounting firms. Karbon aligns your team with a single place to do your best work.
Use the Karbon component to manage your accounting firms.
API Documentation
This components was built using the Karbon API Reference.
Connections
API Key
key: karbonApiKeyKarbon API Keys
To obtain your Application ID and Access Key Follow these steps:
-
Register for a Developer Account:
- Register for a free developer account to create an application in Karbon and receive the Application ID.
- Example:
00000000-0000-0000-0000-000000000000
-
Find Your API Access Key:
- Navigate to Settings -> Connected Apps -> Manage on your app in Karbon to find your Access Key.
- Example:
eyJ.....
Use these credentials in the connection.
| Input | Notes | Example |
|---|---|---|
| Access Key | Get this by clicking Settings > Connected Apps > Manage on your app. | eyJ..... |
| Application ID | The application ID for the Karbon API. You receive this when you create an application in Karbon. | 00000000-0000-0000-0000-000000000000 |
Triggers
Entity Trigger
Get notified to this flow when a Karbon entity changes | key: entityTrigger
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Webhook Type | The type of the Webhook. | Contact |
This trigger receives webhook notifications from Karbon when entities change. It automatically creates and manages a webhook subscription when the instance is deployed, and removes it when the instance is deleted.
How It Works
- On Instance Deploy: The trigger creates a webhook subscription in Karbon via
POST /v3/WebhookSubscriptions, registering the instance endpoint to receive notifications for the selected entity type. - On Instance Deletion: The trigger removes the webhook subscription via
DELETE /v3/WebhookSubscriptions/{webhookType}, ensuring no orphaned subscriptions remain.
When an entity of the configured type changes in Karbon, a notification is sent to the registered endpoint and the flow is invoked with the webhook payload.
Configuration
- Webhook Type (required): The type of entity to monitor for changes. Available options:
ContactWorkNoteUserInvoice
Event Types
The trigger fires when an entity of the selected type is created, updated, or otherwise modified in Karbon. The specific change details are included in the webhook payload delivered to the flow.
Returned Data
The trigger passes the incoming webhook payload directly to the flow without transformation. The payload structure varies by webhook type and is determined by the Karbon API.
Notes
- Only one webhook type can be monitored per trigger instance. To monitor multiple entity types, configure separate flows with individual trigger instances.
- For more information on the Karbon API, see the Karbon Developer Center and the Karbon API Reference.
Updated Records
Retrieves existing and ongoing updated records from Karbon. Load history once, check for changes on a schedule, or both. | key: pollChangesTrigger
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Look-back Date | The date the initial sync starts from, in YYYY-MM-DD format. Cannot be a future date. Leave empty to start from the first recurrence with no backfill. When set, the initial sync seeds each record modified on or after this date once. | 2026-01-01 |
| Resource Type | The type of Karbon resource to poll for updated records. | Contacts |
This trigger retrieves existing and ongoing updated records from Karbon. Load history once, check for changes on a schedule, or both.
How It Works
On each scheduled recurrence, the trigger fetches all records of the selected resource type from the Karbon API and filters them client-side for records whose modification timestamp is after the last poll time. All matching records land in the updated array — the Karbon API does not expose a creation timestamp, so no created/updated split is performed.
The Karbon REST API does not expose a server-side modification-date filter on list endpoints, so all records are fetched and timestamps are compared in the trigger after retrieval.
Initial sync
An initial sync seeds a complete starting state rather than a change feed. It begins on the first recurrence when the trigger has no stored position and a Look-back Date (YYYY-MM-DD) is set, and seeds every record modified on or after that date exactly once. Left empty, there is no sync and the trigger starts from its first recurrence.
The window has no fixed upper bound, so a record modified mid-drain is swept into the sync. The trigger fetches the full window in a single recurrence regardless of whether batching is enabled. Once all matching records have been emitted, the trigger stores the current time as its position and the first incremental recurrence resumes from exactly there. Without batching, all changes are returned in one payload. With batching, the resolver dispatches each record (or batch of records) as a separate execution within the same recurrence. Nothing in the payload marks the handoff.
Resource Type still applies throughout. The trigger has no input that narrows the change feed, so the sync ignores no inputs.
Batching
Batching is enabled per flow on this trigger: each changed record is dispatched as its own execution, or grouped by the configured batch size. Batch size and batch concurrency can both be overridden per instance. Raising concurrency increases the request volume sent to Karbon.
To turn it on, select the flow's trigger, open the Flow control tab, and switch on Enable Batching. Under Batch Size, keep Trigger default or choose Custom batch size. Batch Concurrency is optional; leave it blank for no batch-level limit.
With batching off, downstream steps read results.body.data.updated. With batching on, that field does not exist. Each execution receives a single { changeType, record } object. Any step reading the older shape must be updated before batching is enabled. Because batching is enabled per flow, the change is scoped to that flow.
Returned Data
The trigger returns an object with an updated array containing records modified since the last poll. Fields shown are representative. The full response object includes additional properties.
Example Response
{
"updated": [
{
"@odata.type": "#KarbonService.ContactSummaryDTO",
"ContactKey": "29YXnqWcqCf3",
"FullName": "William John Connor",
"PreferredName": "Bill",
"Salutation": "Mr",
"ClientOwner": "rodney.muller@example.com",
"ClientManager": "jessica.tse@example.com",
"Address": "42 Galaxy Way, London",
"EmailAddress": "william.connor@example.com",
"PhoneNumber": "0987888686",
"RoleOrTitle": "COO",
"UserDefinedIdentifier": "73YEnqFcqCf3",
"LastModifiedDateTime": "2021-12-29T07:01:53Z"
}
]
}
Batched Item Shape
When batching is enabled, each execution receives a single item:
{
"changeType": "updated",
"record": {
"@odata.type": "#KarbonService.ContactSummaryDTO",
"ContactKey": "29YXnqWcqCf3",
"FullName": "William John Connor",
"LastModifiedDateTime": "2021-12-29T07:01:53Z"
}
}
Data Sources
Select Contact
Select a Contact from a dropdown menu | key: selectContact | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection |
Select Invoice
Select an Invoice from a dropdown menu | key: selectInvoice | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection |
Select Organization
Select an Organization from a dropdown menu | key: selectOrganization | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection |
Select User
Select a User from a dropdown menu | key: selectUser | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection |
Select Work Item
Select a Work Item from a dropdown menu | key: selectWorkItem | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection |
Actions
Create a Contact
Create a new contact | key: createContact
| Input | Notes | Example |
|---|---|---|
| Additional Fields | Additional fields that are not covered by the standard inputs. See Karbon API documentation for more information. | |
| Connection | ||
| Contact's First Name | The first name of the Contact. | John |
| Contact's Last Name | The last name of the Contact. | Doe |
Example Payload for Create a Contact⤓
Create a Work Item
Create a new Work Item | key: createWorkItem
| Input | Notes | Example |
|---|---|---|
| Additional Fields | Additional fields that are not covered by the standard inputs. See Karbon API documentation for more information. | |
| Assignee Email Address | The email address of the user to whom the Work Item is going to be assigned. | example@email.com |
| Client Key | A Karbon-generated value used to identify the existing Client (Contact, Organization or ClientGroup) for whom the Work Item is prepared. | p56mtcBhwb9 |
| Client Type | The type of the Client. | Organization |
| Connection | ||
| Related Client Group Key | A Karbon-generated value used to identify the Client Group of the Client. | 4f3gHnLC323 |
| Start Date | The date and time at which the Work Item should start. | 2022-01-30 |
| Title | The title of the Work Item. | Work Item Title |
Example Payload for Create a Work Item⤓
Create User
Create a new user | key: createUser
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| User's Email | The email of the User. | example@email.com |
| User's Name | The name of the User. | John Doe |
Example Payload for Create User⤓
Delete All Webhook Subscriptions
Deletes all Webhook Subscriptions associated with Contact, Work, and Note | key: deleteAllWebhookSubscriptions
| Input | Notes | Example |
|---|---|---|
| Connection |
Example Payload for Delete All Webhook Subscriptions⤓
Get Contact
Get a single Contact by Contact key | key: getContact
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Contactkey | The Contact key. to get the Contact for. | 4jgPTtcXxwC2 |
| Expand Business Cards | Whether to return the Business Card associated with the Contact. | false |
Example Payload for Get Contact⤓
Get Invoice
Get an invoice by key | key: getInvoice
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Include Line Items | Include additional lineitems invoice properties. | false |
| Invoice Key | The Invoice key to get the Invoice for. | M2dVbCt4RHk |
Example Payload for Get Invoice⤓
Get User
Gets the details of a single User | key: getUser
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| User ID | The unique ID of the User to get. | 2bYxtn94ZSdY |
Example Payload for Get User⤓
Get Webhook
Get a webhook subscription associated with the Karbon entity specified | key: getWebhook
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Webhook Type | The type of the Webhook. | Contact |
Example Payload for Get Webhook⤓
Get Work Item
Gets a Work Item by Work Item key | key: getWorkItem
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Work Item Key | The Work Item key to get the Work Item for. | 2LPSrkzbYrn4 |
Example Payload for Get Work Item⤓
List Contacts
List all Contacts | key: listContacts
| Input | Notes | Example |
|---|---|---|
| Filter | A filter expression to apply to the results. See Karbon API documentation for more information. | FullName eq 'Sample Management Team' |
| Order By | The property to order the results by. | FullName |
| Skip | The number of records to skip when looping over pages of results. If you fetch 100 results, you should skip 0 the first iteration, then 100, 200, 300, etc. until no more records are available. | 100 |
| Top | The number of records to return at once. | 50 |
| Connection | ||
| Get All Data | Turn this on to retrieve all pages of data. $top and $skip will be ignored. | false |
Example Payload for List Contacts⤓
List Invoices
List invoices | key: listInvoices
| Input | Notes | Example |
|---|---|---|
| Order By | The property to order the results by. | FullName |
| Connection | ||
| Include Line Items | Include additional lineitems invoice properties. | false |
Example Payload for List Invoices⤓
List Users
Get a list of Users | key: listUsers
| Input | Notes | Example |
|---|---|---|
| Filter | A filter expression to apply to the results. See Karbon API documentation for more information. | FullName eq 'Sample Management Team' |
| Skip | The number of records to skip when looping over pages of results. If you fetch 100 results, you should skip 0 the first iteration, then 100, 200, 300, etc. until no more records are available. | 100 |
| Top | The number of records to return at once. | 50 |
| Connection | ||
| Get All Data | Turn this on to retrieve all pages of data. $top and $skip will be ignored. | false |
Example Payload for List Users⤓
List Work Items
Receive a list of work items from your tenant | key: listWorkItems
| Input | Notes | Example |
|---|---|---|
| Filter | A filter expression to apply to the results. See Karbon API documentation for more information. | FullName eq 'Sample Management Team' |
| Order By | The property to order the results by. | FullName |
| Skip | The number of records to skip when looping over pages of results. If you fetch 100 results, you should skip 0 the first iteration, then 100, 200, 300, etc. until no more records are available. | 100 |
| Top | The number of records to return at once. | 50 |
| Connection | ||
| Get All Data | Turn this on to retrieve all pages of data. $top and $skip will be ignored. | false |
Example Payload for List Work Items⤓
Raw Request
Send raw HTTP request to Karbon | key: rawRequest
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Data | The HTTP body payload to send to the URL. | {"exampleKey": "Example Data"} |
| File Data | File Data to be sent as a multipart form upload. | [{key: "example.txt", value: "My File Contents"}] |
| File Data File Names | File names to apply to the file data inputs. Keys must match the file data keys above. | |
| Form Data | The Form Data to be sent as a multipart form upload. | [{"key": "Example Key", "value": new Buffer("Hello World")}] |
| Header | A list of headers to send with the request. | User-Agent: curl/7.64.1 |
| Max Retry Count | The maximum number of retries to attempt. Specify 0 for no retries. | 0 |
| Method | The HTTP method to use. | |
| Query Parameter | A list of query parameters to send with the request. This is the portion at the end of the URL similar to ?key1=value1&key2=value2. | |
| Response Type | The type of data you expect in the response. You can request json, text, or binary data. | json |
| Retry On All Errors | If true, retries on all erroneous responses regardless of type. This is helpful when retrying after HTTP 429 or other 3xx or 4xx errors. Otherwise, only retries on HTTP 5xx and network errors. | false |
| Retry Delay (ms) | The delay in milliseconds between retries. This is used when 'Use Exponential Backoff' is disabled. | 0 |
| Timeout | The maximum time that a client will await a response to its request | 2000 |
| URL | Input the path only (/v3/ClientGroups), The base URL is already included (https://api.karbonhq.com). For example, to connect to https://api.karbonhq.com/v3/ClientGroups, only /v3/ClientGroups is entered in this field. | /v3/ClientGroups |
| Use Exponential Backoff | Specifies whether to use a pre-defined exponential backoff strategy for retries. When enabled, 'Retry Delay (ms)' is ignored. | false |
Update a Contact
Partially update a contact by Contact key | key: updateContact
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Contactkey | The Contact key. to update the Contact for. | 4jgPTtcXxwC2 |
| Contact's First Name | The first name of the Contact. | John |
| Contact's Last Name | The last name of the Contact. | Doe |
| Contact's Middle Name | The middle name of the Contact. | John |
| Contact's Preferred Name | The preferred name of the Contact. | John |
| Contact's Salutation | The title to address the Contact. | Mr |
| Contact's Suffix | The suffix of the Contact. | Jr. |
Example Payload for Update a Contact⤓
Update Work Item
Partially update a Work Item by Work Item key | key: updateWorkItem
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Deadline Date | The deadline of the workitem as ISO8601 formated datestamp or timestamp | 2022-01-30 |
| Description | A free form text field to add more information about the Work Item | This is a description. |
| Work Item Key | The Work Item key to update a Work Item by. | 2LPSrkzbYrn4 |
Example Payload for Update Work Item⤓
Changelog
2026-10-20
Updated the Updated Records polling trigger with batching and initial sync support:
- Added opt-in batching to the Updated Records trigger, dispatching each changed record individually or in configured batches; enabling it changes the shape a downstream step receives
- Added an optional Look-back Date input for performing an initial sync of records. The initial sync begins on the first recurrence and backfills every record modified on or after the specified date, seeding each once; later recurrences are unaffected. Leave it empty to start from the first recurrence with no backfill
2026-06-11
Added the Updated Records polling trigger for Contacts and Invoices, which checks for contacts or invoices modified since the last run
2026-04-30
Updated spectral version
2026-04-07
Added trigger documentation
2026-03-31
Various modernizations and documentation updates
2026-03-16
Improved input field documentation with formatted URL links for better readability
2025-10-17
Enhanced webhook lifecycle management with improved entity trigger handling and subscription management
2025-09-18
Added inline data sources for contacts, invoices, organizations, users, and work items to improve data selection and workflow integration