REST API Overview
Endpoints
Section titled “Endpoints”ReportShell REST API provides the following endpoints:
- Input Controls: Retrieve input control metadata for a report, load input control data sets and evaluate latest states based on the final parameter values
- Executions: Manage persistent executions and retrieve print metadata
- Render: Export a report to a specific format (e.g. PDF, Excel, CSV)
These endpoints are designed to be similar to the JasperReports Server API to simplify the learning curve for users familiar with JRS.
Base Path
Section titled “Base Path”The base-path for all REST endpoints is <contextPath>/reportshell/api.
Example URLs used in this page and other REST API pages assume you use them with this base-path.
Request Structure
Section titled “Request Structure”Many ReportShell endpoints operate with both GET and POST requests. Parameters starting with prefix rs. (e.g. rs.locale) are reserved system parameters that affect the behavior of the endpoint. Other parameters are report parameters and they are bound to the report input controls.
Example GET request:
GET /v1/reports/{reportId}/render.pdf?rs.locale=en_US&rs.page=1¶m1=value1&multiValueParam=value1&multiValueParam=value2Example POST request:
POST /v1/reports/{reportId}/render.pdfContent-Type: application/x-www-form-urlencoded
rs.locale=en_US&rs.page=1¶m1=value1&multiValueParam=value1&multiValueParam=value2When endpoints require a JSON request body such as the Executions endpoint, root level parameters are the system parameters (without the rs. prefix) and report parameters are nested under a parameters key.
Example JSON request:
{ "locale": "en", "parameters": { "param1": "value1", "multiValueParam": ["value1", "value2"] }}Common Fill Parameters
Section titled “Common Fill Parameters”These parameters affect how a report is filled and are used by all endpoints that run a report fill.
| Parameter | Type | Description |
|---|---|---|
rs.locale | String? | Locale identifier converted to a Locale object and set as the REPORT_LOCALE Jasper report parameter value when filling a report. |
rs.timezone | String? | A valid timezone ID. Converted to a TimeZone object and set as the REPORT_TIME_ZONE Jasper report parameter value. |
rs.null | String? | Parameter names to set to null. See Null Values below. |
rs.ignorePagination | Boolean? | Whether to ignore pagination when filling a report. Set as the IS_IGNORE_PAGINATION Jasper report parameter value. |
rs.extra.XXX | Map<String, String[]>? | User specific extra parameter map |
Null Values
Section titled “Null Values”To explicitly send a null value for a report parameter in a GET request, use the rs.null parameter with the parameter names you want to set to null. E.g. rs.null=param1&rs.null=param2
In JSON requests, just use the null value.
{ "parameters": { "param1": null }}Extra Parameters
Section titled “Extra Parameters”Use rs.extra. prefix for your own application specific parameters. Such parameters can be multi valued.
Example URL:
?rs.extra.foo=bar&rs.extra.foo=baz&rs.extra.baz=zooThese parameters are automatically copied into the operation context as an extra-parameter map. This allows you to pass application-specific values through the request lifecycle and access them from fill and export operations.
See Operation Contexts for more details about these concepts.
JSON Parameter Format
Section titled “JSON Parameter Format”Because ReportShell REST API supports both JSON and form-urlencoded requests, it is recommended to send report parameter values as strings or arrays of strings in your JSON requests even if the control is of a different type such as Number.
ReportShell will convert the values to the appropriate type based on the control’s parameter type.
Example JSON request with system parameters:
{ "locale": "en", "parameters": { "integerParam": "10", "numberParam": "10.5", "dateParam": "2022-01-01", "booleanParam": "true", "multiNumberParam": ["10", "10.5"] }, "extra": { "foo": ["bar", "baz"], "baz": ["foo"] }}Request Mapping and Report Keys
Section titled “Request Mapping and Report Keys”Most ReportShell REST API controllers receive the report key either as a URL path variable and support two request mapping variants:
/reports/{reportKey}/<action>/<action>/{*reportKey}
The first variant supports single-segment keys (e.g., /reports/123/controls), where the key is a simple unique identifier like a database ID or UUID.
The second variant uses the star (*) prefix to support multi-segment keys (e.g., /controls/sales/summary), where the key acts as a hierarchical path or slug.
Recent versions of the Spring Framework do not support multi-segment path variables in the middle of a URL pattern. Therefore, a single mapping strategy like /reports/sales/summary/controls is not feasible out-of-the-box. While you can implement custom mapping strategies or revert to deprecated Spring behaviors, those approaches are outside the scope of this documentation.
© 2026 Bivektor Inc. All rights reserved. ReportShell™
is a trademark of Bivektor, Inc.
Questions? Email us at reportshell@bivektor.com.
JasperReports® and Jaspersoft® are trademarks of Cloud Software Group, Inc. and/or its subsidiaries. Eclipse BIRT™ and BIRT™ are trademarks of the Eclipse Foundation. Spring® is a trademark of Broadcom Inc. and/or its subsidiaries. React is a trademark of Meta Platforms, Inc. ReportShell and Bivektor, Inc. are not affiliated with, endorsed by, sponsored by or otherwise associated with the owners of the JasperReports®, Jaspersoft®, Spring®, Eclipse BIRT™, BIRT™ or React marks. Any reference to these or other trademarks on this site is made solely for informational, descriptive, comparative and interoperability purposes.