Table of Contents

OSG JourneyConnect 1.3 Specification

openapi: 3.0.3
info:
  title: OSG JourneyConnect - API Specification
  description: |-
    This document is the [OpenAPI 3.0 specification](https://swagger.io/specification/v3/) of the OSG JourneyConnect API.
    For more information, please see the [full documentation](https://docs.api.osgconnect.com) site.

    This API is intended for use by the employees and clients of OSG.  Any other use is strictly prohibited.
  contact:
    name: Customer Service
    email: clientcaredept@osgconnect.com
  version: 1.3.0
externalDocs:
  description: Privacy Policy
  url: https://osgconnect.com/privacy-policy/
servers:
  - url: https://testapi.osgconnect.com/v1
    description: Test
  - url: https://api.osgconnect.com/v1
    description: Production
tags:
  - name: utilities
    description: Verify connectivity and authentication with the API
  - name: communications
    description: Initiate digital communications
  - name: documents
    description: Search and fetch document information and artifacts

paths:
  /communications/send:
    post:
      security:
        - osgconnect_auth:
            - client:admin
            - communication-manager
            - communication-sender
      tags:
        - communications
      summary: Send a digital communication
      operationId: CommunicationsSend
      externalDocs:
        description: Full Documentation
        url: https://docs.api.osgconnect.com/docs/Api/Communications/Send/Send.html
      requestBody:
        $ref: '#/components/requestBodies/SendCommunicationRequest'
      responses:
        '202':
          $ref: '#/components/responses/SendCommunicationResponse'
        '400':
          $ref: '#/components/responses/BadRequestResponse'
        '401':
          $ref: '#/components/responses/NotAuthenticatedResponse'
        '403':
          $ref: '#/components/responses/NotAuthorizedResponse'
        default:
          $ref: '#/components/responses/UnexpectedErrorResponse'

  /documents/{documentId}:
    post:
      tags:
        - documents
      security:
        - osgconnect_auth:
            - client:admin
            - document:manager
            - document:viewer
      summary: Retrieves a document by its unique identifier
      operationId: GetDocumentById
      externalDocs:
        description: Full Documentation
        url: https://docs.api.osgconnect.com/docs/Api/Documents/Get/Get.html
      parameters:
        - name: documentId
          in: path
          description: The id of the document to be downloaded
          required: true
          schema:
            type: string
      requestBody:
        $ref: '#/components/requestBodies/GetDocumentByIdQueryRequest'
      responses:
        '200':
          $ref: '#/components/responses/GetDocumentByIdQueryResponse'
        '400':
          $ref: '#/components/responses/BadRequestResponse'
        '401':
          $ref: '#/components/responses/NotAuthenticatedResponse'
        '403':
          $ref: '#/components/responses/NotAuthorizedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        default:
          $ref: '#/components/responses/UnexpectedErrorResponse'

  /documents/{documentId}/download:
    post:
      tags:
        - documents
      security:
        - osgconnect_auth:
            - client:admin
            - document:manager
            - document:viewer
      summary: Download a document
      operationId: DocumentsDownload
      externalDocs:
        description: Full Documentation
        url: https://docs.api.osgconnect.com/docs/Api/Documents/Download/Download.html
      parameters:
        - name: documentId
          in: path
          description: The id of the document to be downloaded
          required: true
          schema:
            type: string
      requestBody:
        $ref: '#/components/requestBodies/DownloadDocumentRequest'
      responses:
        '200':
          $ref: '#/components/responses/DownloadDocumentResponse'
        '400':
          $ref: '#/components/responses/BadRequestResponse'
        '401':
          $ref: '#/components/responses/NotAuthenticatedResponse'
        '403':
          $ref: '#/components/responses/NotAuthorizedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        default:
          $ref: '#/components/responses/UnexpectedErrorResponse'

  /documents/search:
    post:
      tags:
        - documents
      security:
        - osgconnect_auth:
            - client:admin
            - document:manager
            - document:viewer
      summary: Search documents
      operationId: SearchDocuments
      externalDocs:
        description: Full Documentation
        url: https://docs.api.osgconnect.com/docs/Api/Documents/Search/Search.html
      requestBody:
        $ref: '#/components/requestBodies/SearchDocumentsQueryRequest'
      responses:
        '200':
          $ref: '#/components/responses/SearchDocumentsQueryResponse'
        '400':
          $ref: '#/components/responses/BadRequestResponse'
        '401':
          $ref: '#/components/responses/NotAuthenticatedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        default:
          $ref: '#/components/responses/UnexpectedErrorResponse'


  /utilities/echo:
    post:
      tags:
        - utilities
      summary: Test Authentication
      operationId: echo
      externalDocs:
        description: Full Documentation
        url: https://docs.api.osgconnect.com/docs/Api/Utilities/Echo/Echo.html
      requestBody:
        required: true
        description: Have the API echo the provided content.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EchoCommand'
      responses:
        '200':
          $ref: '#/components/responses/EchoCommandResponse'
        '400':
          $ref: '#/components/responses/BadRequestResponse'
        '401':
          $ref: '#/components/responses/NotAuthenticatedResponse'
        default:
          $ref: '#/components/responses/UnexpectedErrorResponse'
      security:
        - osgconnect_auth:
            - client:authenticated

  /utilities/ping:
    get:
      tags:
        - utilities
      summary: Test Connectivity
      externalDocs:
        description: Full Documentation
        url: https://docs.api.osgconnect.com/docs/Api/Utilities/Ping/Ping.html
      responses:
        '200':
          $ref: '#/components/responses/SuccessResponse'
        default:
          $ref: '#/components/responses/UnexpectedErrorResponse'

#########################################################################

components:
  schemas:
    Address:
      type: object
      properties:
        AddressLine1:
          type: string
          example: Headquarters
        AddressLine2:
          type: string
          example: OSG
        AddressLine3:
          type: string
          example: 1234 Main Street
        AddressLine4:
          type: string
          example: Suite 1
        City:
          type: string
          example: Carol Stream
        State:
          type: string
          example: IL
        PostalCode:
          type: string
          example: 60188
        PostalCodeExtension:
          type: string
          example: 0000
        AddressCountry:
          type: string
          example: US

    ApiResult:
      type: object
      properties:
        IsSuccess:
          type: boolean
          example: true
        Messages:
          type: array
          items:
            type: string
            example: Hello!
        SentOnUtc:
          type: string
          format: date-time
          example: '2025-01-01Z00:00:00'
        TraceId:
          type: string
          example: 00000000-0000-0000-0000-000000000000
        CorrelationId:
          type: string
          example: test-request-1

    Caller:
      type: object
      properties:
        ClientId:
          type: string
          example: 00000000-0000-0000-0000-000000000000
        ClientCustomerId:
          type: string
          example: test-user-1
        CorrelationId:
          type: string
          example: customer-request-1

    ClientDataEntry:
      type: object
      properties:
        Name:
          type: string
          example: customer-name
        Value:
          type: string
          example: Test User

    DocumentSummary:
      type: object
      properties:
        DocumentId:
          type: string
          example: df767cc2-2c9e-48cb-986b-2bc05d01cae7
        DocumentName:
          type: string
          example: test.txt
        ContentType:
          type: string
          example: text/plain
        ContentLength:
          type: number
          example: 4
        Contents:
          type: string
          example: VGhpcyBpcyBhIHRlc3Q=

    DownloadDocumentQuery:
      type: object
      properties:
        Caller:
          $ref: '#/components/schemas/Caller'

    EchoCommand:
      type: object
      properties:
        InputValue:
          type: string
          example: Hello API!
        Caller:
          $ref: '#/components/schemas/Caller'

    EchoCommandResult:
      type: object
      properties:
        OutputValue:
          type: string
          example: Hello API!
        Result:
          $ref: '#/components/schemas/ApiResult'

    GetDocumentByIdQuery:
      type: object
      properties:
        IncludeContents:
          type: boolean
          example: true
        Caller:
          $ref: '#/components/schemas/Caller'

    GetDocumentByIdQueryResult:
      type: object
      properties:
        Document:
          $ref: '#/components/schemas/DocumentSummary'
        Result:
          $ref: '#/components/schemas/ApiResult'

    SearchDocumentsQuery:
      type: object
      properties:
        AccountNumber:
          type: string
          example: 1234567890
        AccountDiscriminator:
          type: string
          example: 1
        StartDate:
          type: string
          format: date
          example: 2025-01-01
        EndDate:
          type: string
          format: date
          example: 2025-04-30
        PageSize:
          type: number
          example: 25
        PageNumber:
          type: number
          example: 1
        Caller:
          $ref: '#/components/schemas/Caller'

    SearchDocumentsQueryResult:
      type: object
      properties:
        Documents:
          type: array
          items:
            $ref: '#/components/schemas/DocumentSummary'
        TotalResults:
          type: number
          example: 1
        PageNumber:
          type: number
          example: 1
        TotalPages:
          type: number
          example: 1
        PageSize:
          type: number
          example: 25
        Result:
          $ref: '#/components/schemas/ApiResult'

    SendCommunicationCommand:
      type: object
      properties:
        CommunicationType:
          type: string
          example: osg-test-letter
        CommunicationSubType:
          type: string
          example: welcome-letter
        DeliveryMethod:
          type: string
          example: email
          enum:
            - Email
            - Print
            - EmailAndPrint
        AccountNumber:
          type: string
          example: 1234567890
        AccountDiscriminator:
          type: string
          example: 1
        EmailAddress:
          type: string
          example: test@osgconnect.com
        EmailOptions:
          type: string
          example: PrintOnFailure
          enum:
            - None
            - PrintOnFailure
        MailingAddress:
          $ref: '#/components/schemas/Address'
        ClientData:
          type: object
          properties:
            Items:
              type: array
              items:
                $ref: '#/components/schemas/ClientDataEntry'
        Caller:
          $ref: '#/components/schemas/Caller'

    SendCommunicationResult:
      type: object
      properties:
        Result:
          $ref: '#/components/schemas/ApiResult'

          #-------------------------------------------------------------------------------  

  requestBodies:
    DownloadDocumentRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/DownloadDocumentQuery'

    EchoCommandRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/EchoCommand'

    GetDocumentByIdQueryRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GetDocumentByIdQuery'

    SearchDocumentsQueryRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SearchDocumentsQuery'

    SendCommunicationRequest:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SendCommunicationCommand'

          #-------------------------------------------------------------------------------

  responses:
    AcceptedResponse:
      description: The request was received and is being processed.

    BadRequestResponse:
      description: The request was not valid.  The document body may contain additional details.
      content:
        text/plain:
          schema:
            type: string

    DownloadDocumentResponse:
      description: The request was successful
      content:
        application/octet-stream:
          schema:
            type: string
            format: binary


    EchoCommandResponse:
      description: Contains the result of the echo command.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/EchoCommandResult'

    GetDocumentByIdQueryResponse:
      description: Contains the result of the get document by id query
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GetDocumentByIdQueryResult'

    NotAuthenticatedResponse:
      description: The user is not authenticated or the security token has expired.

    NotAuthorizedResponse:
      description: The user is not authorized to execute the request.

    NotFoundResponse:
      description: The requested item was not found.

    SearchDocumentsQueryResponse:
      description: Contains the results of the document search.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SearchDocumentsQueryResult'

    SendCommunicationResponse:
      description: Contain the result of the send communication request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/SendCommunicationResult'

    SuccessResponse:
      description: The request was successful.

    UnexpectedErrorResponse:
      description: An unexpected error occurred processing the request.
      content:
        text/plain:
          schema:
            type: string

  #-------------------------------------------------------------------------------

  securitySchemes:
    osgconnect_auth:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: security/token
          refreshUrl: security/refresh
          scopes:
            "client:admin": you have the ability to execute all operations for your organization
            "client:authenticated": you have been successfully authenticated
            "communication:manager": you can manage and view communications
            "communication:sender": you can send new communications
            "document:manager": you can manage and view documents
            "document:viewer": you can view documents