Authorization: Bearer <token>. Things to know before you call:
- Only the newest token works. Rentman keeps a single valid JWT per account, so clicking Regenerate token invalidates every integration already using the old one. A superseded token is refused by the gateway with
403, which the plugin reports as an auth failure rather than a missing record. - Every list is a cursor walk. A collection answers
{ data, itemCount, limit, next_page_url }, andnext_page_urlcarries an opaquecursor. The plugin returns bothnext_cursorandnext_page_url: pass the cursor back unchanged, because Rentman warns that it must not be built or edited. The cursor is null on the last page. - Page size.
limitdefaults to 300 and caps at 1500. The limit is carried into later pages by the cursor, so it only has to be set on the first request. - Filters are
field[operator]. Rentman reads a filter as a key such asdistance[lte], with the operatorseq,lt,gt,lte,gteandneq. Each list models the operators its fields accept, so an unsupported one is rejected before the request rather than silently ignored. Rentman answers400to a filter on a field the resource does not have. - Projects take no customer through the API. Rentman answers
400(“not permitted to set the following field: customer”) to a project write that names one, soprojects.createandprojects.updateleave the customer to the Rentman app. - Contacts keep two emails and two phones (
email_1,email_2,phone_1,phone_2). The plugin’semailandphoneinputs write the first of each. A contacttypeiscompanyorprivate, and country codes are lowercase (nl). - Linked items are paths by default. A
customerorprojectfield comes back as/contacts/12unless you passexpand, which inlines the object. Nested expansions use dot notation and go three levels deep at most.fieldsprojects the response, and a nestedfieldspath must have a matchingexpand. - Equipment has no
activeflag. Availability isin_shop,in_plannerandin_archive, and the list filter isin_shop. - Contact addresses are nested in, flat out. A contact carries three addresses, and the plugin takes each as an object under
mailing_address,visit_addressandinvoice_address, then folds the prefix into the field names the API expects. - Contact deletes are permanent.
contacts.deletehas no undo and is marked destructive. - Rate limits. Rentman allows 10 requests a second, 20 at once and 50,000 a day, and sends no
Retry-After, so a 429 is retried three times with exponential backoff.500and502are retried only for reads: a create that failed may already have written its record.
- 19 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
List contacts in one countryWhat’s next
API reference
Every
rentman.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.