{"title":"Dutify Hub API — Resource Tags","hint":"Lightweight tag list. For all endpoints with method/path/summary, use GET https://dutify.ai/api/v1/api-catalog/detailed. For full details on a specific resource (parameters, DTOs, response schemas), use GET https://dutify.ai/api/v1/api-catalog/{tag}. Concrete request/response example payloads are NOT inlined in the detail response — fetch them on demand from GET https://dutify.ai/api/v1/api-catalog/{tag}/examples, optionally filtered by ?operationId=... and ?name=... for a specific example.","authentication":"Hub data-access endpoints accept either a JWT (browser session) or an API key (X-API-Key: dh_live_…). API-key access is scope-gated; see https://dutify.ai/hub/integration → API Keys.","catalogUrl":"https://dutify.ai/api/v1/api-catalog","services":[{"name":"Hub","description":"Workspace settings, integrations, members, call recordings + transcripts, and Lens chat. API-key callers see only the endpoints whitelisted by ApiKeyScopeFilter.","baseUrl":"https://dutify.ai/api","tagCount":75,"tags":[{"tag":"Administrative recording recovery","description":"Requires a dutify-admin identity; workspace API keys cannot recover recordings.","operationCount":2},{"tag":"Ai Flow Function Resource","description":"","operationCount":2},{"tag":"Ai Method Resource","description":"","operationCount":1},{"tag":"Auth Resource","description":"","operationCount":8},{"tag":"Beta Waitlist Resource","description":"","operationCount":1},{"tag":"Calendar Resource","description":"","operationCount":3},{"tag":"Changed Task Resource","description":"","operationCount":6},{"tag":"Task Action Resource","description":"","operationCount":3},{"tag":"Demo Resource","description":"","operationCount":10},{"tag":"Demo User Resource","description":"","operationCount":1},{"tag":"Email Resource","description":"","operationCount":1},{"tag":"Feedback Resource","description":"","operationCount":2},{"tag":"Google Call Resource","description":"","operationCount":9},{"tag":"Lens","description":"Programmatic Lens chat — same conversational AI that powers Hub's Slack/Teams bots. Runs the full Lens pipeline (router → fan-out / single-route / agent loop → synthesis) against the workspace's knowledge (recordings, calls, transcripts, integrated SaaS data). API-key scope: lens:chat (exact path /lens/chat only — no other lens path is exposed).","operationCount":1},{"tag":"Lens Streaming Resource","description":"","operationCount":1},{"tag":"Lens Experiment Resource","description":"","operationCount":5},{"tag":"Lens Feedback Resource","description":"","operationCount":1},{"tag":"Live Transcription Resource","description":"","operationCount":1},{"tag":"Chat Ingestion Resource","description":"","operationCount":5},{"tag":"Recordings","description":"Recording-level operations: progress, summary regeneration, full reprocess, and short-lived signed URLs to download audio / video / preview frames. Recording IDs are integers (Long). API-key scopes: recordings:read, recordings:write.","operationCount":10},{"tag":"Reporting Resource","description":"","operationCount":1},{"tag":"Settings Resource","description":"","operationCount":9},{"tag":"Share Team Resource","description":"","operationCount":6},{"tag":"Slack Resource","description":"","operationCount":2},{"tag":"Slack O Auth Resource","description":"","operationCount":1},{"tag":"Subscription Resource","description":"","operationCount":2},{"tag":"Tag Resource","description":"","operationCount":6},{"tag":"Task Resource","description":"","operationCount":1},{"tag":"Teams Call Resource","description":"","operationCount":9},{"tag":"Test Resource","description":"","operationCount":8},{"tag":"Token Usage Resource","description":"","operationCount":12},{"tag":"Transcription Resource","description":"","operationCount":1},{"tag":"User Resource","description":"","operationCount":8},{"tag":"User Webhooks","description":"Personal webhooks fired when a meeting finishes processing. Each delivery is a POST of the processed meeting (the sections the webhook selected), signed with X-Dutify-Signature (HMAC-SHA256 of the body with the webhook's secret) when a secret is set. API-key scopes: webhooks:read (list, get, deliveries) or webhooks:write (create, update, delete, test), each together with recordings:read, since a webhook carries meeting content. Personal keys only: workspace keys cannot use them. A webhook created through a key is bound to the key's workspace: it only receives meetings of that workspace, and a key only sees webhooks bound to its own workspace.","operationCount":7},{"tag":"Calls","description":"User-facing recorded calls/meetings — the metadata wrapper around a recording (name, attendees, summary, key points, action items). Every recording in a response carries the requesting user's own version of summary, keyPoints, actionItems and enhancedNotes (generated from their workspace prompt, their per-call prompt, their notes and note template), and only their own userNotes. Includes the 'send selection to Jira/ClickUp/Airtable' actions that turn extracted action items into tasks. Call IDs are integers; call UUIDs (used by selection endpoints) are strings on the same DTO. API-key scopes: recordings:read, recordings:write.","operationCount":13},{"tag":"Hub Account Deletion Resource","description":"","operationCount":3},{"tag":"Reference Data","description":"Public OpenAPI catalog for Hub. Three tiers: tag list, per-tag detail (parameters + DTO schemas), and per-tag examples (concrete request/response payloads). All endpoints are unauthenticated — they describe Hub's API surface but reveal no workspace data.","operationCount":4},{"tag":"Current Api Key Resource","description":"","operationCount":1},{"tag":"Stripe Webhook Resource","description":"","operationCount":1},{"tag":"Calendar","description":"Calendar events and their custom prompts, proxied to calendar-events-api. A recurring occurrence can carry two prompts and BOTH are applied when the bot records it: the series prompt (shared by every occurrence) and the occurrence prompt (that one date only). When both are set the meeting receives them combined as 'series custom prompt: …' followed by 'occurrence custom prompt: …'; when only one is set it is used as-is. Prompts are per user. Each participant's version of the meeting's summary, key points, action items and enhanced notes is generated from their workspace prompt plus their own series and occurrence prompts plus their own notes and note template; participants with identical inputs share one version, and a participant with none of them gets the default version. Actor-scoped: you see and change the calendar of the user who owns the key. API-key scopes: calendar:read, recordings:write.","operationCount":5},{"tag":"Hub Billing Resource","description":"","operationCount":6},{"tag":"Integration Resource V 1","description":"","operationCount":5},{"tag":"Internal Account Deletion Fence Resource","description":"","operationCount":1},{"tag":"Internal Api Key Resource","description":"","operationCount":2},{"tag":"Internal Recording Workspace Resource","description":"","operationCount":1},{"tag":"Internal Api Key Entitlement Resource","description":"","operationCount":1},{"tag":"Workspace Migration Resource","description":"","operationCount":1},{"tag":"Lens Chat Resource","description":"","operationCount":1},{"tag":"Tenant Workspace Connection Resource","description":"","operationCount":8},{"tag":"Lens Credits Resource","description":"","operationCount":5},{"tag":"Lens Microservice Resource","description":"","operationCount":3},{"tag":"Lens Proposal Resource","description":"","operationCount":2},{"tag":"Slack Bot Resource","description":"","operationCount":1},{"tag":"Lens Task Resource","description":"","operationCount":1},{"tag":"Ms Teams Resource","description":"","operationCount":3},{"tag":"Personal Api Key Resource","description":"","operationCount":1},{"tag":"User View Resource","description":"","operationCount":4},{"tag":"Workspaces","description":"Workspace listing, membership, ownership. API-key callers see only the workspace this key was provisioned for; list endpoints return that single entry.","operationCount":8},{"tag":"Workspace Invitation Resource V 1","description":"","operationCount":7},{"tag":"Workspace Invitation Public Resource V 1","description":"","operationCount":1},{"tag":"Api Key Resource","description":"","operationCount":5},{"tag":"Integrations","description":"Connected vendor systems for the workspace (Slack, Jira, ClickUp, Airtable, Notion, Gmail, Google Calendar, GitHub, ...). API-key callers can list connections (integrations:read); OAuth/connect flows require interactive consent and are JWT-only.","operationCount":4},{"tag":"Click Up Resource V 1","description":"","operationCount":4},{"tag":"Composio O Auth Resource","description":"","operationCount":4},{"tag":"Confluence Resource V 1","description":"","operationCount":5},{"tag":"Pm Resource V 1","description":"","operationCount":5},{"tag":"Workspace Settings","description":"Per-workspace configuration: preferred integration target for new actions and the custom prompt prepended to every recording's LLM analysis. API-key scopes: workspace-settings:read, workspace-settings:write.","operationCount":4},{"tag":"Airtable Resource V 2","description":"","operationCount":4},{"tag":"Jira Resource V 2","description":"","operationCount":4},{"tag":"Video Resource","description":"","operationCount":5},{"tag":"Recording Upload","description":"Upload an audio or video file as a new recording; it is transcribed and summarised like a desktop upload. Flow: (1) POST /videos/upload-session with {fileName, fileSize} returns {blobName, uploadUrl, expiresAtEpochMs, partSize}; (2) PUT the raw bytes to uploadUrl (a pre-signed storage URL: send no Dutify auth header); with resumable=true and a non-null partSize, uploadUrl is null instead: sign each 1-based part with POST /videos/upload-session/{blobName}/parts/{partNumber}, PUT that part's bytes to its uploadUrl, and list what already arrived with GET /videos/upload-session/{blobName}/parts; (3) POST /videos/complete with {blobName} registers the recording and starts processing; the response carries recordingId (poll GET /recording/{recordingId}/progress, or receive the personal webhook when it finishes). Limits, the same as every other upload: at most 5 GB per file, 10 uploads in progress per user (429), 50 GB of retained uploads per user (402), sessions expire after 6 hours (410); processing is charged to the workspace's transcription quota. With an API key the recording is placed in the key's workspace. API-key scope for every step: recordings:write (keys with no user cannot upload).","operationCount":5},{"tag":"Composio Webhook Resource","description":"","operationCount":1},{"tag":"Workflow Resource","description":"","operationCount":5},{"tag":"Zoom Bot Resource","description":"","operationCount":4},{"tag":"Zoom Call Resource","description":"","operationCount":6}]}]}