- Credit-spending creates.
transcriptions.create,translations.createTaskandmeetings.createspend Happy Scribe credits.orders.createstays incomplete (unpaid) untilorders.confirmor an explicitconfirm: true; human orders are then irreversible. - Four async lifecycles. Transcriptions report
stateuntilautomatic_done; exportsstateuntilreadywith adownload_link; translation tasksstateuntildone; meetings reportstatus(a different field) untilcompleted. The plugin declares jobs for all four, so the agent’s get_job follows them. - Rate limits. The transcription-creation endpoint allows about 200 requests per user per hour; a 429 carries
retry_in_secondsin the body and the plugin waits exactly that before retrying. - Pagination is inconsistent.
transcriptions.listpages from 0 withperPagedefault 5;companies.listandpeople.listpage from 1 withperPageup to 100;memberships.listpages from 1, 25 at a time. All returnnextPageUrlwhen another page exists. - Deleting.
transcriptions.deletemoves the file to the Trash; passpermanent: trueto delete it for good. - Intelligence API is enrollment-gated.
companies,peopleand the person/company filters ontranscriptions.listanswer 404 until the organization is enrolled; contact Happy Scribe support to enroll. - Local files.
uploads.getSignedUrlreturns a pre-signed S3 URL; upload the file bytes there yourself, then pass atmpUrltotranscriptions.create. - Webhooks. Configure a meeting webhook in Settings, Webhooks and set its signing secret (
whsec_...) as the plugin’swebhookSecret. Deliveries are HMAC-signed twice; unsigned or stale deliveries are rejected. If your own route receives them, pass the raw body (await request.text()) toprocessWebhook, notrequest.json(): transcripts carry numbers like0.0that change when re-serialized, and the signature check then fails. The payload does not name the organization, so with multi-tenancy pass the tenant asquery.tenantId(for example from?tenantId=on the endpoint URL). - Languages. Language codes are BCP-47 (
en-GB,es); human services are available only for some of them.
- 28 typed API operations
- 7 incoming webhook event types
Setup
1
Install
2
Add the plugin
corsair.ts
multiTenancy: true, scope calls with corsair.withTenant(id). See Quick start for KEK + Hub keys, and Multi-tenancy for account isolation.3
Choose authentication
- API Key (Recommended)
No setup required yet. When you make your first request as a tenant, Corsair prompts for the API key.More: API Key
4
Connect a tenant
Mint a connect link and send the tenant to it. Hub hosts the page and delivers the result to your app — see Connect / OAuth.
Example API calls
List transcriptions in an organizationWebhooks
This plugin registers 7 webhook event types. Configure the provider to POST to your Corsair HTTP handler, then usewebhookHooks on the plugin factory.
See Webhooks for every event path and payload shape, and Webhooks concept for routing.
What’s next
API reference
Every
happyscribe.api.* operation with input and output types.Webhooks
Event paths, payloads, and
webhookHooks examples.Connect / OAuth
createLink, Hub delivery, and tenant connect flows.
Use with agents
Expose this plugin’s operations as MCP tools.