Crystal Reports OData API

OData data service for report row and summary data

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