Roadsync unauthenticated API

Unauthenticated operations not otherwise functionally categorized

OpenAPI Specification

roadsync-unauthenticated-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  contact:
    email: christo.delange@roadsync.com
  description: This API allows the Roadsync clients to manage aspects of the RoadSync service via an API.
  license:
    name: Copyright (c) 2020, RoadSync Inc.
  title: Client API v1.8 authenticated unauthenticated API
  version: 1.8.45
  x-api-id: 3ea39084-d8df-11ea-ad77-0017b600647f
  x-audience: external-partner
servers:
- url: https://client-api.staging.roadsync.com/{basePath}
  variables:
    Product:
      default: ClientApi
    basePath:
      default: v1
security:
- api_key: []
- session_token: []
tags:
- description: Unauthenticated operations not otherwise functionally categorized
  name: unauthenticated
paths:
  /login:
    options:
      operationId: login_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - unauthenticated
    post:
      description: Validate credentials and establish session
      operationId: login_post
      requestBody:
        $ref: '#/components/requestBodies/LoginRequest'
      responses:
        '200':
          $ref: '#/components/responses/LoginResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      summary: Accepts user credentials for validation, create a session and returns a session token
      tags:
      - unauthenticated
  /ping:
    get:
      description: Test backend connectivity
      operationId: ping_get
      parameters:
      - explode: true
        in: query
        name: pong
        required: false
        schema:
          maxLength: 2048
          pattern: /^.*$/
          type: string
        style: form
      responses:
        '200':
          $ref: '#/components/responses/PingResponse'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      summary: Does roundtrip with the backend API
      tags:
      - unauthenticated
    options:
      operationId: ping_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - unauthenticated
components:
  schemas:
    CodeMessage:
      additionalProperties: false
      description: A generic error object generally used for 500 responses
      properties:
        code:
          $ref: '#/components/schemas/CodeEnum'
        message:
          $ref: '#/components/schemas/Message'
      required:
      - code
      - message
    Pong:
      additionalProperties: false
      description: A ping response which also has API version
      example:
        pong: pong
        version: 1.8.45
      properties:
        pong:
          maxLength: 2048
          pattern: /^.*$/
          type: string
        timestamp:
          $ref: '#/components/schemas/DateTime'
        version:
          maxLength: 64
          pattern: ^[a-zA-Z0-9]*$
          type: string
      required:
      - version
      type: object
    EmailAddress:
      maxLength: 256
      pattern: /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,5})$/
      type: string
    DateTime:
      description: A timestamp of last modification of the entry.
      example: '2020-07-21 17:32:28Z'
      format: date-time
      type: string
    CodeEnum:
      default: Success
      enum:
      - Success
      - Error
      - Exception
      type: string
    SessionToken:
      description: Session token / identifier
      format: password
      maxLength: 2048
      pattern: /^.*$/
      type: string
    PingResponse:
      additionalProperties: false
      allOf:
      - $ref: '#/components/schemas/CodeMessage'
      - $ref: '#/components/schemas/Pong'
      type: object
    Message:
      maxLength: 2048
      pattern: /^[a-zA-Z0-9 ]*$/
      type: string
    UsernamePassword:
      additionalProperties: false
      description: User credentials object
      properties:
        Password:
          maxLength: 128
          pattern: /^.*$/
          type: string
        Username:
          maxLength: 64
          pattern: /^.*$/
          type: string
      type: object
    UserInfo:
      additionalProperties: false
      properties:
        avatarUrl:
          maxLength: 2048
          pattern: /^.*$/
          type: string
        companyId:
          $ref: '#/components/schemas/HashedId'
        createdAt:
          $ref: '#/components/schemas/DateTime'
        email:
          $ref: '#/components/schemas/EmailAddress'
        fileId:
          $ref: '#/components/schemas/HashedId'
        first:
          maxLength: 256
          pattern: /^.*$/
          type: string
        firstPasswordReset:
          type: boolean
        freshchatRestoreId:
          maxLength: 256
          pattern: /^.*$/
          type: string
        id:
          $ref: '#/components/schemas/HashedId'
        isLocked:
          type: boolean
        isVerified:
          type: boolean
        last:
          maxLength: 256
          pattern: /^.*$/
          type: string
        lastLogin:
          $ref: '#/components/schemas/DateTime'
        locationIds:
          items:
            $ref: '#/components/schemas/HashedId'
          maxItems: 64
          type: array
        lockedAt:
          $ref: '#/components/schemas/DateTime'
        phone:
          $ref: '#/components/schemas/PhoneNumberInternational'
        roles:
          items:
            $ref: '#/components/schemas/Role'
          maxItems: 64
          type: array
        tfaEnabled:
          type: boolean
        updatedAt:
          $ref: '#/components/schemas/DateTime'
        username:
          maxLength: 256
          pattern: /^.*$/
          type: string
      type: object
    LoginResponse:
      allOf:
      - $ref: '#/components/schemas/CodeMessage'
      - additionalProperties: false
        properties:
          SessionToken:
            $ref: '#/components/schemas/SessionToken'
          UserInfo:
            $ref: '#/components/schemas/UserInfo'
        type: object
      description: Session token / identifier
      type: object
    PhoneNumberInternational:
      maxLength: 128
      pattern: /^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$/
      type: string
    Role:
      enum:
      - ''
      - superadmin
      - companyadmin
      - accountant
      - employee
      - warehouseworker
      - rsemployee
      - shiftmanager
      - clientsupport
      - implementation
      - wexsettlementservice
      type: string
    Problem:
      additionalProperties: false
      properties:
        detail:
          description: 'A human readable explanation specific to this occurrence of the

            problem.

            '
          example: Connection to database timed out
          maxLength: 2048
          pattern: /^.*$/
          type: string
        instance:
          description: 'An absolute URI that identifies the specific occurrence of the problem.

            It may or may not yield further information if dereferenced.

            '
          format: uri
          maxLength: 2048
          pattern: /^.*$/
          type: string
        status:
          description: 'The HTTP status code generated by the origin server for this occurrence

            of the problem.

            '
          example: 503
          exclusiveMaximum: true
          format: int32
          maximum: 600
          minimum: 100
          type: integer
        title:
          description: 'A short, summary of the problem type. Written in english and readable

            for engineers (usually not suited for non technical stakeholders and

            not localized); example: Service Unavailable

            '
          maxLength: 256
          pattern: /^.*$/
          type: string
        type:
          default: about:blank
          description: 'An absolute URI that identifies the problem type.  When dereferenced,

            it SHOULD provide human-readable documentation for the problem type

            (e.g., using HTML).

            '
          example: https://problems.roadsync.com/problem/unspecified-error
          format: uri
          maxLength: 2048
          pattern: /^.*$/
          type: string
      type: object
    HashedId:
      maxLength: 128
      pattern: /^\w+$/
      type: string
  responses:
    ForbiddenError:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CodeMessage'
      description: Request is completely forbidden. API not provided or method and or endpoint not supported
      headers:
        WWW_Authenticate:
          explode: false
          schema:
            maxLength: 2048
            pattern: /^.*$/
            type: string
          style: simple
    NotFound404:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: 404 Not found
    TooManyRequests429:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: 429 too many requests response
    ServiceError500:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: Service Error
    LoginResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/LoginResponse'
      description: A login response
    UnauthorizedError:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CodeMessage'
      description: API key is missing or invalid
      headers:
        WWW_Authenticate:
          explode: false
          schema:
            maxLength: 2048
            pattern: /^.*$/
            type: string
          style: simple
    UnexpectedError:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: unexpected error response
    PingResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PingResponse'
      description: A backend test response
    Options200:
      content:
        application/json:
          schema:
            additionalProperties: false
            type: object
      description: 200 response
      headers:
        Access-Control-Allow-Credentials:
          explode: false
          schema:
            type: boolean
          style: simple
        Access-Control-Allow-Headers:
          explode: false
          schema:
            maxLength: 256
            pattern: ^[a-zA-Z0-9 ,]*$
            type: string
          style: simple
        Access-Control-Allow-Methods:
          explode: false
          schema:
            maxLength: 256
            pattern: ^[a-zA-Z0-9 ,]*$
            type: string
          style: simple
        Access-Control-Allow-Origin:
          explode: false
          schema:
            maxLength: 256
            pattern: /^.*$/
            type: string
          style: simple
        Cache-Control:
          explode: false
          schema:
            maxLength: 256
            pattern: ^[a-zA-Z0-9 ,\-]*$
            type: string
          style: simple
        Expires:
          explode: false
          schema:
            maxLength: 256
            pattern: ^[a-zA-Z0-9 \-]*$
            type: string
          style: simple
        Pragma:
          explode: false
          schema:
            maxLength: 256
            pattern: ^[a-zA-Z0-9 ,]*$
            type: string
          style: simple
  requestBodies:
    LoginRequest:
      content:
        application/json:
          examples:
            userlogin:
              summary: API user login example
              value:
                Password: password
                Username: user
          schema:
            $ref: '#/components/schemas/UsernamePassword'
      description: Perform user authentication against the API
      required: true
  securitySchemes:
    api_key:
      in: header
      name: x-api-key
      type: apiKey
      x-apikeyInfoFunc: client_api_server.controllers.authorization_controller.check_api_key
    session_token:
      bearerFormat: JWT
      scheme: bearer
      type: http
      x-apikeyInfoFunc: client_api_server.controllers.authorization_controller.check_session_token