HTTP RPC Specification
Methods <-> Type mapping
| HTTP Method | Mapping | Notes | 
|---|---|---|
| GET | .query() | Input JSON-stringified in query param. e.g. myQuery?input=${encodeURIComponent(JSON.stringify(input))} | 
| POST | .mutation() | Input as POST body. | 
| n/a | .subscription() | Subscriptions are not supported in HTTP transport | 
Accessing nested procedures
Nested procedures are separated by dots, so for a request to byId below would end up being a request to /api/trpc/post.byId.
ts
ts
Batching
When batching, we combine all parallel procedure calls of the same HTTP method in one request using a data loader.
- The called procedures' names are combined by a comma (,) in thepathname
- Input parameters are sent as a query parameter called inputwhich has the shapeRecord<number, unknown>.
- We also need to pass batch=1as a query parameter.
- If the response has different statuses, we send back 207 Multi-Status(e.g., if one call errored and one succeeded)
Batching Example Request
Given a router like this exposed at /api/trpc:
server/router.tstsx
server/router.tstsx
... And two queries defined like this in a React component:
MyComponent.tsxtsx
MyComponent.tsxtsx
The above would result in exactly 1 HTTP call with this data:
| Location property | Value | 
|---|---|
| pathname | /api/trpc/postById,relatedPosts | 
| search | ?batch=1&input=%7B%220%22%3A%221%22%2C%221%22%3A%221%22%7D* | 
*) input in the above is the result of:
ts
ts
Batching Example Response
Example output from server
json
json
HTTP Response Specification
In order to have a specification that works regardless of the transport layer we try to conform to JSON-RPC 2.0 where possible.
Successful Response
Example JSON Response
json
json
ts
ts
Error Response
Example JSON Response
json
json
- When possible, we propagate HTTP status codes from the error thrown.
- If the response has different statuses, we send back 207 Multi-Status(e.g., if one call errored and one succeeded)
- For more on errors and how to customize them see Error Formatting.
Error Codes <-> HTTP Status
ts
ts
Error Codes <-> JSON-RPC 2.0 Error Codes
Available codes & JSON-RPC code
ts
ts
Dig deeper
You can read more details by drilling into the TypeScript definitions in