Crystal Reports OData API

OData data service for report row and summary data

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/crystal-reports-odata-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

crystal-reports-odata-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: SAP Crystal Reports RESTful Web Services Authentication OData API
  description: RESTful web services API for SAP Crystal Reports, providing access to report viewing, exporting, data retrieval via OData, and repository navigation through the SAP BusinessObjects BI Platform.
  version: 4.3.0
  contact:
    name: SAP
    url: https://www.sap.com
  license:
    name: Proprietary
    url: https://www.sap.com/about/legal/copyright.html
  x-generated-from: documentation
  x-source-url: https://help.sap.com/doc/sapcrystalreportsrestfulwebservices/4.3/en-US/crrest_api_42SP2.pdf
servers:
- url: http://{host}:{port}/biprws
  description: SAP BusinessObjects BI Platform REST API server
  variables:
    host:
      default: localhost
      description: Hostname of the SAP BusinessObjects server
    port:
      default: '6405'
      description: Port number for the RESTful web services
security:
- sapLogonToken: []
tags:
- name: OData
  description: OData data service for report row and summary data
paths:
  /infostore/{reportId}/rpt/data.svc:
    get:
      operationId: getODataServiceDocument
      summary: Crystal Reports Get OData Service Document
      description: Returns the OData service document listing available collections (Rows and GrandTotals) for the specified report.
      tags:
      - OData
      parameters:
      - $ref: '#/components/parameters/ReportId'
      - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: OData service document returned successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ODataServiceDocument'
            application/xml:
              schema:
                $ref: '#/components/schemas/ODataServiceDocument'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Report not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-microcks-operation:
        delay: 200
  /infostore/{reportId}/rpt/data.svc/$metadata:
    get:
      operationId: getODataMetadata
      summary: Crystal Reports Get EDMX Metadata Document
      description: Returns the OData EDMX metadata document describing the entity types, properties, and associations for the report data service.
      tags:
      - OData
      parameters:
      - $ref: '#/components/parameters/ReportId'
      responses:
        '200':
          description: EDMX metadata document returned successfully
          content:
            application/xml:
              schema:
                type: string
                example: <?xml version="1.0" encoding="utf-8"?> <edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx"> </edmx:Edmx>
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Report not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-microcks-operation:
        delay: 200
  /infostore/{reportId}/rpt/data.svc/Rows:
    get:
      operationId: getReportDataRows
      summary: Crystal Reports Get Report Data Rows
      description: Returns report data rows via OData. Supports paging with $skip and $skiptoken, row counting with $inlinecount and $count, field selection with $select, and parameter filtering.
      tags:
      - OData
      parameters:
      - $ref: '#/components/parameters/ReportId'
      - $ref: '#/components/parameters/Accept'
      - name: $skip
        in: query
        required: false
        description: Number of rows to skip
        schema:
          type: integer
          minimum: 0
          example: 0
      - name: $skiptoken
        in: query
        required: false
        description: Token for server-driven paging
        schema:
          type: string
          example: '100'
        example: '100'
      - name: $inlinecount
        in: query
        required: false
        description: Include total count in response
        schema:
          type: string
          enum:
          - allpages
          example: allpages
        example: allpages
      - name: $count
        in: query
        required: false
        description: Return only the count of rows
        schema:
          type: boolean
          example: true
        example: true
      - name: $select
        in: query
        required: false
        description: Comma-separated list of fields to include
        schema:
          type: string
          example: CustomerName,OrderAmount
        example: CustomerName,OrderAmount
      responses:
        '200':
          description: Report data rows returned successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ODataRowCollection'
            application/xml:
              schema:
                $ref: '#/components/schemas/ODataRowCollection'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Report not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-microcks-operation:
        delay: 500
    post:
      operationId: pushDataRow
      summary: Crystal Reports Push a Row of Data to Transient Instance
      description: Pushes a row of data to a transient report instance for data-driven report generation.
      tags:
      - OData
      parameters:
      - $ref: '#/components/parameters/ReportId'
      - $ref: '#/components/parameters/Accept'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ODataRow'
          application/xml:
            schema:
              $ref: '#/components/schemas/ODataRow'
      responses:
        '201':
          description: Data row pushed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ODataRow'
            application/xml:
              schema:
                $ref: '#/components/schemas/ODataRow'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Report not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-microcks-operation:
        delay: 300
  /infostore/{reportId}/rpt/data.svc/Rows({index}):
    get:
      operationId: getReportDataRowByIndex
      summary: Crystal Reports Get Specific Row by Index
      description: Returns a single report data row identified by its zero-based index within the Rows collection.
      tags:
      - OData
      parameters:
      - $ref: '#/components/parameters/ReportId'
      - name: index
        in: path
        required: true
        description: Zero-based index of the row
        schema:
          type: integer
          minimum: 0
          example: 0
      - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: Data row returned successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ODataRow'
            application/xml:
              schema:
                $ref: '#/components/schemas/ODataRow'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Row not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-microcks-operation:
        delay: 200
  /infostore/{reportId}/rpt/data.svc/Rows({index})/{fieldName}:
    get:
      operationId: getRowFieldValue
      summary: Crystal Reports Get Specific Field from Row
      description: Returns the value of a specific field from a report data row, wrapped in OData format.
      tags:
      - OData
      parameters:
      - $ref: '#/components/parameters/ReportId'
      - name: index
        in: path
        required: true
        description: Zero-based index of the row
        schema:
          type: integer
          minimum: 0
          example: 0
      - name: fieldName
        in: path
        required: true
        description: Name of the field to retrieve
        schema:
          type: string
          example: CustomerName
        example: CustomerName
      - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: Field value returned successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ODataFieldValue'
            application/xml:
              schema:
                $ref: '#/components/schemas/ODataFieldValue'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Row or field not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-microcks-operation:
        delay: 200
  /infostore/{reportId}/rpt/data.svc/Rows({index})/{fieldName}/$value:
    get:
      operationId: getRowFieldRawValue
      summary: Crystal Reports Get Raw Field Value
      description: Returns the raw, unwrapped value of a specific field from a report data row as plain text.
      tags:
      - OData
      parameters:
      - $ref: '#/components/parameters/ReportId'
      - name: index
        in: path
        required: true
        description: Zero-based index of the row
        schema:
          type: integer
          minimum: 0
          example: 0
      - name: fieldName
        in: path
        required: true
        description: Name of the field to retrieve
        schema:
          type: string
          example: OrderAmount
        example: OrderAmount
      - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: Raw field value returned successfully
          content:
            text/plain:
              schema:
                type: string
                example: '1250.50'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Row or field not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-microcks-operation:
        delay: 150
  /infostore/{reportId}/rpt/data.svc/GrandTotals:
    get:
      operationId: getGrandTotals
      summary: Crystal Reports Get Grand Totals
      description: Returns the grand total summary fields for the report data, including aggregated values across all rows.
      tags:
      - OData
      parameters:
      - $ref: '#/components/parameters/ReportId'
      - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: Grand totals returned successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GrandTotalCollection'
            application/xml:
              schema:
                $ref: '#/components/schemas/GrandTotalCollection'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Report not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-microcks-operation:
        delay: 300
  /infostore/{reportId}/rpt/data.svc/{GroupName}:
    get:
      operationId: getGroupData
      summary: Crystal Reports Get Group Data
      description: Returns data for a specific group within the report. Group names correspond to the group conditions defined in the report structure.
      tags:
      - OData
      parameters:
      - $ref: '#/components/parameters/ReportId'
      - name: GroupName
        in: path
        required: true
        description: Name of the group collection
        schema:
          type: string
          example: Group1_Country
        example: Group1_Country
      - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: Group data returned successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ODataRowCollection'
            application/xml:
              schema:
                $ref: '#/components/schemas/ODataRowCollection'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Group not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-microcks-operation:
        delay: 300
  /infostore/{reportId}/rpt/data.svc/{GroupName}('{groupPath}'):
    get:
      operationId: getGroupByPath
      summary: Crystal Reports Get Specific Group by Path
      description: Returns data for a specific group entry identified by its group path string within the named group collection.
      tags:
      - OData
      parameters:
      - $ref: '#/components/parameters/ReportId'
      - name: GroupName
        in: path
        required: true
        description: Name of the group collection
        schema:
          type: string
          example: Group1_Country
        example: Group1_Country
      - name: groupPath
        in: path
        required: true
        description: Path identifier for the specific group entry
        schema:
          type: string
          example: USA
        example: USA
      - $ref: '#/components/parameters/Accept'
      responses:
        '200':
          description: Group entry returned successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ODataRow'
            application/xml:
              schema:
                $ref: '#/components/schemas/ODataRow'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Group entry not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-microcks-operation:
        delay: 200
components:
  schemas:
    ODataFieldValue:
      type: object
      description: A single field value from an OData row
      properties:
        fieldName:
          type: string
          description: Name of the field
          example: CustomerName
        value:
          type: string
          description: Value of the field
          example: City Cyclists
    GrandTotal:
      type: object
      description: Grand total summary data. Properties are dynamic and correspond to the summary fields defined in the report.
      additionalProperties: true
      example:
        SumOfOrderAmount: 548290.75
        CountOfOrders: 1542
        AverageOrderAmount: 355.57
    ODataRow:
      type: object
      description: A single row of report data. Properties are dynamic and correspond to the fields defined in the report.
      additionalProperties: true
      example:
        CustomerName: City Cyclists
        Country: USA
        OrderAmount: 1250.5
        OrderDate: '2023-11-15'
    ODataRowCollection:
      type: object
      description: A collection of OData report data rows
      properties:
        __count:
          type: string
          description: Total count of rows (when $inlinecount=allpages is used)
          example: '1542'
        __next:
          type: string
          description: URI for the next page of results
          example: /biprws/infostore/5765/rpt/data.svc/Rows?$skiptoken=100
        value:
          type: array
          description: Array of data rows
          items:
            $ref: '#/components/schemas/ODataRow'
          example:
          - CustomerName: City Cyclists
            Country: USA
            OrderAmount: 1250.5
            OrderDate: '2023-11-15'
          - CustomerName: Pathfinders
            Country: Canada
            OrderAmount: 875.25
            OrderDate: '2023-11-16'
    ODataServiceDocument:
      type: object
      description: OData service document listing available collections
      properties:
        EntitySets:
          type: array
          description: Available entity set collections
          items:
            type: string
          example:
          - Rows
          - GrandTotals
    GrandTotalCollection:
      type: object
      description: Collection of grand total summary entries
      properties:
        value:
          type: array
          description: Array of grand total entries
          items:
            $ref: '#/components/schemas/GrandTotal'
          example:
          - SumOfOrderAmount: 548290.75
            CountOfOrders: 1542
            AverageOrderAmount: 355.57
    Error:
      type: object
      description: Error response from the API
      properties:
        error_code:
          type: integer
          description: Numeric error code
          example: 401
        message:
          type: string
          description: Human-readable error message
          example: Authentication token is missing or expired
  parameters:
    ReportId:
      name: reportId
      in: path
      required: true
      description: Infostore object ID of the Crystal Report
      schema:
        type: integer
        example: 5765
    Accept:
      name: Accept
      in: header
      required: false
      description: Desired response format
      schema:
        type: string
        enum:
        - application/json
        - application/xml
        default: application/json
        example: application/json
  responses:
    Unauthorized:
      description: Authentication required or token expired
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    sapLogonToken:
      type: apiKey
      name: X-SAP-LogonToken
      in: header
      description: SAP logon token obtained from the /logon/long endpoint. The token value must be enclosed in double quotes when sent in the header.
    basicAuth:
      type: http
      scheme: basic
      description: HTTP Basic authentication as an alternative to token-based auth