api-<account>.proabono.com, so the plugin needs your account number as well as the two keys from Integration, API in the back office: the agent key and the API key. All three are stored with the connection. They travel as HTTP Basic, with the agent key as the username and the API key as the password.
What to know before you bill:
- The account number. Store
accountas42(or paste the endpoint,https://api-42.proabono.com) to reachapi-42.proabono.com; anaccountplugin option overrides it. Without it there is no host to call, so the plugin asks for the connection rather than guessing. - Two steps to a subscription. A subscription is created from an offer reference and a customer reference, and it only starts billing once the customer is billable.
TryStart: falsecreates it without starting, so it can be customised first;startthen begins it. - Amounts are integer cents. Every amount, such as
AmountRecurrenceand an invoice’sAmountTotal, is in the currency’s minor unit, so 9900 is 99.00. - Usages accumulate.
usages.incrementadds to a feature’s usage, and a negative increment subtracts, which is how a reversed action is recorded. Every usage change needs aDateStamp; ProAbono records two changes with the same timestamp once.usages.updatesends up to 50 rows at once. - Lists are paginated. List answers carry
Page,SizePage,CountandTotalItemsbeside the rows; passPagefor the next page. - A 204 is not an error. ProAbono answers a read that finds nothing with 204 and an empty body. The plugin turns that into an empty result rather than failing the parse.
- A 422 lists the bad fields. It carries one entry per field; the thrown
ApiErrorkeeps that list onbody. - Nothing to check a subscription with. The docs warn against using
subscriptions.getto decide whether a user is a subscriber, and point at their own method instead. - Webhooks. ProAbono notifies through its portal rather than by webhook deliveries, so this plugin receives none.
- 27 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 ProAbono API key before the first call: More: API Key
pnpm corsair setup --plugin=proabono --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
List the offers in your accountWhat’s next
API reference
Every
proabono.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.