.repairshopr.com, because the API is served from https://<subdomain>.repairshopr.com/api/v1. Store both. Things to know before you call:
- The subdomain is half the credential. Pass it when you create the plugin, or store it on the account beside the key. A missing or malformed value fails before a request is sent rather than resolving to a host that does not exist.
- A 401 covers three different problems.
Failed to authenticate accountmeans a bad key, a wrong subdomain, or a key that belongs to another account; RepairShopr does not separate them, so the plugin reports one auth error rather than guessing. - Paging is by page number. Collections answer with their own array plus a
metablock carryingtotal_pages, andnext_pageis derived from it. Onlyinvoicesacceptsper_page(at most 25); the others use the account default. - Sorting names a column and a direction, such as
firstname ASCorcreated_at DESC. - Products and vendors may carry no
meta. Without it the plugin cannot tell whether more pages exist, sonext_pageis null rather than an invented number. A null there does not mean every record came back: ask for the nextpageyourself and stop when it comes back empty. - Money is a string on invoices.
subtotal,totalandtaxcome back as decimal strings such as"181.50", while product prices are numbers. - A contact spells its address differently from a customer. A contact has
address1/address2; a customer hasaddress/address_2. Both are modelled as the API sends them. - Ticket status is the account’s own list.
statustakes any status name the account uses; the defaults areNew,In Progress,Resolved,Invoiced,Waiting for Parts,Waiting on Customer,ScheduledandCustomer Reply.prioritytakes one ofUrgent,High,MediumorLow. - Creating a product needs a description. RepairShopr rejects a product without one, so the schema requires it rather than letting the API return
Name can't be blank. - A rejection echoes what you sent. A
422body carries every message at fault inmessageand the offending values inparams, both exposed on the error. - Deletes are permanent.
customers.deleteandtickets.deletehave no undo and are marked destructive. - Retries. RepairShopr documents no throughput window and no
Retry-After, so a 429 is retried three times with exponential backoff. A5xxis retried only for a call the plugin declared read-only.
- 18 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 a customer’s open ticketsWhat’s next
API reference
Every
repairshopr.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.