Crystal Reports · Capability

SAP Crystal Reports RESTful Web Services API — OData

SAP Crystal Reports RESTful Web Services API — OData. 10 operations. Lead operation: Crystal Reports Get OData Service Document. Self-contained Naftiko capability covering one Crystal Reports business surface.

Run with Naftiko Crystal ReportsOData

What You Can Do

GET
Getodataservicedocument — Crystal Reports Get OData Service Document
/v1/infostore/{reportid}/rpt/data-svc
GET
Getodatametadata — Crystal Reports Get EDMX Metadata Document
/v1/infostore/{reportid}/rpt/data-svc/metadata
GET
Getgrandtotals — Crystal Reports Get Grand Totals
/v1/infostore/{reportid}/rpt/data-svc/grandtotals
GET
Getreportdatarows — Crystal Reports Get Report Data Rows
/v1/infostore/{reportid}/rpt/data-svc/rows
POST
Pushdatarow — Crystal Reports Push a Row of Data to Transient Instance
/v1/infostore/{reportid}/rpt/data-svc/rows
GET
Getreportdatarowbyindex — Crystal Reports Get Specific Row by Index
/v1/infostore/{reportid}/rpt/data-svc/rows-index
GET
Getrowfieldvalue — Crystal Reports Get Specific Field from Row
/v1/infostore/{reportid}/rpt/data-svc/rows-index/{fieldname}
GET
Getrowfieldrawvalue — Crystal Reports Get Raw Field Value
/v1/infostore/{reportid}/rpt/data-svc/rows-index/{fieldname}/value
GET
Getgroupdata — Crystal Reports Get Group Data
/v1/infostore/{reportid}/rpt/data-svc/{groupname}
GET
Getgroupbypath — Crystal Reports Get Specific Group by Path
/v1/infostore/{reportid}/rpt/data-svc/groupname-grouppath

MCP Tools

crystal-reports-get-odata-service

Crystal Reports Get OData Service Document

read-only idempotent
crystal-reports-get-edmx-metadata

Crystal Reports Get EDMX Metadata Document

read-only idempotent
crystal-reports-get-grand-totals

Crystal Reports Get Grand Totals

read-only idempotent
crystal-reports-get-report-data

Crystal Reports Get Report Data Rows

read-only idempotent
crystal-reports-push-row-data

Crystal Reports Push a Row of Data to Transient Instance

crystal-reports-get-specific-row

Crystal Reports Get Specific Row by Index

read-only idempotent
crystal-reports-get-specific-field

Crystal Reports Get Specific Field from Row

read-only idempotent
crystal-reports-get-raw-field

Crystal Reports Get Raw Field Value

read-only idempotent
crystal-reports-get-group-data

Crystal Reports Get Group Data

read-only idempotent
crystal-reports-get-specific-group

Crystal Reports Get Specific Group by Path

read-only idempotent

Capability Spec

rest-odata.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: SAP Crystal Reports RESTful Web Services API — OData
  description: 'SAP Crystal Reports RESTful Web Services API — OData. 10 operations. Lead operation: Crystal Reports Get OData
    Service Document. Self-contained Naftiko capability covering one Crystal Reports business surface.'
  tags:
  - Crystal Reports
  - OData
  created: '2026-05-19'
  modified: '2026-05-19'
binds:
- namespace: env
  keys:
    CRYSTAL_REPORTS_API_KEY: CRYSTAL_REPORTS_API_KEY
capability:
  consumes:
  - type: http
    namespace: rest-odata
    baseUri: http://{host}:{port}/biprws
    description: SAP Crystal Reports RESTful Web Services API — OData business capability. Self-contained, no shared references.
    resources:
    - name: infostore-reportId-rpt-data.svc
      path: /infostore/{reportId}/rpt/data.svc
      operations:
      - name: getodataservicedocument
        method: GET
        description: Crystal Reports Get OData Service Document
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: infostore-reportId-rpt-data.svc-$metadata
      path: /infostore/{reportId}/rpt/data.svc/$metadata
      operations:
      - name: getodatametadata
        method: GET
        description: Crystal Reports Get EDMX Metadata Document
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: infostore-reportId-rpt-data.svc-GrandTotals
      path: /infostore/{reportId}/rpt/data.svc/GrandTotals
      operations:
      - name: getgrandtotals
        method: GET
        description: Crystal Reports Get Grand Totals
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: infostore-reportId-rpt-data.svc-Rows
      path: /infostore/{reportId}/rpt/data.svc/Rows
      operations:
      - name: getreportdatarows
        method: GET
        description: Crystal Reports Get Report Data Rows
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: $skip
          in: query
          type: integer
          description: Number of rows to skip
        - name: $skiptoken
          in: query
          type: string
          description: Token for server-driven paging
        - name: $inlinecount
          in: query
          type: string
          description: Include total count in response
        - name: $count
          in: query
          type: boolean
          description: Return only the count of rows
        - name: $select
          in: query
          type: string
          description: Comma-separated list of fields to include
      - name: pushdatarow
        method: POST
        description: Crystal Reports Push a Row of Data to Transient Instance
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    - name: infostore-reportId-rpt-data.svc-Rows({index})
      path: /infostore/{reportId}/rpt/data.svc/Rows({index})
      operations:
      - name: getreportdatarowbyindex
        method: GET
        description: Crystal Reports Get Specific Row by Index
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: index
          in: path
          type: integer
          description: Zero-based index of the row
          required: true
    - name: infostore-reportId-rpt-data.svc-Rows({index})-fieldName
      path: /infostore/{reportId}/rpt/data.svc/Rows({index})/{fieldName}
      operations:
      - name: getrowfieldvalue
        method: GET
        description: Crystal Reports Get Specific Field from Row
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: index
          in: path
          type: integer
          description: Zero-based index of the row
          required: true
        - name: fieldName
          in: path
          type: string
          description: Name of the field to retrieve
          required: true
    - name: infostore-reportId-rpt-data.svc-Rows({index})-fieldName-$value
      path: /infostore/{reportId}/rpt/data.svc/Rows({index})/{fieldName}/$value
      operations:
      - name: getrowfieldrawvalue
        method: GET
        description: Crystal Reports Get Raw Field Value
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: index
          in: path
          type: integer
          description: Zero-based index of the row
          required: true
        - name: fieldName
          in: path
          type: string
          description: Name of the field to retrieve
          required: true
    - name: infostore-reportId-rpt-data.svc-GroupName
      path: /infostore/{reportId}/rpt/data.svc/{GroupName}
      operations:
      - name: getgroupdata
        method: GET
        description: Crystal Reports Get Group Data
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: GroupName
          in: path
          type: string
          description: Name of the group collection
          required: true
    - name: infostore-reportId-rpt-data.svc-GroupName}('{groupPath}')
      path: /infostore/{reportId}/rpt/data.svc/{GroupName}('{groupPath}')
      operations:
      - name: getgroupbypath
        method: GET
        description: Crystal Reports Get Specific Group by Path
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: GroupName
          in: path
          type: string
          description: Name of the group collection
          required: true
        - name: groupPath
          in: path
          type: string
          description: Path identifier for the specific group entry
          required: true
    authentication:
      type: apikey
      key: X-SAP-LogonToken
      value: '{{env.CRYSTAL_REPORTS_API_KEY}}'
      placement: header
  exposes:
  - type: rest
    namespace: rest-odata-rest
    port: 8080
    description: REST adapter for SAP Crystal Reports RESTful Web Services API — OData. One Spectral-compliant resource per
      consumed operation, prefixed with /v1.
    resources:
    - path: /v1/infostore/{reportid}/rpt/data-svc
      name: infostore-reportid-rpt-data-svc
      description: REST surface for infostore-reportId-rpt-data.svc.
      operations:
      - method: GET
        name: getodataservicedocument
        description: Crystal Reports Get OData Service Document
        call: rest-odata.getodataservicedocument
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/infostore/{reportid}/rpt/data-svc/metadata
      name: infostore-reportid-rpt-data-svc-metadata
      description: REST surface for infostore-reportId-rpt-data.svc-$metadata.
      operations:
      - method: GET
        name: getodatametadata
        description: Crystal Reports Get EDMX Metadata Document
        call: rest-odata.getodatametadata
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/infostore/{reportid}/rpt/data-svc/grandtotals
      name: infostore-reportid-rpt-data-svc-grandtotals
      description: REST surface for infostore-reportId-rpt-data.svc-GrandTotals.
      operations:
      - method: GET
        name: getgrandtotals
        description: Crystal Reports Get Grand Totals
        call: rest-odata.getgrandtotals
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/infostore/{reportid}/rpt/data-svc/rows
      name: infostore-reportid-rpt-data-svc-rows
      description: REST surface for infostore-reportId-rpt-data.svc-Rows.
      operations:
      - method: GET
        name: getreportdatarows
        description: Crystal Reports Get Report Data Rows
        call: rest-odata.getreportdatarows
        with:
          $skip: rest.$skip
          $skiptoken: rest.$skiptoken
          $inlinecount: rest.$inlinecount
          $count: rest.$count
          $select: rest.$select
        outputParameters:
        - type: object
          mapping: $.
      - method: POST
        name: pushdatarow
        description: Crystal Reports Push a Row of Data to Transient Instance
        call: rest-odata.pushdatarow
        with:
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/infostore/{reportid}/rpt/data-svc/rows-index
      name: infostore-reportid-rpt-data-svc-rows-index
      description: REST surface for infostore-reportId-rpt-data.svc-Rows({index}).
      operations:
      - method: GET
        name: getreportdatarowbyindex
        description: Crystal Reports Get Specific Row by Index
        call: rest-odata.getreportdatarowbyindex
        with:
          index: rest.index
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/infostore/{reportid}/rpt/data-svc/rows-index/{fieldname}
      name: infostore-reportid-rpt-data-svc-rows-index-fieldname
      description: REST surface for infostore-reportId-rpt-data.svc-Rows({index})-fieldName.
      operations:
      - method: GET
        name: getrowfieldvalue
        description: Crystal Reports Get Specific Field from Row
        call: rest-odata.getrowfieldvalue
        with:
          index: rest.index
          fieldName: rest.fieldName
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/infostore/{reportid}/rpt/data-svc/rows-index/{fieldname}/value
      name: infostore-reportid-rpt-data-svc-rows-index-fieldname-value
      description: REST surface for infostore-reportId-rpt-data.svc-Rows({index})-fieldName-$value.
      operations:
      - method: GET
        name: getrowfieldrawvalue
        description: Crystal Reports Get Raw Field Value
        call: rest-odata.getrowfieldrawvalue
        with:
          index: rest.index
          fieldName: rest.fieldName
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/infostore/{reportid}/rpt/data-svc/{groupname}
      name: infostore-reportid-rpt-data-svc-groupname
      description: REST surface for infostore-reportId-rpt-data.svc-GroupName.
      operations:
      - method: GET
        name: getgroupdata
        description: Crystal Reports Get Group Data
        call: rest-odata.getgroupdata
        with:
          GroupName: rest.GroupName
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/infostore/{reportid}/rpt/data-svc/groupname-grouppath
      name: infostore-reportid-rpt-data-svc-groupname-grouppath
      description: REST surface for infostore-reportId-rpt-data.svc-GroupName}('{groupPath}').
      operations:
      - method: GET
        name: getgroupbypath
        description: Crystal Reports Get Specific Group by Path
        call: rest-odata.getgroupbypath
        with:
          GroupName: rest.GroupName
          groupPath: rest.groupPath
        outputParameters:
        - type: object
          mapping: $.
  - type: mcp
    namespace: rest-odata-mcp
    port: 9090
    transport: http
    description: MCP adapter for SAP Crystal Reports RESTful Web Services API — OData. One tool per consumed operation, routed
      inline through this capability's consumes block.
    tools:
    - name: crystal-reports-get-odata-service
      description: Crystal Reports Get OData Service Document
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: rest-odata.getodataservicedocument
      outputParameters:
      - type: object
        mapping: $.
    - name: crystal-reports-get-edmx-metadata
      description: Crystal Reports Get EDMX Metadata Document
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: rest-odata.getodatametadata
      outputParameters:
      - type: object
        mapping: $.
    - name: crystal-reports-get-grand-totals
      description: Crystal Reports Get Grand Totals
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: rest-odata.getgrandtotals
      outputParameters:
      - type: object
        mapping: $.
    - name: crystal-reports-get-report-data
      description: Crystal Reports Get Report Data Rows
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: rest-odata.getreportdatarows
      with:
        $skip: tools.$skip
        $skiptoken: tools.$skiptoken
        $inlinecount: tools.$inlinecount
        $count: tools.$count
        $select: tools.$select
      outputParameters:
      - type: object
        mapping: $.
    - name: crystal-reports-push-row-data
      description: Crystal Reports Push a Row of Data to Transient Instance
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: rest-odata.pushdatarow
      with:
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: crystal-reports-get-specific-row
      description: Crystal Reports Get Specific Row by Index
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: rest-odata.getreportdatarowbyindex
      with:
        index: tools.index
      outputParameters:
      - type: object
        mapping: $.
    - name: crystal-reports-get-specific-field
      description: Crystal Reports Get Specific Field from Row
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: rest-odata.getrowfieldvalue
      with:
        index: tools.index
        fieldName: tools.fieldName
      outputParameters:
      - type: object
        mapping: $.
    - name: crystal-reports-get-raw-field
      description: Crystal Reports Get Raw Field Value
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: rest-odata.getrowfieldrawvalue
      with:
        index: tools.index
        fieldName: tools.fieldName
      outputParameters:
      - type: object
        mapping: $.
    - name: crystal-reports-get-group-data
      description: Crystal Reports Get Group Data
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: rest-odata.getgroupdata
      with:
        GroupName: tools.GroupName
      outputParameters:
      - type: object
        mapping: $.
    - name: crystal-reports-get-specific-group
      description: Crystal Reports Get Specific Group by Path
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: rest-odata.getgroupbypath
      with:
        GroupName: tools.GroupName
        groupPath: tools.groupPath
      outputParameters:
      - type: object
        mapping: $.