Integrations
Build custom automations and CRM filing workflows with the beta Ardela API.
This guide covers the REST API filing pattern for sending completed recordings to an external system that your team controls.
The API is in pre-launch beta and requires a Pro or Enterprise plan. Test every mapping and destination step before relying on it for filing.
Integration availability
Zapier is available from Settings → Integrations. It authenticates with an Ardela API key, with no separate Ardela OAuth step. The same API patterns in this guide can also be implemented in a service or another HTTP-capable automation tool.
Clio Manage can be connected from Settings → Integrations to import clients and matters. Microsoft 365 and Actionstep remain coming soon. You can still build a custom integration that files Ardela recording content into Clio or another system through their APIs.
Typical filing flow
Poll unsynced recordings → Fetch full content → Create CRM record → Mark filedOptionally add webhooks to wake your integration when recordings complete.
API key setup
Create a key in Settings → API Keys with:
| Integration type | Scopes |
|---|---|
| Read-only monitoring | read:recordings |
| CRM filing (most common) | read:recordings, write:recordings |
| Webhook management | manage:webhooks (in addition to above) |
For Zapier, start from Settings → Integrations, create the key when prompted, then paste it into the Ardela connection in Zapier. See Integrations settings.
Custom automation pattern
1. Find completed recordings
Poll from your own service or an HTTP-capable automation tool:
GET /api/v1/recordings?status=COMPLETED&syncState=unsynced&limit=50- Use recording
idas your deduplication key - Follow
meta.nextCursorwhilemeta.hasMoreistrue - Run polling often enough for your workflow without exceeding the rate limit
The default response is metadata-first. Fetch each recording when you need full content.
2. Fetch recording content
GET /api/v1/recordings/{{id}}Map these fields in downstream steps:
| Field | Use for |
|---|---|
notes[].contentText | Derived plain text for generated notes |
documents[].contentText | Derived plain text for letters and documents |
transcript | Full transcript |
client.referenceNumber | CRM client matching |
matter.referenceNumber | CRM matter matching |
Request ?include=contentJson if your integration needs canonical Tiptap JSON instead of plain text alone.
3. File in the external system
Use the external system's supported API to create its document, note, or communication. Store the returned identifier so you can reconcile it later.
4. Mark the recording as filed
After the CRM step succeeds:
POST /api/v1/recordings/{{id}}/filings{
"provider": "custom-crm",
"externalId": "{{crm_document_id}}",
"externalUrl": "{{crm_document_url}}",
"metadata": {
"workflowId": "{{workflow_id}}"
}
}Example: Custom Clio filing
This is a custom recording-filing pattern. It is separate from the native Clio Manage import in Settings → Integrations, which brings clients and matters into Ardela.
- Find a completed recording with
syncState=unsynced - Fetch it with
GET /recordings/:id - Match the Clio matter using
matter.referenceNumber - Use the Clio API to upload
documents[0].contentTextor create a communication fromnotes[0].contentText - Mark the Ardela recording as filed:
{
"provider": "clio",
"externalId": "doc_123",
"externalUrl": "https://app.clio.com/documents/doc_123",
"metadata": {
"matterId": "matter_456",
"communicationId": "comm_789"
}
}Use metadata for provider-specific IDs that help with reconciliation. Use the same pattern for other systems, but confirm their API and authentication requirements separately.
Optional: webhooks for faster triggers
Instead of polling alone, register a webhook:
POST /api/v1/webhooks
Idempotency-Key: crm-webhook-2026-08-31
Content-Type: application/json
{ "url": "https://your-server.com/ardela", "events": ["recording.completed"] }Your server verifies the signature, fetches full content, and processes the filing. Keep polling as a backup.
See Webhooks.
Performance tips
- Poll
syncState=unsyncedto skip already-filed recordings - Use cursor pagination for catch-up after downtime
- Fetch by ID instead of
include=contenton list for high-volume firms - Avoid aggressive polling and stay within 120 requests per minute per workspace
