client_id query parameter on every call, which is the transport RiteKit documents for all endpoints.
Things to know before you call:
- Credits, not requests, are the budget. Each endpoint costs 1 or 2 credits and the monthly allowance is shared across all of them, so a
402means the month’s credits are gone: the plugin reports it asisQuotaExhaustedand never retries, because waiting cannot refill them. The rate limit itself is 100 calls per second. - Two
401messages mean different things. A call with no Client ID getsEndpoint is not accessible; a Client ID RiteKit does not recognise getsVerification failed. Both are a401, and the plugin keeps RiteKit’sinfohint on the error because it usually names the fix. - Hashtag fields are named differently per route.
hashtags.statsreturns rows understats(and the tags it read underhashtags);hashtags.suggestionsandhashtags.forImagereturn them underdata;hashtags.forUrlreturns them underhashtags;hashtags.trendingreturnstagsand calls the image sharephotoswhere the others call itimages. The response models follow each route rather than pretending they match. - The
colornumber needs its legend. A stats row’scoloris 0 unused, 1 overused, 2 good, 3 great, andhashtags.statsreturns the labels in acolorarray beside the rows.hashtags.trending’sgreenfilter is the same idea, and the API reads it as1rather thantrue. images/links/mentionsare percentages, not counts. A value of0.35means 0.35% of the hashtag’s tweets carry an image, which is why the fields are fractional.hashtags.statstakes up to 100 tags in one call, joined into a single comma-separatedtagsvalue. The plugin rejects a longer list rather than letting RiteKit truncate it.links.shortenneeds a Link Ad. RiteKit answers500whenctais missing, so the plugin requires it.links.listCtaslists the account’s Link Ads (a new account hasbit.ly, no ad, and its own default ad); pass one of those ids ascta. Each shorten creates a new link and spends a credit, so a5xxon it is not retried.images.quoteandimages.animatereturn the image itself. The docs say each returns a URL, but the API answers with the PNG or GIF bytes. The plugin returns them as a data URL inurl, withcontentTypeandbytes. An animated GIF is a few hundred KB.companies.nameToDomainis slow and returnsdata. Live answers took about 18 seconds, so the plugin waits up to 60. The domains come back underdata, best first.person.nameFromEmailreturns the name as one string, such asJohn Doeininfo, although the published sample showsgivenNameandsurname. The schema accepts both.companies.logogives you two URLs.urlexpires;permanentUrlis stable, but every view of it costs a credit, so store the permanent one and let a CDN fetch it.
- 23 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)
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
Read stats for two hashtagsWhat’s next
API reference
Every
ritekit.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.