info:
  description: This cube is the new api which will be integrated in CubicWeb 4.
  license:
    name: LGPL
    url: https://www.gnu.org/licenses/lgpl-3.0.en.html
  contact:
    name: LOGILAB S.A. (Paris, FRANCE)
    url: https://forge.extranet.logilab.fr/cubicweb/cubes/api
    email: contact@logilab.fr
  title: CubicWeb API
  version: 0.1.0
paths:
  /schema:
    x-pyramid-route-name: schema
    get:
      description: Returns this instance's Schema
      responses:
        '200':
          description: This instance's Schema
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CWSchema'
  /rql:
    x-pyramid-route-name: rql
    post:
      description: Executes the given RQL query
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RqlParams'
      responses:
        '200':
          description: The RQL result set
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResultSet'
        '400':
          description: The given RQL was badly formatted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorSchema'
  /transaction:
    x-pyramid-route-name: transaction
    post:
      description: Execute several queries in a single transaction
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/RqlTransactionParams'
      responses:
        '200':
          description: This instance's Schema
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ResultSet'
  /login:
    x-pyramid-route-name: login
    post:
      description: Tries to log in the user
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginParams'
      responses:
        '204':
          description: Token has been created and returned in set-cookie header
          headers:
            Set-Cookie:
              description: The created JWT
              schema:
                type: string
        '401':
          description: THe given login/password combo was not recognized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorSchema'
  /current-user:
    x-pyramid-route-name: current_user
    get:
      description: Get information about the user making the request
      responses:
        '200':
          description: This instance's Schema
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CurrentUser'
  /siteinfo:
    x-pyramid-route-name: siteinfo
    get:
      description: Get debug information for the current website
      responses:
        '200':
          description: This instance's Schema
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SiteInfo'
openapi: 3.0.3
components:
  schemas:
    CWSchema:
      type: object
      properties:
        entities:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
              description:
                type: string
              final:
                type: boolean
        relations_definitions:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
              description:
                type: string
              final:
                type: boolean
              subject:
                type: string
              object:
                type: string
              cardinality:
                type: string
              constraints:
                type: array
                nullable: true
              default:
                type: string
                nullable: true
    RqlParams:
      type: object
      properties:
        query:
          type: string
          minLength: 1
        params:
          type: object
          default: {}
          additionalProperties:
            $ref: '#/components/schemas/RqlParamsValue'
      required:
        - query
    RqlParamsValue:
      oneOf:
        - type: string
          nullable: true
        - type: number
        - type: boolean
    RqlTransactionParams:
      type: object
      properties:
        query:
          type: string
          minLength: 1
        params:
          type: object
          default: {}
          additionalProperties:
            $ref: '#/components/schemas/RqlTransactionParamsValue'
      required:
        - query
    RqlTransactionParamsValue:
      oneOf:
        - type: string
          nullable: true
        - type: number
        - type: boolean
        - type: object
          properties:
            queryIndex:
              type: number
            row:
              type: number
            column:
              type: number
          additionalProperties: false
    LoginParams:
      type: object
      properties:
        password:
          type: string
          minLength: 1
        login:
          type: string
          minLength: 1
      required:
        - login
        - password
    ErrorSchema:
      type: object
      properties:
        code:
          type: integer
        title:
          type: string
        error:
          type: object
          properties:
            data:
              type: object
            message:
              type: string
            title:
              type: string
          required:
            - message
            - title
      required:
        - code
        - title
        - error
    ResultSet:
      type: array
      items:
        type: array
        items:
          oneOf:
            - type: 'string'
              nullable: true
            - type: 'number'
            - type: 'boolean'
    CurrentUser:
      type: object
      nullable: true
      properties:
        eid:
          type: integer
        login:
          type: string
        dcTitle:
          type: string
      required:
        - eid
        - login
        - dcTitle
    SiteInfo:
      type: object
      properties:
        info:
          type: object
          properties:
            pyvalue:
              properties:
                base_url:
                  type: string
                config_mode:
                  type: string
                config_type:
                  type: string
                cubes:
                  type: object
                cubicweb:
                  type: array
                  items:
                    type: integer
                datadir_url:
                  type: string
                  nullable: true
                instance_home:
                  type: string
              type: object
            stats:
              type: object
              properties:
                available_cnxsets:
                  type: integer
                nb_active_threads:
                  type: integer
                rqlt_st_cache_hit:
                  type: integer
                rqlt_st_cache_miss:
                  type: integer
                rqlt_st_cache_size:
                  type: object
                  properties:
                    maxsize:
                      type: integer
                    size:
                      type: integer
                sql_cache_hit:
                  type: integer
                sql_cache_miss:
                  type: integer
                sql_cache_size:
                  properties:
                    maxsize:
                      type: integer
                    size:
                      type: integer
                  type: object
                sql_no_cache:
                  type: integer
                threads:
                  type: array
                  items:
                    type: string
                type_cache_size:
                  type: integer
        registry:
          type: object
        gc:
          type: object
          properties:
            lookupclasses:
              type: array
              items:
                type: array
                items:
                  type: string
            referenced:
              type: array
              items:
                type: array
                items:
                  type: string
            unreachable:
              type: array
