Skip to content

External Integration Modules

External Integration Modules

Integration modules require OAuth2 or API key credentials configured via the Links API. Reference the link in the flowlet via linkIdsByType.

9 modules covering all major Clio entities.

Setup: Configure an OAuth2 link for Clio, then reference it: "linkIdsByType": {"clio": "65link-id"}

// List contacts
{"appId": "clio-list-contacts", "args": {"query": "{{ $prev.args.searchName }}", "limit": 25}}
// Output: {"contacts": [{"id":123,"name":"Jane Smith","email":"jane@law.com"},...], "count": 5}
// Get single contact
{"appId": "clio-get-contact", "args": {"id": "{{ $prev.args.clioContactId }}"}}
// Create task
{
"appId": "clio-create-task",
"args": {
"name": "Review contract for {{ $prev.getMatter.description }}",
"dueDate": "{{ $date.addDays 3 }}",
"assigneeId": "{{ $prev.args.assigneeId }}",
"matterId": "{{ $prev.args.matterId }}"
}
}
// List matters
{"appId": "clio-list-matters", "args": {"status": "open", "clientId": "{{ $prev.args.clientId }}"}}
// Get matter detail
{"appId": "clio-get-matter", "args": {"id": "{{ $prev.args.matterId }}"}}
// Upload file to matter
{
"appId": "clio-upload-file",
"args": {
"matterId": "{{ $prev.args.matterId }}",
"filename": "invoice-{{ $prev.args.invoiceId }}.pdf",
"content": "{{ $prev.generatePdf.content }}",
"mimeType": "application/pdf"
}
}

QuickBooks Online

Setup: OAuth2 link for QuickBooks, then "linkIdsByType": {"quickbooks": "65link-id"}

// Query entities (invoices, customers, vendors, etc.)
{
"appId": "qbo-query",
"args": {
"entity": "Invoice",
"query": "SELECT * FROM Invoice WHERE DueDate < '{{ $date.format '2006-01-02' }}' AND Balance > 0",
"limit": 100
}
}
// Output: {"entities": [...], "count": 12}
// Create invoice
{
"appId": "qbo-create-invoice",
"args": {
"customerId": "{{ $prev.getCustomer.qboId }}",
"lineItems": [
{"description": "Consulting services", "amount": 2500, "quantity": 1}
],
"dueDate": "{{ $date.addDays 30 }}",
"memo": "Invoice for January 2024"
}
}
// Get invoice as PDF
{"appId": "qbo-invoice-pdf", "args": {"invoiceId": "{{ $prev.createInvoice.id }}"}}
// Output: {"content": "<base64 PDF>", "path": "tmp/qbo-invoice-123.pdf"}
// Get exchange rates
{"appId": "qbo-exchange-rates", "args": {"baseCurrency": "USD"}}
// Output: {"rates": {"EUR": 0.92, "GBP": 0.79, ...}}

Bexio — Swiss Business Software

Setup: API key link for Bexio, then "linkIdsByType": {"bexio": "65link-id"}

// List/search contacts
{"appId": "bexio-list-contacts", "args": {"query": "{{ $prev.args.searchTerm }}", "type": "company"}}
// Output: {"contacts": [{"id":1,"name":"ACME AG","email":"info@acme.ch"},...]}
// Create invoice
{
"appId": "bexio-create-invoice",
"args": {
"contactId": "{{ $prev.getContact.bexioId }}",
"title": "Invoice {{ $prev.args.invoiceRef }}",
"positions": [
{"text": "Software development", "unit_price": 150, "amount": 8, "unit": "hours"}
],
"paymentType": "bank_transfer",
"dueInDays": 30
}
}

Microsoft Graph — Office 365

Setup: Microsoft OAuth2 (configured via MICROSOFT_CLIENT_ID/SECRET env vars), then "linkIdsByType": {"microsoft": "65link-id"}

// Get new/changed emails (delta query)
{
"appId": "msgraph-mail-delta",
"args": {
"userId": "me",
"folder": "inbox",
"deltaToken": "{{ $kv.get 'mailDeltaToken' }}",
"filter": "isRead eq false"
}
}
// Output: {"messages": [...], "nextDeltaToken": "abc123"}
// Create calendar event
{
"appId": "msgraph-calendar-create",
"args": {
"subject": "Review: {{ $prev.args.documentName }}",
"startDateTime": "{{ $prev.args.meetingDate }}",
"endDateTime": "{{ $date.addHours 1 }}",
"attendees": [{"email": "colleague@company.com"}],
"body": "Please review the attached document before this meeting."
}
}
// Delete calendar event
{"appId": "msgraph-calendar-delete", "args": {"eventId": "{{ $prev.args.eventId }}"}}

Google Sheets

Setup: Google OAuth2 link, then "linkIdsByType": {"google": "65link-id"}

// Create new spreadsheet
{"appId": "gsheets-create", "args": {"title": "Report {{ $date.format '2006-01' }}", "folderId": "drive-folder-id"}}
// Output: {"spreadsheetId": "1BxiM...", "url": "https://docs.google.com/spreadsheets/..."}
// Add columns (headers)
{"appId": "gsheets-add-columns", "args": {"spreadsheetId": "{{ $prev.createSheet.spreadsheetId }}", "sheet": "Sheet1", "columns": ["Date","Customer","Amount","Status"]}}
// Update cells / append rows
{
"appId": "gsheets-update-cells",
"args": {
"spreadsheetId": "{{ $prev.createSheet.spreadsheetId }}",
"sheet": "Sheet1",
"range": "A2",
"values": "{{ $prev.formatData.rows }}"
}
}
// Read cells
{"appId": "gsheets-read", "args": {"spreadsheetId": "1BxiM...", "range": "Sheet1!A1:D100"}}
// Output: {"values": [[...rows...]], "rowCount": 42}