Download OpenAPI specification:
Cloverleaf Search API running on a python FastAPI server
Search for meetings based on search terms and filter parameters.
| search-terms | Array of strings |
| must-include-terms | Array of strings |
| date-range required | Array of integers |
| campaign-id | integer |
| count | integer Default: 25 |
| page | integer Default: 1 |
| sort-by | string Default: "hits" |
| proximity | integer |
| exclude | string |
| use-territory | boolean Default: false |
| filter-params | string |
| user-id | integer |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
{- "meeting_hits": [
- {
- "already_viewed": true,
- "hits": 0,
- "id": null,
- "terms": [
- {
- "count": 0,
- "term": "string",
- "transcript_hits": {
- "property1": 0,
- "property2": 0
}
}
], - "time": null,
- "transcripts": [
- {
- "end_time": null,
- "id": "string",
- "meeting_id": 0,
- "person": { },
- "raw_text": "string",
- "speaker": "string",
- "start_time": null,
- "text": "string",
- "voice_id": 0
}
]
}
], - "meetings": [
- {
- "city": "string",
- "county": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "description": "string",
- "discarded_at": "2019-08-24T14:15:22Z",
- "duration_seconds": 0,
- "id": 0,
- "important_words": null,
- "is_spam": true,
- "needs_run": true,
- "organization_id": 0,
- "organization_name": "string",
- "published_at": "2019-08-24T14:15:22Z",
- "source_video_url": "string",
- "spam_certainty": 0,
- "state": "string",
- "thumbnail_url": "string",
- "title": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "user_marked_spam": true
}
], - "total_hits": 0,
- "total_meeting_hits": 0
}Returns the campaigns that the user has access to.
Without pagination params the response is the legacy bare array of every
campaign. With page and/or per-page (the other defaulting to 1 / 25)
it becomes {"campaigns": [...], "total": N, "page": p, "per_page": pp}
so callers can fetch large accounts incrementally.
| page | integer >= 1 |
| per-page | integer [ 1 .. 100 ] |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
[- {
- "campaign_type": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "data": { },
- "id": 0,
- "name": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "use_territory": true,
- "user_id": 0,
- "user_organization_id": 0
}
]Search for meetings based on search terms and filter parameters.
| campaign_id required | integer |
| date-range | Array of integers |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
{- "meeting_hits": [
- {
- "already_viewed": true,
- "hits": 0,
- "id": null,
- "terms": [
- {
- "count": 0,
- "term": "string",
- "transcript_hits": {
- "property1": 0,
- "property2": 0
}
}
], - "time": null,
- "transcripts": [
- {
- "end_time": null,
- "id": "string",
- "meeting_id": 0,
- "person": { },
- "raw_text": "string",
- "speaker": "string",
- "start_time": null,
- "text": "string",
- "voice_id": 0
}
]
}
], - "meetings": [
- {
- "city": "string",
- "county": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "description": "string",
- "discarded_at": "2019-08-24T14:15:22Z",
- "duration_seconds": 0,
- "id": 0,
- "important_words": null,
- "is_spam": true,
- "needs_run": true,
- "organization_id": 0,
- "organization_name": "string",
- "published_at": "2019-08-24T14:15:22Z",
- "source_video_url": "string",
- "spam_certainty": 0,
- "state": "string",
- "thumbnail_url": "string",
- "title": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "user_marked_spam": true
}
], - "total_hits": 0,
- "total_meeting_hits": 0
}NLS search scoped to a campaign, using its pre-computed embedding.
| campaign_id required | integer |
| page | integer Default: 1 |
| per-page | integer Default: 25 |
| k | integer Default: 100 |
| date-range | Array of integers |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
{- "already_viewed": { },
- "meeting_hits": [
- {
- "already_viewed": true,
- "best_score": 0,
- "hits": 0,
- "id": null,
- "terms": [
- { }
], - "time": null,
- "transcripts": [
- { }
]
}
], - "meetings": [
- {
- "city": "string",
- "county": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "description": "string",
- "discarded_at": "2019-08-24T14:15:22Z",
- "duration_seconds": 0,
- "id": 0,
- "important_words": null,
- "is_spam": true,
- "needs_run": true,
- "organization_id": 0,
- "organization_name": "string",
- "published_at": "2019-08-24T14:15:22Z",
- "source_video_url": "string",
- "spam_certainty": 0,
- "state": "string",
- "thumbnail_url": "string",
- "title": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "user_marked_spam": true
}
], - "total_hits": 0,
- "total_meeting_hits": 0
}Lists Contacts in DB with optional filtering by city, county, and state names.
Location parameters support multiple values separated by commas:
| offset | integer Default: 0 |
| limit | integer Default: 50 |
| organization_id | integer |
| city_name | string |
| county_name | string |
| state_name | string |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
[- {
- "city_geoid": 0,
- "city_lat": 0,
- "city_long": 0,
- "city_name": "string",
- "county_fips_code": 0,
- "county_lat": 0,
- "county_long": 0,
- "county_name": "string",
- "email_address": "string",
- "first_name": "string",
- "id": 0,
- "last_name": "string",
- "organization_id": 0,
- "organization_name": "string",
- "phone_number": "string",
- "removed_at": "string",
- "role": "string",
- "salesforce_account_ids": [
- "string"
], - "state_name": "string",
- "title": "string"
}
]Count transcript hits for a single term, optionally scoped to the user's territory.
| term required | string |
| use-territory | boolean Default: false |
| date-range required | Array of integers |
| search-terms | Array of strings |
| must-include-terms | Array of strings |
| user-id | integer |
| filter-params | string |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
0| use-territory | boolean Default: false |
| time-unit | string Enum: "day" "week" "month" |
| geography-type | string Enum: "city" "county" "state" |
| search-terms | Array of strings |
| must-include-terms | Array of strings |
| filter-params | string |
| date-range required | Array of integers |
| user-id | integer |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
[- {
- "hits": null,
- "time": null
}
]Lists completed paginated insights for a user. The caller's user_organization must match the target user's user_organization or the request is rejected with 403.
| user_id required | integer Filter insights by ai.insights.user_id |
| date_range | Array of strings <date-time> [ items <date-time > ] Optional inclusive date window. Both values must be ISO 8601 datetimes. Omit to skip date filtering. |
| signal_score_threshold | integer Minimum ai.insights.score; rows below the threshold are excluded |
| offset | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 200 ] Default: 50 |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
[- {
- "ai_feature_name": "string",
- "channel_name": "string",
- "city_name": "string",
- "county_name": "string",
- "created_at": "string",
- "meeting_id": 0,
- "meeting_published_at": "string",
- "meeting_title": "string",
- "result": "string",
- "salesforce_account_ids": [
- "string"
], - "score": 0,
- "state_name": "string",
- "summary": "string",
- "updated_at": "string"
}
]Natural-language search over meeting document embeddings.
index-name scopes by document_type:
meeting-documents -> meeting types,
legislation-documents -> legislative types,
all-documents -> both.
| nls-query required | string non-empty |
| index-name | string Enum: "meeting-documents" "legislation-documents" "all-documents" |
| meeting-document-ids | Array of integers |
| page | integer Default: 1 |
| per-page | integer Default: 25 |
| k | integer Default: 100 |
| use-territory | boolean Default: false |
| filter-params | string |
| date-range | Array of integers |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
{- "document_hits": [
- {
- "best_score": 0,
- "bill_id": 0,
- "chunks": [
- {
- "id": "string",
- "score": 0,
- "text": "string"
}
], - "document_type": "string",
- "hits": 0,
- "id": 0,
- "legislative_body_id": 0,
- "meeting_date": 0,
- "organization_id": 0,
- "source": "string"
}
], - "total_document_hits": 0,
- "total_hits": 0
}Searches for a meeting transcript based on search terms.
When person_id is provided, restrict to transcripts spoken by that
person. The person→voices translation happens here (server-side) so
callers don't have to know about per-meeting voice ids, which are an
internal artifact that turns over whenever a meeting reprocesses.
| meeting_id required | integer |
| search-terms required | Array of strings |
| person-id | integer |
| title-search-terms | Array of strings |
| organization-search-terms | Array of strings |
| proximity | integer |
| must-have-terms | Array of strings |
| exclude | string |
{- "terms": [
- {
- "hits": 0,
- "term": "string",
- "transcripts": [ ]
}
], - "total_hits": 0,
- "transcripts": { }
}Searches for meeting transcripts and returns buffered clips around each hit.
| meeting_id required | integer |
| search-terms required | Array of strings |
| buffer required | integer |
| voice-ids | Array of integers |
| title-search-terms | Array of strings |
| organization-search-terms | Array of strings |
| proximity | integer |
| must-have-terms | Array of strings |
| exclude | string |
{- "buffer_seconds": 0,
- "clips": [
- {
- "end_time": 0,
- "hit_count": 0,
- "start_time": 0,
- "transcripts": [
- {
- "id": "string",
- "is_hit": true,
- "speaker_name": "string",
- "text": "string",
- "voice_id": 0
}
]
}
], - "total_hits": 0
}Natural-language search over transcript embeddings, scoped to a single meeting.
| meeting_id required | integer |
| nls-query | string |
| k | integer Default: 100 |
{- "best_score": 0,
- "meeting_id": 0,
- "total_hits": 0,
- "transcripts": {
- "property1": {
- "id": "string",
- "raw_text": "string",
- "score": 0,
- "start_time": null,
- "text": "string"
}, - "property2": {
- "id": "string",
- "raw_text": "string",
- "score": 0,
- "start_time": null,
- "text": "string"
}
}
}Natural-language search with buffered clips around each hit.
Accepts zero or more explicit nls-query parameters. When user-id
is given, the user's about-derived queries (goals, pain points,
competitors, products/services) are added server-side, reusing the
sectioned embeddings cloverleaf precomputes into
users.about_embeddings; only queries missing a stored vector are
batch-embedded, and those are persisted back per section. Each query's
kNN results are grouped into clips independently.
| meeting_id required | integer |
| buffer required | integer |
| nls-query | Array of strings |
| k | integer Default: 100 |
| user-id | integer |
{- "buffer_seconds": 0,
- "results": [
- {
- "clips": [
- {
- "end_time": 0,
- "hit_count": 0,
- "start_time": 0,
- "transcripts": [
- {
- "id": "string",
- "is_hit": true,
- "speaker_name": "string",
- "text": "string",
- "voice_id": 0
}
]
}
], - "query": "string",
- "total_hits": 0
}
]
}Returns all transcripts for a meeting.
| meeting_id required | integer |
| user-id | integer |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
[- {
- "end_time": null,
- "id": "string",
- "meeting_id": 0,
- "person": { },
- "raw_text": "string",
- "speaker": "string",
- "start_time": null,
- "text": "string",
- "voice_id": 0
}
]Returns all transcripts for a meeting with organization geography and meeting details.
| meeting_id required | integer |
| user-id | integer |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
{- "channel_type_name": "string",
- "city_geoid": 0,
- "city_lat": 0,
- "city_long": 0,
- "city_name": "string",
- "county_fips_code": 0,
- "county_lat": 0,
- "county_long": 0,
- "county_name": "string",
- "meeting_published_at": "2019-08-24T14:15:22Z",
- "meeting_title": "string",
- "org_name": "string",
- "organization_name": "string",
- "published_at": "2019-08-24T14:15:22Z",
- "salesforce_account_ids": [ ],
- "state_name": "string",
- "title": "string",
- "transcripts": [
- { }
]
}Natural-language search over transcript embeddings.
| nls-query required | string non-empty |
| page | integer Default: 1 |
| per-page | integer Default: 25 |
| k | integer Default: 100 |
| use-territory | boolean Default: false |
| filter-params | string |
| date-range | Array of integers |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
{- "already_viewed": { },
- "meeting_hits": [
- {
- "already_viewed": true,
- "best_score": 0,
- "hits": 0,
- "id": null,
- "terms": [
- { }
], - "time": null,
- "transcripts": [
- { }
]
}
], - "meetings": [
- {
- "city": "string",
- "county": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "description": "string",
- "discarded_at": "2019-08-24T14:15:22Z",
- "duration_seconds": 0,
- "id": 0,
- "important_words": null,
- "is_spam": true,
- "needs_run": true,
- "organization_id": 0,
- "organization_name": "string",
- "published_at": "2019-08-24T14:15:22Z",
- "source_video_url": "string",
- "spam_certainty": 0,
- "state": "string",
- "thumbnail_url": "string",
- "title": "string",
- "updated_at": "2019-08-24T14:15:22Z",
- "user_marked_spam": true
}
], - "total_hits": 0,
- "total_meeting_hits": 0
}| anchor_terms | Array of strings |
| organizations | Array of strings |
| cities | Array of strings |
| count | integer Default: 25 |
| counties | Array of strings |
| industry | Array of strings |
| order | string Default: "desc" |
| page | integer Default: 0 |
| published_after | string |
| sort | string Default: "date" |
| states | Array of strings |
| terms | Array of strings |
| channel_types | Array of integers |
{- "opportunities": [
- {
- "actionability": "string",
- "actionable_date": "string",
- "channel_id": 0,
- "channel_name": "string",
- "channel_type": null,
- "city_name": "string",
- "county_name": "string",
- "created_at": "string",
- "description": "string",
- "id": 0,
- "key_decision_maker": "string",
- "meeting_id": 0,
- "naics_code": { },
- "name": "string",
- "published_at": "string",
- "state_name": "string"
}
], - "total": 0
}| meeting_id required | integer |
| search-terms required | Array of strings |
| search-type | string Default: "standard" |
{- "terms": [
- {
- "hits": 0,
- "term": "string",
- "transcripts": [ ]
}
], - "total_hits": 0,
- "transcripts": { }
}| search-terms | Array of strings |
| page | integer Default: 1 |
| per-page | integer Default: 25 |
| sort-by | string Default: "score" |
| sort-dir | string Default: "desc" |
| use-territory | boolean Default: false |
| filter-params | string |
| date-range | Array of integers |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
{- "purchases": [
- {
- "amount": 0,
- "department": "string",
- "end_date": "string",
- "id": "string",
- "organization_ids": [ ],
- "organization_names": [ ],
- "purchase_dataset_id": 0,
- "purchase_description": "string",
- "purchase_name": "string",
- "score": 0,
- "source_row_id": null,
- "start_date": "string",
- "transaction_date": "string",
- "vendor_name": "string"
}
], - "total_hits": 0
}| nls-query required | string non-empty |
| page | integer Default: 1 |
| per-page | integer Default: 25 |
| k | integer Default: 100 |
| use-territory | boolean Default: false |
| filter-params | string |
| date-range | Array of integers |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
{- "page": 0,
- "per_page": 0,
- "purchases": [
- {
- "amount": 0,
- "department": "string",
- "end_date": "string",
- "id": "string",
- "organization_ids": [ ],
- "organization_names": [ ],
- "purchase_dataset_id": 0,
- "purchase_description": "string",
- "purchase_name": "string",
- "score": 0,
- "source_row_id": null,
- "start_date": "string",
- "transaction_date": "string",
- "vendor_name": "string"
}
], - "total_hits": 0
}Per-user usage stats for the caller's user_organization: signal delivery/open/click counts, detail views, searches, and campaign subscriptions.
| start_date required | string Inclusive start of the reporting window, as a UTC calendar day (ISO 8601 date, YYYY-MM-DD). Expands to 00:00:00 UTC. |
| end_date required | string Inclusive end of the reporting window, as a UTC calendar day (ISO 8601 date, YYYY-MM-DD). Expands to 23:59:59.999999 UTC. |
| x-api-key | string |
| X-Apigateway-Api-Userinfo | string |
| authorization | string |
[- {
- "campaign_subscriptions": 0,
- "email": "string",
- "meeting_and_document_detail_views": 0,
- "searches_performed": 0,
- "signals_click_rate": 0,
- "signals_delivered": 0,
- "signals_open_rate": 0
}
]