Authorization: Bearer <key> on every call. The reference marks GET keys as optional, but the API answers 401 to every route without one, so the plugin asks for a key before any call. The plugin uses the API host https://api.endorsal.io and never puts credentials in query parameters.
The published OpenAPI document currently defines 25 REST operations. List routes return the complete collection and expose no page or cursor parameters. Search conditions are AND-combined; in requires an array. Testimonial status fields (approved, featured) are numeric. widgets.byId.get and wallOfLove.get support render: true, which returns rendered HTML rather than the normal JSON resource.
The POST /superlinks route is not present in the current published OpenAPI document, so it is intentionally excluded. Webhooks are outside this integration’s scope.
What you get:
- 25 typed API operations
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)
Store the Endorsal API key before the first call: More: API Key
pnpm corsair setup --plugin=endorsal --tenant=acme api_key=<your-key> (leave out --tenant without multiTenancy), or pass it as key in the plugin options. With Hub, each tenant enters their own key on the connect page. See API key auth.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
autorequests.campaigns.byId.get
contacts.byId.delete
What’s next
API reference
Every
endorsal.api.* operation with input and output types.Connect / OAuth
createLink, Hub delivery, and tenant connect flows.
Use with agents
Expose this plugin’s operations as MCP tools.