Skip to main content

API overview

The Expedify public API is one versioned, scoped gateway — /v1 — over the whole product: CRM objects, Workflows, Knowledge Base, Analytics, Channels, Settings, and Blueprints. Every capability is also available to AI agents over MCP with the same key and scopes.

Base URL​

https://api.expedify.ai/v1

All requests use TLS. Authenticate with a Bearer agx_ API key — see Authentication.

What's here​

ModuleResource
CRM Objects/v1/objects/{entity} — contacts, companies, deals, tasks, notes, activities, products, deal payments, deal payment schedules (CRUD, list/search, associations, batch writes)
Workflows/v1/workflows/* — author, validate, run, and debug automations
Automation/v1/blueprints/*, /v1/workflows/{id}/blueprint — read, author, and validate the visual Blueprint behind a workflow
Knowledge Base/v1/knowledge-bases/* — KBs + documents, semantic search, RAG ask
Analytics/v1/analytics/* — datasets, charts, dashboards, SQL / NL→SQL queries
Channels/v1/templates/*, /v1/assets/*, /v1/segments/*, /v1/campaigns/*, /v1/communications/* — marketing templates and assets, audience segments, campaigns (incl. send), and read-only voice / WhatsApp / SMS history
Settings/v1/integrations/*, /v1/webhooks/* — browse and test connected integrations (never exposes credentials); manage incoming + outgoing webhooks
Search/v1/search — cross-entity find-by-name over workflows, charts, dashboards, and datasets

Uniform resource model​

Standard CRM entities are served through one shape — {entity} is a path parameter:

GET    /v1/objects/{entity}            list + filter + search
POST /v1/objects/{entity} create
GET /v1/objects/{entity}/{id} read
PATCH /v1/objects/{entity}/{id} partial update
DELETE /v1/objects/{entity}/{id} delete
GET /v1/objects/{entity}/{id}/{target} list associated records
POST /v1/objects/{entity}/{id}/associations/{target}/{tid} link
DELETE /v1/objects/{entity}/{id}/associations/{target}/{tid} unlink
POST /v1/objects/{entity}/batch/create create up to 200 atomically
POST /v1/objects/{entity}/batch/update update up to 200 atomically
POST /v1/objects/{entity}/batch/delete delete up to 200 atomically

{entity} is one of contacts, companies, deals, tasks, notes, activities, products, deal_payments, deal_payment_schedules. See Bulk operations for the batch semantics.

The envelope​

Every endpoint shares one shape.

Lists are paginated (offset-based for v1):

{
"data": [ /* records */ ],
"pagination": { "limit": 50, "offset": 0, "total": 128, "has_more": true }
}

?limit= (1–200, default 50) and ?offset= page through results.

Errors are always:

{ "error": { "type": "not_found", "message": "…", "request_id": "…" } }

Quote the request_id in support requests. Standard statuses: 400 invalid request, 401 missing/bad key, 403 scope denied, 404 not found, 422 validation, 429 rate limited.

On any list endpoint:

  • Free-text: ?q=acme — searches all text fields (and custom-field values).
  • Field filters: ?field__op=value — operators eq, neq, gt, gte, lt, lte, like, in, nin, is_empty, is_not_empty. e.g. ?lead_score__gte=50, ?lead_status__in=new,qualified.
  • Custom fields: ?cf.<key>=value — filter on a custom field.
  • AND/OR: ?match=any ORs the field filters (default all).
  • Sort: ?sort=created_at&order=desc.

Versioning & stability​

/v1 is a contract. Changes are additive within the version; a breaking change ships as /v2 with an overlap + sunset — /v1 shape never silently breaks. A checked-in golden contract test guards the surface (REST + MCP) on every change.

Same call, three ways​

Every operation is available as REST, an SDK call, and an MCP tool. See the Quickstart for the same first call shown all three ways.