Certifyos Credentialing Workflow API

APIs for managing credentialing workflows

OpenAPI Specification

certifyos-credentialingworkflow-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Certifyos Credentialing Workflow API
  version: 1.0.0
  description: 'Operations tagged CredentialingWorkflow across 2 of this provider''s published API definitions: certifyos-api-service-openapi.yml, certifyos-roster-service-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: http://localhost:9000
  description: Local Development Server
- url: https://api-service.staging.certifyos.com
  description: Staging Server
- url: https://api-service.internal.certifyos.com
  description: Internal Server
- url: https://api-service.test.certifyos.com
  description: Test Server
- url: https://api-service.demo.certifyos.com
  description: Demo Server
- url: https://api-service.certifyos.com
  description: Production Server
- url: http://localhost:9001
  description: Local Development Server
tags:
- name: CredentialingWorkflow
  description: APIs for managing credentialing workflows
paths:
  /credentialing-workflows:
    servers:
    - url: http://localhost:9000
      description: Local Development Server
    - url: https://api-service.staging.certifyos.com
      description: Staging Server
    - url: https://api-service.internal.certifyos.com
      description: Internal Server
    - url: https://api-service.test.certifyos.com
      description: Test Server
    - url: https://api-service.demo.certifyos.com
      description: Demo Server
    - url: https://api-service.certifyos.com
      description: Production Server
    get:
      summary: Get credentialing workflows
      description: Retrieves a list of credentialing workflows based on filter criteria
      operationId: getCredentialingWorkflows
      tags:
      - CredentialingWorkflow
      parameters:
      - description: End at document ID, for backward cursor-based pagination
        name: endAtId
        in: query
        schema:
          type: string
      - description: "## Filter Criteria\n\nThe filter parameter must be URL encoded when sent. Filters are specified as JSON objects where each field can have\none or more filter operations.\n\n### Filterable Fields\n\n#### Core Workflow Fields\n- **id**: Workflow unique identifier (String)\n- **tenantId**: Tenant identifier (String)\n- **tenantPractitionerId**: Tenant practitioner identifier (String)\n- **createdAt**: Workflow creation timestamp (Timestamp)\n- **updatedAt**: Workflow last update timestamp (Timestamp)\n\n#### Data Fields - Workflow Information\n- **data.externalId**: External identifier (String)\n- **data.practitionerFileType**: Type of practitioner file (String)\n- **data.credentialingCycle**: Credentialing cycle (String)\n- **data.credentialedStates**: Array of credentialed states (Array - eq/in only)\n- **data.assignedTo**: User assigned to the workflow (String)\n- **data.assignedBy**: User who assigned the workflow (String)\n\n#### Data Fields - Status & Dates\n- **data.credentialingStatus**: Current workflow status (String)\n- **data.psvReadyDate**: PSV ready date (Timestamp)\n- **data.psvCompletedDate**: PSV completed date (Timestamp)\n- **data.credentialingStatusLastUpdatedDate**: Status last updated date (Timestamp)\n- **data.previousCredentialedDate**: Previous credentialing date (Date)\n- **data.credentialingDueDate**: Credentialing due date (Date)\n- **data.nextCredentialingDate**: Next credentialing date (Date)\n- **data.credentialingDecisionDate**: Credentialing decision date (Date)\n\n#### Data Fields - Practitioner Information\n- **data.practitioner.firstName**: Practitioner first name (String, case-insensitive contains)\n- **data.practitioner.middleName**: Practitioner middle name (String)\n- **data.practitioner.lastName**: Practitioner last name (String, case-insensitive contains)\n- **data.practitioner.npi**: National Provider Identifier (String)\n- **data.practitioner.caqhProviderId**: CAQH Provider ID (String)\n- **data.practitioner.primaryEmail**: Primary email address (String)\n- **data.practitioner.licensedStates**: Array of licensed states (Array - eq/in only)\n- **data.practitioner.practitionerTypesToCredential**: Array of practitioner types to credential (Array - eq/in only)\n- **data.practitioner.statesToCredential**: Array of states to credential (Array - eq/in only)\n- **data.practitioner.lineOfBusiness**: Array of lines of business (Array - eq/in only)\n- **data.practitioner.userDefinedFields.market**: Array of markets (Array - eq/in only)\n\n### Supported Filter Operations\n\n#### String Fields (eq, neq, in, nin, contains)\n- **eq**: Exact match - `{\"field\":{\"eq\":\"value\"}}`\n- **neq**: Not equal - `{\"field\":{\"neq\":\"value\"}}`\n- **in**: Match any value in array - `{\"field\":{\"in\":[\"value1\",\"value2\"]}}`\n- **nin**: Not match any value in array - `{\"field\":{\"nin\":[\"value1\",\"value2\"]}}`\n- **contains**: Substring match - `{\"field\":{\"contains\":\"partial\"}}` (case-insensitive for name fields)\n\n#### Timestamp/Date Fields (eq, neq, gt, gte, lt, lte)\n- **eq**: Exact match - `{\"field\":{\"eq\":\"2023-01-01T00:00:00Z\"}}`\n- **neq**: Not equal - `{\"field\":{\"neq\":\"2023-01-01T00:00:00Z\"}}`\n- **gt**: Greater than - `{\"field\":{\"gt\":\"2023-01-01T00:00:00Z\"}}`\n- **gte**: Greater than or equal - `{\"field\":{\"gte\":\"2023-01-01T00:00:00Z\"}}`\n- **lt**: Less than - `{\"field\":{\"lt\":\"2023-01-01T00:00:00Z\"}}`\n- **lte**: Less than or equal - `{\"field\":{\"lte\":\"2023-01-01T00:00:00Z\"}}`\n\n#### Array Fields (eq, in only)\n- **eq**: Array contains value - `{\"field\":{\"eq\":\"value\"}}`\n- **in**: Array contains any of these values - `{\"field\":{\"in\":[\"value1\",\"value2\"]}}`\n\n### Filter Examples\n\n#### Basic Filters (before URL encoding)\n```json\n// Filter by id\n{\"id\":{\"eq\":\"123\"}}\n\n// Filter by tenant\n{\"tenantId\":{\"eq\":\"tenant123\"}}\n\n// Filter by practitioner ID\n{\"tenantPractitionerId\":{\"eq\":\"practitioner456\"}}\n\n// Filter by credentialing status\n{\"data.credentialingStatus\":{\"eq\":\"PSV_READY\"}}\n\n// Filter by assigned user\n{\"data.assignedTo\":{\"eq\":\"user123\"}}\n```\n\n#### Practitioner Filters\n```json\n// Search by practitioner first name (case-insensitive)\n{\"data.practitioner.firstName\":{\"contains\":\"Alice\"}}\n\n// Filter by NPI (exact match)\n{\"data.practitioner.npi\":{\"eq\":\"1234567890\"}}\n\n// Filter by CAQH Provider ID\n{\"data.practitioner.caqhProviderId\":{\"eq\":\"12345678\"}}\n\n// Filter by email\n{\"data.practitioner.primaryEmail\":{\"contains\":\"@example.com\"}}\n```\n\n#### Array Field Filters\n```json\n// Filter by practitioner type to credential\n{\"data.practitioner.practitionerTypesToCredential\":{\"eq\":\"MD\"}}\n\n// Filter by multiple states to credential\n{\"data.practitioner.statesToCredential\":{\"in\":[\"CA\",\"NY\",\"TX\"]}}\n\n// Filter by licensed states\n{\"data.practitioner.licensedStates\":{\"in\":[\"CA\",\"NY\"]}}\n\n// Filter by line of business\n{\"data.practitioner.lineOfBusiness\":{\"eq\":\"MEDICARE\"}}\n\n// Filter by multiple lines of business\n{\"data.practitioner.lineOfBusiness\":{\"in\":[\"MEDICARE\",\"MEDICAID\"]}}\n\n// Filter by market\n{\"data.practitioner.userDefinedFields.market\":{\"eq\":\"MARKET1\"}}\n\n// Filter by multiple markets\n{\"data.practitioner.userDefinedFields.market\":{\"in\":[\"MARKET1\",\"MARKET2\"]}}\n\n// Filter by credentialed states\n{\"data.credentialedStates\":{\"eq\":\"CA\"}}\n```\n\n#### Date/Timestamp Filters\n```json\n// Workflows created after a date\n{\"createdAt\":{\"gt\":\"2023-01-01T00:00:00Z\"}}\n\n// PSV ready within a date range\n{\"data.psvReadyDate\":{\"gte\":\"2023-01-01T00:00:00Z\",\"lte\":\"2023-12-31T23:59:59Z\"}}\n\n// Workflows updated in last 7 days\n{\"updatedAt\":{\"gte\":\"2023-01-15T00:00:00Z\"}}\n```\n\n#### Combined Filters\n```json\n// Multiple conditions (AND logic)\n{\n  \"data.practitioner.firstName\":{\"contains\":\"Alice\"},\n  \"data.practitioner.npi\":{\"eq\":\"1234567890\"},\n  \"data.credentialingStatus\":{\"eq\":\"PSV_READY\"}\n}\n\n// Filter by status and date range\n{\n  \"data.credentialingStatus\":{\"eq\":\"CRED_APPROVED\"},\n  \"data.credentialingDecisionDate\":{\"gte\":\"2023-01-01\",\"lte\":\"2023-12-31\"}\n}\n\n// Filter by line of business and status\n{\n  \"data.practitioner.lineOfBusiness\":{\"in\":[\"MEDICARE\"]},\n  \"data.credentialingStatus\":{\"eq\":\"PSV_READY\"}\n}\n\n// Filter by market and status\n{\n  \"data.practitioner.userDefinedFields.market\":{\"in\":[\"MARKET1\"]},\n  \"data.credentialingStatus\":{\"eq\":\"PSV_READY\"}\n}\n```\n\n### cURL Examples\n```bash\n# Filter by id\ncurl -X GET 'http://localhost:8080/credentialing-workflows?filter=%7B%22id%22%3A%7B%22eq%22%3A%22123%22%7D%7D'\n\n# Filter by practitioner firstName (case-insensitive)\ncurl -X GET 'http://localhost:8080/credentialing-workflows?filter=%7B%22data.practitioner.firstName%22%3A%7B%22contains%22%3A%22Alice%22%7D%7D'\n\n# Filter by NPI\ncurl -X GET 'http://localhost:8080/credentialing-workflows?filter=%7B%22data.practitioner.npi%22%3A%7B%22eq%22%3A%221234567890%22%7D%7D'\n\n# Filter by states to credential\ncurl -X GET 'http://localhost:8080/credentialing-workflows?filter=%7B%22data.practitioner.statesToCredential%22%3A%7B%22in%22%3A%5B%22CA%22%2C%22NY%22%5D%7D%7D'\n\n# Filter by line of business\ncurl -X GET 'http://localhost:8080/credentialing-workflows?filter=%7B%22data.practitioner.lineOfBusiness%22%3A%7B%22in%22%3A%5B%22MEDICARE%22%5D%7D%7D'\n\n# Filter by market\ncurl -X GET 'http://localhost:8080/credentialing-workflows?filter=%7B%22data.practitioner.userDefinedFields.market%22%3A%7B%22in%22%3A%5B%22MARKET1%22%5D%7D%7D'\n\n# Combined filter\ncurl -X GET 'http://localhost:8080/credentialing-workflows?filter=%7B%22data.practitioner.firstName%22%3A%7B%22contains%22%3A%22Alice%22%7D%2C%22data.credentialingStatus%22%3A%7B%22eq%22%3A%22PSV_READY%22%7D%7D'\n```\n\n**Note**: Always URL encode the JSON filter string before sending the request.\n"
        name: filter
        in: query
        schema:
          type: string
      - description: "## Sorting/Ordering\n\nSort results by specifying a field name and direction. The order parameter must be URL encoded when sent.\n\n### Sortable Fields\nYou can sort by any of the following fields:\n- **id**: Workflow unique identifier\n- **tenantPractitionerId**: Tenant practitioner identifier\n- **createdAt**: Workflow creation timestamp\n- **createdBy**: User who created the workflow (sortable only, not filterable)\n- **updatedAt**: Last update timestamp\n- **updatedBy**: User who last updated the workflow (sortable only, not filterable)\n- **data**: JSON data field (lexicographic ordering)\n\n### Sort Direction\n- **ASC**: Ascending order (default)\n- **DESC**: Descending order\n\n**Note**: Sort direction is case-insensitive, but uppercase is recommended (ASC/DESC).\n\n### Sort Format\n```json\n{\n  \"orderBy\": \"fieldName\",\n  \"orderByDirection\": \"ASC|DESC\"\n}\n```\n\n### Sort Examples\n\n#### Basic Sorting (before URL encoding)\n```json\n// Sort by creation date (newest first)\n{\"orderBy\":\"createdAt\",\"orderByDirection\":\"DESC\"}\n\n// Sort by id (ascending)\n{\"orderBy\":\"id\",\"orderByDirection\":\"ASC\"}\n\n// Sort by last update (newest first)\n{\"orderBy\":\"updatedAt\",\"orderByDirection\":\"DESC\"}\n```\n\n### cURL Examples\n```bash\n# Sort by creation date (newest first)\ncurl -X GET 'http://localhost:8080/credentialing-workflows?order=%7B%22orderBy%22%3A%22createdAt%22%2C%22orderByDirection%22%3A%22DESC%22%7D'\n\n# Sort by id (ascending)\ncurl -X GET 'http://localhost:8080/credentialing-workflows?order=%7B%22orderBy%22%3A%22id%22%2C%22orderByDirection%22%3A%22ASC%22%7D'\n\n# Sort by tenant practitioner (ascending)\ncurl -X GET 'http://localhost:8080/credentialing-workflows?order=%7B%22orderBy%22%3A%22tenantPractitionerId%22%2C%22orderByDirection%22%3A%22ASC%22%7D'\n\n# Combine filter and sort\ncurl -X GET 'http://localhost:8080/credentialing-workflows?filter=%7B%22data.credentialingStatus%22%3A%7B%22eq%22%3A%22PSV_READY%22%7D%7D&order=%7B%22orderBy%22%3A%22createdAt%22%2C%22orderByDirection%22%3A%22DESC%22%7D'\n```\n\n**Note**: Always URL encode the JSON order string before sending the request.\n"
        name: order
        in: query
        schema:
          type: string
      - description: Page number (0-based), for offset-based pagination
        name: page
        in: query
        schema:
          type: integer
          format: int32
          default: '0'
      - description: Page size
        name: size
        in: query
        schema:
          type: integer
          format: int32
          default: '50'
      - description: When true, skips DAL enrichment and verifiedBy user lookups
        name: skipEnrichment
        in: query
        schema:
          type: boolean
          default: false
      - description: Start after document ID, for forward cursor-based pagination
        name: startAfterId
        in: query
        schema:
          type: string
      - description: Include PII in response; requires practitioner read:pii permission
        in: header
        name: X-PII-View
        schema:
          type: string
      - description: Tenant ID
        required: true
        name: tenant-id
        in: header
        schema:
          type: string
      responses:
        '200':
          description: Successfully retrieved credentialing workflows
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetCredentialingWorkflowsResponse'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError1'
        '401':
          description: Unauthorized - Authentication required
        '403':
          description: Forbidden - User does not have required permissions
        '500':
          description: Internal Server Error - An unexpected error occurred
      security:
      - jwt: []
    post:
      summary: Create a new credentialing workflow
      description: Creates a new credentialing workflow
      operationId: createCredentialingWorkflow
      tags:
      - CredentialingWorkflow
      parameters:
      - description: Tenant ID
        required: true
        name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCredentialingWorkflowRequest'
        required: true
      responses:
        '201':
          description: Successfully created the credentialing workflow
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CredentialingWorkflowResponse'
        '400':
          description: Invalid request data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestErrorResponse'
        '401':
          description: Unauthorized - Authentication required
        '403':
          description: Forbidden - User does not have required permissions
        '409':
          description: Conflict - An active credentialing workflow already exists for this practitioner. Complete or withdraw the existing workflow before creating a new one.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestErrorResponse'
        '422':
          description: Unprocessable Entity - Business rule violation
        '500':
          description: Internal Server Error - An unexpected error occurred
      security:
      - jwt: []
  /credentialing-workflows/assignments:
    servers:
    - url: http://localhost:9000
      description: Local Development Server
    - url: https://api-service.staging.certifyos.com
      description: Staging Server
    - url: https://api-service.internal.certifyos.com
      description: Internal Server
    - url: https://api-service.test.certifyos.com
      description: Test Server
    - url: https://api-service.demo.certifyos.com
      description: Demo Server
    - url: https://api-service.certifyos.com
      description: Production Server
    post:
      summary: Create assignments for multiple credentialing workflows
      description: Creates assignments for multiple credentialing workflows in a single operation. Workflows are evenly distributed across the provided user IDs using round-robin distribution. Each workflow is processed independently, and results include both successful and failed assignments.
      operationId: createBulkAssignment
      tags:
      - CredentialingWorkflow
      parameters:
      - description: Tenant ID
        required: true
        name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkCreateAssignmentRequest'
        required: true
      responses:
        '200':
          description: Bulk assignment operation completed. Check successful and failed arrays for individual results.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkAssignmentResponse'
        '400':
          description: Invalid request data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestErrorResponse'
        '401':
          description: Unauthorized - Authentication required
        '403':
          description: Forbidden - User does not have required permissions
        '500':
          description: Internal Server Error - An unexpected error occurred
      security:
      - jwt: []
  /credentialing-workflows/bulk-create:
    servers:
    - url: http://localhost:9000
      description: Local Development Server
    - url: https://api-service.staging.certifyos.com
      description: Staging Server
    - url: https://api-service.internal.certifyos.com
      description: Internal Server
    - url: https://api-service.test.certifyos.com
      description: Test Server
    - url: https://api-service.demo.certifyos.com
      description: Demo Server
    - url: https://api-service.certifyos.com
      description: Production Server
    post:
      summary: Create credentialing workflows for multiple practitioners (async)
      description: Asynchronously creates credentialing workflows for multiple practitioners. The request is accepted and processing begins immediately in the background. Each workflow is processed independently with automatic practitioner data hydration. Results are logged but not returned in the response.
      operationId: createBulkCredentialingWorkflows
      tags:
      - CredentialingWorkflow
      parameters:
      - description: Tenant ID
        required: true
        name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkCreateCredentialingWorkflowRequest'
        required: true
      responses:
        '202':
          description: Bulk workflow creation request accepted and processing started. The operation will complete in the background.
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Invalid request data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestErrorResponse'
        '401':
          description: Unauthorized - Authentication required
        '403':
          description: Forbidden - User does not have required permissions
        '500':
          description: Internal Server Error - An unexpected error occurred
      security:
      - jwt: []
  /credentialing-workflows/cloud-create:
    servers:
    - url: http://localhost:9000
      description: Local Development Server
    - url: https://api-service.staging.certifyos.com
      description: Staging Server
    - url: https://api-service.internal.certifyos.com
      description: Internal Server
    - url: https://api-service.test.certifyos.com
      description: Test Server
    - url: https://api-service.demo.certifyos.com
      description: Demo Server
    - url: https://api-service.certifyos.com
      description: Production Server
    post:
      summary: Cloud Task callback for creating a single credentialing workflow
      description: 'Called by Cloud Tasks as part of the v2 bulk-create flow. Creates a single credentialing workflow and updates the bulk request item status. Required body fields: certifyPractitionerId (string), tenantPractitionerId (string), credentialingWorkflowBulkRequestId (string), credentialingWorkflowBulkRequestItemId (string). Optional body field: data (object) - workflow creation payload.'
      operationId: cloudCreateCredentialingWorkflow
      tags:
      - CredentialingWorkflow
      parameters:
      - description: Tenant ID
        name: tenant-id
        in: header
        schema:
          type: string
      - description: User ID for service-to-service calls
        name: user-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JsonNode'
        required: true
      responses:
        '201':
          description: Workflow created successfully
        '400':
          description: Missing required fields in request body
        '409':
          description: Active workflow already exists or duplicate active item
        '500':
          description: Failed to create workflow
      security:
      - jwt: []
  /credentialing-workflows/data-pipeline-callback:
    servers:
    - url: http://localhost:9000
      description: Local Development Server
    - url: https://api-service.staging.certifyos.com
      description: Staging Server
    - url: https://api-service.internal.certifyos.com
      description: Internal Server
    - url: https://api-service.test.certifyos.com
      description: Test Server
    - url: https://api-service.demo.certifyos.com
      description: Demo Server
    - url: https://api-service.certifyos.com
      description: Production Server
    post:
      summary: Data pipeline callback
      description: Receives callback from DI team after MDM Orchestration completes. Marks workflow data-pipeline status and syncs practitioner OV sections.
      operationId: dataPipelineCallback
      tags:
      - CredentialingWorkflow
      parameters:
      - description: Tenant ID
        required: true
        name: tenant-id
        in: header
        schema:
          type: string
      - name: user-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DataPipelineCallbackRequest'
        required: true
      responses:
        '200':
          description: Callback processed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataPipelineCallbackResponse'
        '400':
          description: Bad request - missing or invalid parameters
        '404':
          description: Data pipeline request not found
        '500':
          description: Internal server error
      security:
      - jwt: []
  /credentialing-workflows/dmf-check:
    servers:
    - url: http://localhost:9000
      description: Local Development Server
    - url: https://api-service.staging.certifyos.com
      description: Staging Server
    - url: https://api-service.internal.certifyos.com
      description: Internal Server
    - url: https://api-service.test.certifyos.com
      description: Test Server
    - url: https://api-service.demo.certifyos.com
      description: Demo Server
    - url: https://api-service.certifyos.com
      description: Production Server
    post:
      summary: DAL DMF (Deceased) check
      description: Calls the DAL DMF (Deceased) check endpoint with SSN and date of birth. Use to verify DAL DMF is working.
      operationId: dmfCheck
      tags:
      - CredentialingWorkflow
      parameters:
      - description: Tenant ID
        required: true
        name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        description: SSN (9 digits) and dateOfBirth (yyyy-MM-dd)
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DmfRequest'
        required: true
      responses:
        '200':
          description: DMF check result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DmfResponse'
        '400':
          description: Invalid request (e.g. SSN/dateOfBirth validation)
        '502':
          description: DAL DMF (Deceased) check failed or unavailable
      security:
      - jwt: []
  /credentialing-workflows/replay-webhooks:
    servers:
    - url: http://localhost:9000
      description: Local Development Server
    - url: https://api-service.staging.certifyos.com
      description: Staging Server
    - url: https://api-service.internal.certifyos.com
      description: Internal Server
    - url: https://api-service.test.certifyos.com
      description: Test Server
    - url: https://api-service.demo.certifyos.com
      description: Demo Server
    - url: https://api-service.certifyos.com
      description: Production Server
    post:
      summary: Replay missed webhooks for credentialing workflows
      description: Accepts a list of workflow IDs and asynchronously replays credential_workflow.status.changed webhooks for each. Returns 202 Accepted immediately; progress is logged with the [webhook-replay] prefix. Each workflow is fetched and routed through the same webhook code path used during normal status changes.
      operationId: replayWebhooks
      tags:
      - CredentialingWorkflow
      parameters:
      - description: Tenant ID
        in: header
        required: true
        name: tenant-id
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReplayWebhooksRequest'
        required: true
      responses:
        '202':
          description: Webhook replay accepted and processing in the background
        '400':
          description: Invalid request data
        '401':
          description: Unauthorized - Authentication required
        '403':
          description: Forbidden - User does not have required permissions
        '500':
          description: Internal Server Error - An unexpected error occurred
      security:
      - jwt: []
  /credentialing-workflows/timeline-events:
    servers:
    - url: http://localhost:9000
      description: Local Development Server
    - url: https://api-service.staging.certifyos.com
      description: Staging Server
    - url: https://api-service.internal.certifyos.com
      description: Internal Server
    - url: https://api-service.test.certifyos.com
      description: Test Server
    - url: https://api-service.demo.certifyos.com
      description: Demo Server
    - url: https://api-service.certifyos.com
      description: Production Server
    post:
      summary: Change status of multiple credentialing workflows
      description: Creates timeline events for multiple credentialing workflows in a single operation. This allows changing the status of multiple workflows at once. Each workflow is processed independently, and the response includes both successful and failed operations.
      operationId: bulkStatusChange
      tags:
      - CredentialingWorkflow
      parameters:
      - description: Tenant ID
        required: true
        name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        description: Bulk status change request with workflow IDs and timeline event data
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkStatusChangeRequest'
        required: true
      responses:
        '200':
          description: Bulk status change operation completed. Check successful and failed arrays for details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkStatusChangeResponse'
        '400':
          description: Invalid request data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestErrorResponse'
        '401':
          description: Unauthorized - Authentication required
        '403':
          description: Forbidden - User does not have required permissions
        '500':
          description: Internal Server Error - An unexpected error occurred
      security:
      - jwt: []
  /credentialing-workflows/v2/bulk-create:
    servers:
    - url: http://localhost:9000
      description: Local Development Server
    - url: https://api-service.staging.certifyos.com
      description: Staging Server
    - url: https://api-service.internal.certifyos.com
      description: Internal Server
    - url: https://api-service.test.certifyos.com
      description: Test Server
    - url: https://api-service.demo.certifyos.com
      description: Demo Server
    - url: https://api-service.certifyos.com
      description: Production Server
    post:
      summary: Create credentialing workflows for multiple practitioners via Cloud Tasks (v2)
      description: Accepts a bulk workflow creation request, creates a tracking entry in the database, and enqueues individual workflow creation tasks via Cloud Tasks for reliable processing. Each practitioner workflow is created independently through the cloud-create callback. Returns immediately with 202 Accepted.
      operationId: createBulkCredentialingWorkflowsV2
      tags:
      - CredentialingWorkflow
      parameters:
      - description: Tenant ID
        required: true
        name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkCreateCredentialingWorkflowRequest'
        required: true
      responses:
        '202':
          description: Bulk workflow creation request accepted. Individual workflows will be created via Cloud Tasks.
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Invalid request data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestErrorResponse'
        '401':
          description: Unauthorized - Authentication required
        '403':
          description: Forbidden - User does not have required permissions
        '500':
          description: Internal Server Error - An unexpected error occurred
      security:
      - jwt: []
  /credentialing-workflows/{id}:
    servers:
    - url: http://localhost:9000
      description: Local Development Server
    - url: https://api-service.staging.certifyos.com
      description: Staging Server
    - url: https://api-service.internal.certifyos.com
      description: Internal Server
    - url: https://api-service.test.certifyos.com
      description: Test Server
    - url: https://api-service.demo.certifyos.com
      description: Demo Server
    - url: https://api-service.certifyos.com
      description: Production Server
    put:
      summary: Update a credentialing workflow
      description: Updates an existing credentialing workflow
      operationId: updateCredentialingWorkflow
      tags:
      - CredentialingWorkflow
      parameters:
      - description: ID of the credentialing workflow to update
        in: path
        required: true
        name: id
        schema:
          type: string
      - description: Tenant ID
        required: true
        name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCredentialingWorkflowRequest'
        required: true
      responses:
        '200':
          description: Successfully updated the credentialing workflow.
          content:
            application/json:

# --- truncated at 32 KB (330 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/certifyos/refs/heads/main/openapi/certifyos-credentialingworkflow-api-openapi.yml