openapi: 3.2.0 info: title: Teliax Bulk Port API version: v1 contact: name: Ringer API Support url: https://ringer.tel email: api-support@ringer.tel description: 'Operations tagged Bulk Port across 2 of this provider''s published API definitions: teliax-tniq-openapi.json, teliax-tniq-openapi.yml. Each path carries the servers of the definition it was published in.' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging tags: - name: Bulk Port description: Bulk port project management paths: /v1/port-projects/projects/{projectId}: get: tags: - Bulk Port summary: Get a specific bulk port project operationId: getProject_1 parameters: - name: projectId in: path required: true schema: type: string format: uuid responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PortProjectResponse' put: tags: - Bulk Port summary: Update a bulk port project operationId: updateProject parameters: - name: projectId in: path required: true schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/PortProjectUpdateRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PortProjectResponse' delete: tags: - Bulk Port summary: Delete a bulk port project operationId: deleteProject parameters: - name: projectId in: path required: true schema: type: string format: uuid responses: '200': description: OK servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/details/{tn}: put: tags: - Bulk Port summary: Update a specific TN detail in the project operationId: updateProjectDetail parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: tn in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/PortProjectUpdateRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PortProjectDetailResponse' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/auto-activation: get: tags: - Bulk Port summary: Get auto-activation settings for a project operationId: getAutoActivationSettings parameters: - name: projectId in: path required: true schema: type: string format: uuid responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/AutoActivationSettingsResponse' put: tags: - Bulk Port summary: Update auto-activation settings for a project operationId: updateAutoActivationSettings parameters: - name: projectId in: path required: true schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/AutoActivationSettingsRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PortProjectResponse' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/workflow-rules: get: tags: - Bulk Port summary: Get workflow rules for customer operationId: getWorkflowRules parameters: - name: customerId in: query required: false schema: type: string format: uuid - name: activeOnly in: query required: false schema: type: boolean responses: '200': description: OK content: '*/*': schema: type: array items: type: object additionalProperties: type: object post: tags: - Bulk Port summary: Create workflow automation rule operationId: createWorkflowRule requestBody: content: application/json: schema: type: object additionalProperties: type: object required: true responses: '200': description: OK content: '*/*': schema: type: object additionalProperties: type: object servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects: get: tags: - Bulk Port summary: Get all bulk port projects for the authenticated customer operationId: getProjects parameters: - name: spid in: query required: false schema: type: string - name: customerId in: query required: false schema: type: string - name: pageable in: query required: true schema: $ref: '#/components/schemas/Pageable' responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PagePortProjectResponse' post: tags: - Bulk Port summary: Create a new bulk port project operationId: createProject_1 requestBody: content: application/json: schema: $ref: '#/components/schemas/PortProjectCreateRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PortProjectResponse' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/validate: post: tags: - Bulk Port summary: Trigger validation for all pre-submission TNs in the project description: Returns 202 when jobs are queued. Returns 409 VALIDATION_IN_PROGRESS when a fresh validation is already running. Stale stuck progress rows do not block a new run. operationId: validateProject parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: customerId in: query required: false schema: type: string responses: '200': description: OK content: '*/*': schema: type: object additionalProperties: type: string servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/upload: post: tags: - Bulk Port summary: Upload CSV or Excel file with TNs to port operationId: uploadFile parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: autoAssignLrn in: query description: Auto-assign first LRN when multiple are available required: false schema: type: boolean default: false requestBody: content: multipart/form-data: schema: required: - file type: object properties: file: type: string description: CSV or Excel file containing TNs format: binary responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PortProjectUploadResponse' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/tns: post: tags: - Bulk Port summary: Add TNs to a project via JSON description: Adds a JSON array of TNs (with optional LRNs) to a project. Processed through the same validation pipeline as the file /upload endpoint. operationId: addTns parameters: - name: projectId in: path required: true schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/AddTnsRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PortProjectUploadResponse' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/sync: post: tags: - Bulk Port summary: Sync project port states with NPAC reality (async reconciliation) operationId: syncProjectWithNpac parameters: - name: projectId in: path required: true schema: type: string format: uuid responses: '200': description: OK content: '*/*': schema: type: object additionalProperties: type: object servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/submit: post: tags: - Bulk Port summary: Submit all valid TNs in the project to SOA operationId: submitProject parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: dueDate in: query required: false schema: type: string responses: '200': description: OK content: '*/*': schema: type: object additionalProperties: type: string servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/sms-impact-check: post: tags: - Bulk Port summary: Queue an NNID/SMS impact check for this project's TNs description: Dips nnSR for every TN in the project and reports which carry third-party SMS association that porting would break. Capped at 1,000 TNs; the report is emailed and the affected TNs are advisory-stamped with an nnid_warning. operationId: runSmsImpactCheck parameters: - name: projectId in: path required: true schema: type: string format: uuid responses: '200': description: OK content: '*/*': schema: type: object additionalProperties: type: object servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/resubmit-failed: post: tags: - Bulk Port summary: Correct & Resubmit — re-drive all FAILED TNs on a rejected project operationId: resubmitAllFailed parameters: - name: projectId in: path required: true schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/ResubmitFailedRequest' responses: '200': description: OK content: '*/*': schema: type: object servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/repair-lrn-data: post: tags: - Bulk Port summary: Dry-run or apply canonical LRN/LATA repair without changing port lifecycle operationId: repairLrnData parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: dryRun in: query required: false schema: type: boolean default: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ProjectLrnRepairResult' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/progress/detailed: post: tags: - Bulk Port summary: Get detailed progress with events and error grouping operationId: getDetailedProgress parameters: - name: projectId in: path required: true schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/PortProjectProgressRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PortProjectProgressResponse' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/priority: post: tags: - Bulk Port summary: Set project priority operationId: setProjectPriority parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: priority in: query required: true schema: type: string responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PortProjectResponse' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/details/{tn}/fix-ddd-mismatch: post: tags: - Bulk Port summary: Fix DDD mismatch error by applying corrected due date operationId: fixDddMismatch parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: tn in: path required: true schema: type: string - name: correctedDdd in: query required: true schema: type: string responses: '200': description: OK content: '*/*': schema: type: object additionalProperties: type: object servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/cancel: post: tags: - Bulk Port summary: Cancel entire project - cancels all TNs and sets project to CANCELLED operationId: cancelProject parameters: - name: projectId in: path required: true schema: type: string format: uuid responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/CancelProjectResult' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/auto-fix: post: tags: - Bulk Port summary: Apply auto-fix to TNs with resolvable errors operationId: applyAutoFix parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: errorGroupId in: query required: false schema: type: string requestBody: content: application/json: schema: type: array items: type: string responses: '200': description: OK content: '*/*': schema: type: object additionalProperties: type: object servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/amendments: post: tags: - Bulk Port summary: Amend editable fields across selected (or all) TNs in a port project operationId: amendProjectTns parameters: - name: projectId in: path required: true schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/ProjectAmendmentRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/AmendmentResult' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/actions: post: tags: - Bulk Port summary: Perform bulk actions on selected TNs operationId: performBulkAction parameters: - name: projectId in: path required: true schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/PortProjectActionRequest' required: true responses: '200': description: OK content: '*/*': schema: type: object servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/port-window-check: post: tags: - Bulk Port summary: Port window preflight — check a desired due date against per-carrier minimum… operationId: portWindowCheck requestBody: content: application/json: schema: $ref: '#/components/schemas/PortWindowCheckRequest' required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PortWindowCheckResult' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/filter-presets: get: tags: - Bulk Port summary: Get saved filter presets operationId: getFilterPresets responses: '200': description: OK content: '*/*': schema: type: array items: type: object additionalProperties: type: object post: tags: - Bulk Port summary: Save filter preset operationId: saveFilterPreset requestBody: content: application/json: schema: type: object additionalProperties: type: object required: true responses: '200': description: OK content: '*/*': schema: type: object additionalProperties: type: object servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/statistics: get: tags: - Bulk Port summary: Get project statistics summary (fast aggregation) description: 'Returns project statistics using database aggregation for optimal performance. Replaces the need to fetch 10,000 records for basic statistics. Typical response time: <100ms for projects with 1,000+ TNs.' operationId: getProjectStatistics parameters: - name: projectId in: path required: true schema: type: string format: uuid responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ProjectStatisticsResponse' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/progress: get: tags: - Bulk Port summary: Get project validation progress for polling operationId: getProjectProgress parameters: - name: projectId in: path required: true schema: type: string format: uuid responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PortProjectProgressResponse' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/progress/stream: get: tags: - Bulk Port summary: Stream batch validation progress via SSE (for large uploads) operationId: streamBatchProgress parameters: - name: projectId in: path required: true schema: type: string format: uuid responses: '200': description: OK content: text/event-stream: schema: $ref: '#/components/schemas/SseEmitter' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/progress-old: get: tags: - Bulk Port summary: Get validation progress for a bulk port project - OLD operationId: getProjectProgressOld parameters: - name: projectId in: path required: true schema: type: string format: uuid responses: '200': description: OK content: '*/*': schema: type: object additionalProperties: type: object deprecated: true servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/lifecycle-summary: get: tags: - Bulk Port summary: Get port lifecycle state summary for project operationId: getLifecycleSummary parameters: - name: projectId in: path required: true schema: type: string format: uuid responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PortLifecycleSummaryResponse' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/error-groups: get: tags: - Bulk Port summary: Get error groups for batch resolution operationId: getErrorGroups parameters: - name: projectId in: path required: true schema: type: string format: uuid responses: '200': description: OK content: '*/*': schema: type: object additionalProperties: type: object servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/details: get: tags: - Bulk Port summary: Get project details (TNs) with pagination and filtering operationId: getProjectDetails_1 parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: search in: query required: false schema: type: string - name: validationStatus in: query required: false schema: type: string enum: - PENDING - VALIDATING - VALID - ERROR - name: lifecycleStates in: query required: false schema: type: array items: type: string enum: - DRAFT - VALIDATING - VALIDATION_ERROR - READY_FOR_SUBMISSION - LSR_PENDING - LSR_SUBMITTED - CSR_PENDING - CSR_APPROVED - CSR_MISMATCH - SUPPLEMENT_REQUESTED - PENDING_FOC - FOC_RECEIVED - PORT_CONFLICT - PORT_EXCEPTION - AWAITING_DUE_DATE - READY_FOR_ACTIVATION - ACTIVATING - ACTIVATED - INTRASP_PENDING - INTRASP_TIMEOUT - INTRASP_COMPLETED - PORT_OUT_REQUESTED - PORT_OUT_CSR_ISSUED - PORT_OUT_PENDING - PORTED_OUT - CANCELLED - FAILED - LRN_CREATED - DISCONNECTED - name: pageable in: query required: true schema: $ref: '#/components/schemas/Pageable' responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/PagePortProjectDetailResponse' servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging /v1/port-projects/projects/{projectId}/batch-operations: get: tags: - Bulk Port summary: Get batch operation history operationId: getBatchOperations parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: status in: query required: false schema: type: string responses: '200': description: OK content: '*/*': schema: type: array items: type: object additionalProperties: type: object servers: - url: https://api.tniq.ringer.tel description: Production - url: https://tniq-api.ringer.tel description: Production (legacy alias) - url: https://staging-api.ringer.tel description: Staging components: schemas: TnEntry: required: - tn type: object properties: tn: pattern: ^[0-9]{10}$ type: string lrn: pattern: ^[0-9]{10}$ type: string CarrierReleaseRecoveryProjection: type: object properties: state: type: string enum: - NONE - QUEUED - SUBMITTING - AWAITING_CARRIER - AWAITING_NPAC_RELEASE - READY_TO_RESUBMIT - FAILED - OUTCOME_UNKNOWN - VERIFICATION_REQUIRED requested_due_date: type: string format: date carrier_display_name: type: string carrier_order_id: type: string carrier_foc_date: type: string format: date npac_release_due_date: type: string format: date can_request: type: boolean can_resubmit: type: boolean blocker_code: type: string message: type: string PortLifecycleSummaryResponse: type: object properties: project_id: type: string total_tns: type: integer format: int32 ready_for_activation_count: type: integer format: int32 awaiting_due_date_count: type: integer format: int32 pending_foc_count: type: integer format: int32 foc_received_count: type: integer format: int32 activated_count: type: integer format: int32 activating_count: type: integer format: int32 validation_error_count: type: integer format: int32 failed_count: type: integer format: int32 requires_action_count: type: integer format: int32 state_counts: type: object additionalProperties: type: integer format: int32 earliest_due_date: type: string format: date next_activation_ready_date: type: string format: date all_ready_for_activation: type: boolean has_blockers: type: boolean blocker_summary: type: string SortObject: type: object properties: empty: type: boolean sorted: type: boolean unsorted: type: boolean NpacStateResponse: type: object properties: status: type: string role: type: string our_spid: type: string new_spid: type: string old_spid: type: string lrn: type: string new_sp_due_date: type: string format: date old_sp_due_date: type: string format: date old_sp_authorization: type: string conflict_placed_by: type: string conflict_at: type: string format: date-time raw_sv_state: type: string observed_at: type: string format: date-time source: type: string current_spid: type: string PortProjectProgressRequest: required: - project_id type: object properties: project_id: type: string description: The bulk port project ID format: uuid include_events: type: boolean description: Include recent progress events default: false event_limit: type: integer description: Maximum number of events to return format: int32 default: 10 include_statistics: type: boolean description: Include detailed statistics default: true description: Request for real-time bulk port progress tracking AddTnsRequest: required: - tns type: object properties: tns: type: array items: $ref: '#/components/schemas/TnEntry' auto_assign_lrn: type: boolean PortProjectDetailResponse: type: object properties: project_id: type: string format: uuid tn: type: string lata: type: string current_lata_source: type: string gaining_lata_source: type: string state: type: string locality: type: string npac_region: type: string current_ocn: type: string current_lrn: type: string current_spid: type: string current_tandem: type: string current_tandem_name: type: string gaining_ocn: type: string gaining_lrn: type: string gaining_spid: type: string gaining_tandem: type: string gaining_tandem_name: type: string user_provided_lrn: type: string btn: type: string soa_status: type: string lsr_status: type: string enum: - NONE - SENDING - SENT - EBOND - FAILED - SKIPPED - UNRECOGNIZED csr_status: type: string enum: - NONE - SENT - EBOND - MANUAL_APPROVAL lsr_submitted_at: type: string format: date-time foc_date: type: string format: date lifecycle_state: type: string lifecycle_state_display: type: string lifecycle_status_display: $ref: '#/components/schemas/LifecycleStatusDisplay' can_activate: type: boolean can_activate_early: type: boolean can_update_due_date: type: boolean activation_blocker: type: string reconciliation_source: type: string reconciliation_validation_status: type: string failure_reason: type: string validation_status: type: string enum: - PENDING - VALIDATING - VALID - ERROR validation_errors: type: object additionalProperties: type: object notes: type: object additionalProperties: type: object created_at: type: string format: date-time updated_at: type: string format: date-time is_pushed_release: type: boolean pushed_ddd: type: string format: date pushed_release_event_id: type: string format: uuid carrier_release_recovery: $ref: '#/components/schemas/CarrierReleaseRecoveryProjection' npac: $ref: '#/components/schemas/NpacStateResponse' LifecycleStatusDisplay: type: object properties: display_text: type: string color: type: string icon: type: string description: type: string next_action: type: string metadata: type: object additionalProperties: type: object CancelProjectResult: type: object properties: totalTns: type: integer format: int32 cancelledCount: type: integer format: int32 alreadyTerminalCount: type: integer format: int32 failedToCancelCount: type: integer format: int32 failedTns: type: array items: type: string message: type: string projectCancelled: type: boolean PortWindowCheckResult: type: object properties: valid: type: boolean earliestDate: type: string format: date carrierLabel: type: string requiredDays: type: integer format: int32 offendingTns: type: array items: type: string PortWindowCheckRequest: required: - desiredDueDate - tns type: object properties: tns: maxItems: 500 minItems: 0 type: array items: type: string desiredDueDate: type: string format: date ProjectLrnRepairResult: type: object properties: projectId: type: string format: uuid dryRun: type: boolean inspected: type: integer format: int32 changed: type: integer format: int32 validationStatusesRestored: type: integer format: int32 changes: type: array items: $ref: '#/components/schemas/Change' PortProjectUpdateRequest: type: object properties: name: type: string status: type: string gaining_lrn: pattern: ^[0-9]{10}$ type: string notes: type: object additionalProperties: type: object validation_errors: type: object additionalProperties: type: object pin: type: string accountNumber: type: string btn: pattern: ^[0-9]{10}$ type: string endUserName: type: string businessName: type: string serviceAddress: type: string streetNumber: type: string streetName: type: string streetType: type: string unit: type: string city: type: string serviceAddressState: type: string postalCode: type: string billing_name: type: string billing_street: type: string billing_floor: type: string billing_room_mail_stop: type: string billing_city: type: string billing_state: type: string billing_zip: type: string billing_account_number: type: string port_out_pin: type: string lsr_workflow_enabled: type: boolean lsr_gate_mode: type: string assignment: $ref: '#/components/schemas/ApplicationAssignmentIntentRequest' ProgressStatistics: type: object properties: total_tns: type: integer format: int32 processed_tns: type: integer format: int32 valid_tns: type: integer format: int32 error_tns: type: integer format: int32 pending_tns: type: integer format: int32 submitted_tns: type: integer format: int32 activated_tns: type: integer format: int32 cancelled_tns: type: integer format: int32 processing_rate: type: number description: TNs processed per minute format: double success_rate: type: number description: Percentage of successful validations format: double description: Detailed statistics PagePortProjectDetailResponse: type: object properties: totalElements: type: integer format: int64 totalPages: type: integer format: int32 size: type: integer format: int32 content: type: array items: $ref: '#/components/schemas/PortProjectDetailResponse' number: type: integer format: int32 sort: $ref: '#/components/schemas/SortObject' numberOfElements: type: integer format: int32 first: type: boolean pageable: $ref: '#/components/schemas/PageableObject' last: type: boolean empty: type: boolean AutoActivationSettingsRequest: required: - auto_activation_mode type: object properties: auto_activation_mode: pattern: ^(DISABLED|ASAP|SCHEDULED)$ type: string description: 'Auto-activation mode: DISABLED (manual), ASAP (immediate after DDD), SCHEDULED (specific datetime)' example: ASAP enum: - DISABLED - ASAP - SCHEDULED scheduled_activation_at: type: string description: ISO 8601 datetime for scheduled activation (UTC). Required when mode is SCHEDULED. Must be >= DDD. example: '2025-12-15T06:00:00.000Z' reset_failure_count: type: boolean description: Set to true to reset the auto-activation failure counter back to 0 example: false description: Request to update auto-activation settings for a port project ProjectStatisticsResponse: type: object properties: total: type: integer format: int64 valid: type: integer format: int64 error: type: integer format: int64 submitted: type: integer format: int64 activated: type: integer format: int64 cancelled: type: integer format: int64 ProgressEvent: type: object properties: id: type: string format: uuid event_type: type: string message: type: string severity: type: string event_data: type: object additionalProperties: type: object created_at: type: string format: date-time acknowledged: type: boolean description: Recent progress events PortProjectActionRequest: required: - tns type: object properties: tns: type: array items: type: string action: type: string enum: - ACTIVATE - CANCEL - SUP_DDD - DELETE - REVALIDATE - SUBMIT - RESUBMIT - REQUEST_RE_RELEASE new_ddd: pattern: ^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z|\d{4}-\d{2}-\d{2}|\d{1,3})$ type: string override_due_date: type: boolean lsr_data: $ref: '#/components/schemas/LsrData' ApplicationAssignmentIntentResponse: type: object properties: applicationId: type: string metadata: type: object additionalProperties: type: object orderReference: type: string frozen: type: boolean ResubmitFailedRequest: type: object properties: new_ddd: pattern: ^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z|\d{4}-\d{2}-\d{2}|\d{1,3})$ type: string AmendmentResult: type: object properties: perTn: type: object additionalProperties: type: string enum: - AMENDED - LOCKED_LSR - TERMINAL - NOT_FOUND amendedCount: type: integer format: int32 lockedLsrCount: type: integer format: int32 terminalCount: type: integer format: int32 notFoundCount: type: integer format: int32 PortProjectUploadResponse: type: object properties: projectId: type: string format: uuid totalTns: type: integer format: int32 status: type: string message: type: string duplicatesRemoved: type: integer format: int32 lrnsFiltered: type: integer format: int32 PageableObject: type: object properties: offset: type: integer format: int64 sort: $ref: '#/components/schemas/SortObject' pageSize: type: integer format: int32 pageNumber: type: integer format: int32 paged: type: boolean unpaged: type: boolean ErrorGroup: type: object properties: error_code: type: string error_message: type: string count: type: integer format: int32 sample_tns: type: array description: Sample of affected TNs (max 5) items: type: string description: Sample of affected TNs (max 5) auto_fix_available: type: boolean suggested_action: type: string description: Summary of errors grouped by type LsrData: type: object properties: end_user_name: type: string business_name: type: string service_address: type: string street_number: type: string street_name: type: string street_type: type: string unit: type: string city: type: string service_address_state: type: string postal_code: type: string account_number: type: string btn: type: string pin: type: string Fields: type: object properties: pin: type: string accountNumber: type: string btn: pattern: ^[0-9]{10}$ type: string endUserName: type: string businessName: type: string serviceAddress: type: string streetNumber: type: string streetName: type: string streetType: type: string unit: type: string city: type: string serviceAddressState: type: string postalCode: type: string notes: type: object additionalProperties: type: object Pageable: type: object properties: page: minimum: 0 type: integer format: int32 size: minimum: 1 type: integer format: int32 sort: type: array items: type: string Change: type: object properties: tn: type: string lifecycleState: type: string validationStatusBefore: type: string validationStatusAfter: type: string currentLrn: type: string gainingLrn: type: string oldLata: type: string newLata: type: string currentLataSource: type: string gainingLataSource: type: string fields: type: array items: type: string AutoActivationSettingsResponse: type: object properties: project_id: type: string description: The project ID format: uuid project_name: type: string description: The project name auto_activation_mode: type: string description: 'Auto-activation mode: DISABLED (manual), ASAP (immediate after DDD), SCHEDULED (specific datetime)' example: ASAP enum: - DISABLED - ASAP - SCHEDULED scheduled_activation_at: type: string description: ISO 8601 datetime for scheduled activation (UTC). Only present when mode is SCHEDULED. format: date-time example: '2025-12-15T06:00:00Z' last_auto_activation_attempt: type: string description: Timestamp of last auto-activation attempt format: date-time auto_activation_failure_count: type: integer description: Number of consecutive failed auto-activation attempts format: int32 max_retry_attempts: type: integer description: Maximum allowed retry attempts before auto-activation stops format: int32 retry_cooldown_minutes: type: integer description: Cooldown period in minutes between retry attempts format: int32 can_auto_activate: type: boolean description: Whether auto-activation can run (not at max retries) description: Auto-activation settings for a port project SseEmitter: type: object properties: timeout: type: integer format: int64 BatchOperationStatus: type: object properties: operation_id: type: string format: uuid operation_type: type: string status: type: string total_items: type: integer format: int32 processed_items: type: integer format: int32 successful_items: type: integer format: int32 failed_items: type: integer format: int32 started_at: type: string format: date-time completed_at: type: string format: date-time description: Active batch operations PagePortProjectResponse: type: object properties: totalElements: type: integer format: int64 totalPages: type: integer format: int32 size: type: integer format: int32 content: type: array items: $ref: '#/components/schemas/PortProjectResponse' number: type: integer format: int32 sort: $ref: '#/components/schemas/SortObject' numberOfElements: type: integer format: int32 first: type: boolean pageable: $ref: '#/components/schemas/PageableObject' last: type: boolean empty: type: boolean ProjectAmendmentRequest: type: object properties: tns: type: array items: type: string fields: $ref: '#/components/schemas/Fields' PortProjectCreateRequest: required: - customer_id - name - spid type: object properties: customer_id: type: string format: uuid spid: pattern: ^[0-9A-Z]{4}$ type: string name: maxLength: 255 minLength: 1 type: string desired_due_date: type: string format: date auto_activation_mode: pattern: ^(DISABLED|ASAP|SCHEDULED)$ type: string scheduled_activation_at: type: string billing_name: type: string billing_street: type: string billing_floor: type: string billing_room_mail_stop: type: string billing_city: type: string billing_state: type: string billing_zip: type: string billing_account_number: type: string port_out_pin: type: string assignment: $ref: '#/components/schemas/ApplicationAssignmentIntentRequest' ApplicationAssignmentIntentRequest: required: - applicationId type: object properties: applicationId: maxLength: 255 minLength: 0 type: string metadata: type: object additionalProperties: type: object orderReference: maxLength: 100 minLength: 0 type: string PortProjectResponse: type: object properties: id: type: string format: uuid name: type: string customer_id: type: string format: uuid customer_name: type: string spid: type: string status: type: string total_tns: type: integer format: int32 valid_tns: type: integer format: int32 error_tns: type: integer format: int32 attention_tns: type: integer format: int32 attention_breakdown: type: object additionalProperties: type: integer format: int32 validated_tns: type: integer format: int32 submitted_tns: type: integer format: int32 activated_tns: type: integer format: int32 cancelled_tns: type: integer format: int32 completed_tns: type: integer format: int32 progressPercentage: type: integer format: int32 currentStage: type: string stageMessage: type: string created_by: type: string created_by_name: type: string created_at: type: string format: date-time updated_at: type: string format: date-time derived_status: type: string derived_status_display: type: string derived_status_description: type: string can_submit: type: boolean can_activate: type: boolean can_cancel: type: boolean can_update_due_date: type: boolean submit_blocker_reason: type: string activate_blocker_reason: type: string is_pushed_release: type: boolean auto_activation_mode: type: string scheduled_activation_at: type: string format: date-time last_auto_activation_attempt: type: string format: date-time auto_activation_failure_count: type: integer format: int32 lsr_workflow_enabled: type: boolean lsr_gate_mode: type: string desired_due_date: type: string format: date foc_date: type: string format: date billing_name: type: string billing_street: type: string billing_floor: type: string billing_room_mail_stop: type: string billing_city: type: string billing_state: type: string billing_zip: type: string billing_account_number: type: string port_out_pin_set: type: boolean assignment: $ref: '#/components/schemas/ApplicationAssignmentIntentResponse' PortProjectProgressResponse: type: object properties: project_id: type: string description: The bulk port project ID format: uuid project_name: type: string description: The project name current_stage: type: string description: Current processing stage example: VALIDATING progress_percentage: type: integer description: Overall progress percentage (0-100) format: int32 stage_message: type: string description: Human-readable message about current stage statistics: $ref: '#/components/schemas/ProgressStatistics' estimated_completion_time: type: string description: Estimated completion time based on current progress format: date-time recent_events: type: array description: Recent progress events items: $ref: '#/components/schemas/ProgressEvent' error_summary: type: object additionalProperties: $ref: '#/components/schemas/ErrorGroup' description: Summary of errors grouped by type batch_operations: type: array description: Active batch operations items: $ref: '#/components/schemas/BatchOperationStatus' description: Real-time bulk port progress information securitySchemes: bearerAuth: type: http description: 'Bearer token authentication. Pass your API token or user JWT in the Authorization header: Authorization: Bearer YOUR_TOKEN' scheme: bearer bearerFormat: JWT x-refined-from: - teliax-tniq-openapi.json - teliax-tniq-openapi.yml