Manage dynamic CRM pipelines in Dalil AI — discover available pipelines, retrieve their fields and stages, and create/update/delete pipeline records. Endpoints are dynamic (namePlural varies per pipeline); always discover before operating.
Dalil AI: Pipeline API Skills
Quick Reference
Base URL:
https://app.usedalil.aiAuth:
Authorization: Bearer {apiKey}Content-Type:
application/json(POST/PATCH requests only)Accept:
application/json(GET requests)Resource path:
/rest/{namePlural}(dynamic per pipeline)
GraphQL search (POST /graphql):
Uses
searchPipelinequery (NOTsearch) — requires bothsearchInput: String!andnameSingular: String!variablessearchInputis a plainString!variable — do NOT pass as an object (causes type error)limitmust be hardcoded in the query string — do NOT pass as a$limitvariable (causes type error)Returns IDs only — always follow up with REST to fetch full records
Important: Dynamic Endpoints
Pipeline endpoints are NOT fixed. Each pipeline has its own namePlural (e.g., startupFundraisings, salesPipelines). You MUST discover available pipelines first.
Discovery (Required First Step)
List all pipelines
Get pipeline fields
Endpoints
Operation | Method | Path | Required Fields |
|---|---|---|---|
Create | POST |
|
|
Get | GET |
|
|
List | GET |
| — |
Update | PATCH |
|
|
Delete | DELETE |
|
|
Search | POST |
|
|
Create Pipeline Record
Request Body
Required Fields
recordId(UUID) — Parent record ID (Company or Person, depends on pipeline type)
Custom Properties
All other fields are pipeline-specific. Discover them via:
Field types follow the same rules as other entities:
SELECT fields: UPPER_SNAKE_CASE values
CURRENCY fields: amounts in micros
DATE_TIME fields: ISO 8601 format
BOOLEAN fields: true/false
Update Pipeline Record
Send only custom properties to update.
Get Pipeline Record
Default depth is 1 (includes parent record).
List Pipeline Records
Default depth is 1.
Delete Pipeline Record
Search Pattern
Pipeline search uses a DIFFERENT GraphQL query: searchPipeline (not search).
Step 1 — GraphQL:
POST to https://app.usedalil.ai/graphql
Step 2 — Fetch:
Full Workflow
Filter Examples
Gotchas
Endpoints are dynamic — The URL path comes from
pipelineMetadata.namePlural. There is no fixed/rest/pipelinesendpoint for records.Must discover pipelines first — Call
GET /rest/metadata/pipelinesbefore any pipeline operations.Uses different GraphQL query — Pipeline search uses
searchPipeline, notsearch.GraphQL requires
nameSingular— The search query needs the pipeline's singular name, not plural.Parent record is required on create —
recordIdlinks the pipeline record to a Company or Person.Default depth is 1 — Pipeline records default to depth 1 (includes parent record).
Custom fields vary — Each pipeline has unique fields. Always check metadata before creating/updating.
SELECT values are UPPER_SNAKE_CASE — Same as other entities:
FUNDED,SERIES_A,DEMO, etc.Currency amounts in micros — Same rule: multiply by 1,000,000.
GraphQL
limitmust be hardcoded, not a variable — Passing$limit: Intas a variable causes a type error. Inline it directly:limit: 5.GraphQL search returns IDs only — Follow up with
GET /rest/{namePlural}?filter=id[in]:[id1,id2]to fetch full records.URL-encode GET filter params — Filter strings contain special characters (
[,],:) that break manually constructed URLs. Use URL encoding when making requests (e.g.,curl -G --data-urlencode "filter=...").