We use cookies for essential functionality and, with your consent, analytics. Privacy Policy

IceCubes
IceCubes|Documentation
Multi-Meeting AI Chat
Changelog

REST API Reference

Complete reference for the IceCubes REST API. All endpoints require API key authentication.

Base URL: https://icecubes-app.fly.dev/api/public

Include your API key in every request:

Authorization: Bearer ik_a1b2c3d4_e5f6789012345678901234567890abcdef01234567

GET /api/public/user

Returns your user profile and meeting statistics.

curl https://icecubes-app.fly.dev/api/public/user \
  -H "Authorization: Bearer YOUR_API_KEY"

Response:

{
  "id": "user123",
  "email": "you@company.com",
  "displayName": "Your Name",
  "organizationId": "org123",
  "meetingCount": 42,
  "createdAt": "2024-01-15T10:00:00.000Z"
}

GET /api/public/meetings

List and search your meetings.

ParameterTypeDescription
limitnumberMax results (default 20, max 100)
offsetnumberSkip N results for pagination
keywordstringSearch by meeting title
fromISO dateMeetings after this date
toISO dateMeetings before this date
participantstringFilter by participant email
scopestringpersonal (default) or org to include team meetings
tagstringFilter by tag ID
hubspot_deal_idstringFilter by HubSpot deal ID. Requires HubSpot connected.
salesforce_opportunity_idstringFilter by Salesforce opportunity ID. Requires Salesforce connected.
curl "https://icecubes-app.fly.dev/api/public/meetings?limit=5&from=2024-06-01" \
  -H "Authorization: Bearer YOUR_API_KEY"

Each meeting in the response includes a crmSync field (or null) with linked CRM deal/opportunity info:

"crmSync": {
  "hubspot": {
    "dealId": "12345",
    "dealName": "Pinnacle Corp - Enterprise",
    "dealStage": "negotiation"
  }
}

CRM filter params require the corresponding CRM integration to be connected to your organization. If you use hubspot_deal_id but only Salesforce is connected, you will receive a 400 error with guidance.

GET /api/public/meetings/:id

Get full meeting details including AI summary, key points, and action items.

curl https://icecubes-app.fly.dev/api/public/meetings/MEETING_ID \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /api/public/meetings/:id/transcript

Get the full transcript with speaker names and timestamps.

curl https://icecubes-app.fly.dev/api/public/meetings/MEETING_ID/transcript \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /api/public/meetings/:id/insights

Get AI-extracted sales insights for a meeting.

ParameterTypeDescription
categorystringFilter by category: next_step, objection_budget, objection_authority, objection_need, objection_time, pricing, challenge, meddic_metrics, meddic_economic_buyer, meddic_decision_criteria, meddic_decision_process, meddic_identify_pain, meddic_champion
curl "https://icecubes-app.fly.dev/api/public/meetings/MEETING_ID/insights?category=pricing" \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /api/public/meetings/:id/notes

Get meeting notes.

curl https://icecubes-app.fly.dev/api/public/meetings/MEETING_ID/notes \
  -H "Authorization: Bearer YOUR_API_KEY"

Response:

{
  "content": "Meeting notes...",
  "updatedAt": "...",
  "version": 3
}

PUT /api/public/meetings/:id/notes

Update meeting notes.

curl -X PUT https://icecubes-app.fly.dev/api/public/meetings/MEETING_ID/notes \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content":"Updated notes content"}'

GET /api/public/action-items

List action items across all meetings or for a specific meeting.

ParameterTypeDescription
limitnumberMax results (default 20, max 100)
offsetnumberSkip N results for pagination
meetingIdstringFilter by meeting
completedbooleanFilter by completion status
curl "https://icecubes-app.fly.dev/api/public/action-items?completed=false&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

POST /api/public/action-items

Create a new action item.

FieldTypeDescription
meetingIdstringRequired. The meeting ID.
textstringRequired. Action item text.
assigneeEmailstringOptional. Assignee email.
dueDateISO dateOptional. Due date.
curl -X POST https://icecubes-app.fly.dev/api/public/action-items \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"meetingId":"abc123","text":"Follow up with client about pricing"}'

PATCH /api/public/action-items/:id

Update an action item. All body fields are optional.

FieldTypeDescription
completedbooleanMark as complete/incomplete
textstringUpdated text
assigneeEmailstringUpdated assignee
dueDateISO dateUpdated due date
curl -X PATCH https://icecubes-app.fly.dev/api/public/action-items/ITEM_ID \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"completed":true}'

GET /api/public/search

Full-text search across transcripts, summaries, action items, notes, and key points.

ParameterTypeDescription
qstringSearch query (required)
typestringFilter: transcript, summary, action_item, decision, note, key_point
speakerstringFilter by speaker name
limitnumberMax results (default 20, max 50)
offsetnumberSkip N results for pagination
curl "https://icecubes-app.fly.dev/api/public/search?q=competitor+pricing&type=transcript&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /api/public/contacts

List contacts from your meetings.

ParameterTypeDescription
searchstringSearch by name or email
domainstringFilter by email domain
limitnumberMax results (default 25, max 100)
cursorstringPagination cursor from previous response
curl "https://icecubes-app.fly.dev/api/public/contacts?search=john&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /api/public/tags

List all available tags (organization and personal).

curl https://icecubes-app.fly.dev/api/public/tags \
  -H "Authorization: Bearer YOUR_API_KEY"

Error Handling

All errors follow a consistent JSON format:

{
  "error": {
    "code": "not_found",
    "message": "Meeting not found"
  }
}
HTTP StatusCodeDescription
401unauthorizedMissing, invalid, or revoked API key
403forbiddenNot authorized to access this resource
404not_foundResource not found
500internal_errorServer error