> ## Documentation Index
> Fetch the complete documentation index at: https://docs.go.aiinsurance.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Refresh File Migration Upload

> Recover a migration upload whose resumable upload URL expired or was lost, instead of calling Prepare File Migration (`prepareCompanyFileMigration`) again. Use the version id it returns for the retried upload and for Finalize File Migration (`finalizeCompanyFileMigration`).

Recovers an expired or lost resumable upload session for the active source revision. Supply the previous capability as a compare-and-swap token; stale concurrent refresh calls reuse the replacement session. When matching completed bytes already exist, verifies their size, MIME and checksums and finalizes the known version instead of retransferring. If the stored pending bytes fail size, MIME or checksum validation, replaces that unverified attempt with a new version, storage key and session under the same logical file. Persist the returned version ID before retrying; the previous attempt cannot finalize. An existing valid current version remains usable until the replacement verifies. Keep upload capabilities out of logs and diagnostics.

Available only while the destination company is in Sandbox mode. Forms are outside this contract.

**Required permission:** `file.upload`

Also requires `file.view` and `file.edit`.




## OpenAPI

````yaml /openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/files/migrations/refresh
openapi: 3.0.3
info:
  title: AI Insurance External API
  description: External API for AI Insurance platform
  version: 1.0.0
  contact:
    email: support@aiinsurance.io
servers:
  - url: https://go.aiinsurance.io
    description: Production
security:
  - ApiKeyAuth: []
paths:
  /api/v1/companies/{companyId}/files/migrations/refresh:
    post:
      tags:
        - Company Files
      summary: Refresh File Migration Upload
      description: >
        Recover a migration upload whose resumable upload URL expired or was
        lost, instead of calling Prepare File Migration
        (`prepareCompanyFileMigration`) again. Use the version id it returns for
        the retried upload and for Finalize File Migration
        (`finalizeCompanyFileMigration`).


        Recovers an expired or lost resumable upload session for the active
        source revision. Supply the previous capability as a compare-and-swap
        token; stale concurrent refresh calls reuse the replacement session.
        When matching completed bytes already exist, verifies their size, MIME
        and checksums and finalizes the known version instead of retransferring.
        If the stored pending bytes fail size, MIME or checksum validation,
        replaces that unverified attempt with a new version, storage key and
        session under the same logical file. Persist the returned version ID
        before retrying; the previous attempt cannot finalize. An existing valid
        current version remains usable until the replacement verifies. Keep
        upload capabilities out of logs and diagnostics.


        Available only while the destination company is in Sandbox mode. Forms
        are outside this contract.


        **Required permission:** `file.upload`


        Also requires `file.view` and `file.edit`.
      operationId: refreshCompanyFileMigration
      parameters:
        - $ref: '#/components/parameters/companyId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
                - source
                - revision
                - previousUploadUrl
              properties:
                source:
                  $ref: '#/components/schemas/CompanyFileMigrationSource'
                revision:
                  $ref: '#/components/schemas/CompanyFileMigrationRevision'
                previousUploadUrl:
                  type: string
                  minLength: 1
                  maxLength: 16384
                  description: The exact last uploadUrl returned for this revision.
            examples:
              request:
                summary: Refresh File Migration Upload
                value:
                  source:
                    environment: https://legacy.example.com
                    companyId: legacy-company-42
                    fileId: legacy-file-17
                  revision:
                    bucket: legacy-company-files
                    object: documents/loss-run.pdf
                    generation: '1720000000000000'
                    byteSize: 102400
                    contentType: application/pdf
                    md5Hash: 1B2M2Y8AsgTpgAmY7PhCfg==
                  previousUploadUrl: >-
                    https://storage.googleapis.com/upload/storage/v1/b/files/o?uploadType=resumable&upload_id=REDACTED
      responses:
        '200':
          description: Durable migration state
          headers:
            Cache-Control:
              schema:
                type: string
              description: Always no-store because state can include upload capabilities.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyFileMigrationState'
              examples:
                success:
                  summary: Refresh File Migration Upload
                  value:
                    sourceId: 550e8400-e29b-41d4-a716-446655440019
                    fileId: 550e8400-e29b-41d4-a716-446655440020
                    currentVersionId: null
                    revision:
                      versionId: 550e8400-e29b-41d4-a716-446655440021
                      storageKey: >-
                        companies/example/files/550e8400-e29b-41d4-a716-446655440020/550e8400-e29b-41d4-a716-446655440021
                      state: pending
                      uploadUrl: >-
                        https://storage.googleapis.com/upload/storage/v1/b/files/o?uploadType=resumable&upload_id=REDACTED
                      byteSize: 102400
                      contentType: application/pdf
                    metadata:
                      displayName: Loss run.pdf
                      displayDate: '2020-01-02T03:04:05.000Z'
                      displayAuthor: Legacy adjuster
                    conflicts: []
        '400':
          description: Invalid migration declaration
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                failure:
                  summary: Invalid migration declaration
                  value:
                    error:
                      code: BadRequest
                      message: Invalid migration declaration
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Source mapping not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                failure:
                  summary: Source mapping not found
                  value:
                    error:
                      code: NotFound
                      message: Migration source was not found
        '409':
          description: Migration requires reconciliation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                failure:
                  summary: Migration requires reconciliation
                  value:
                    error:
                      code: FileMigrationConflict
                      message: destination_version_changed
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - BearerAuth: []
        - ApiKeyAuth: []
components:
  parameters:
    companyId:
      name: companyId
      in: path
      required: true
      schema:
        type: string
        format: uuid
      description: Company identifier
  schemas:
    CompanyFileMigrationSource:
      type: object
      additionalProperties: false
      required:
        - environment
        - companyId
        - fileId
      properties:
        environment:
          type: string
          minLength: 1
          maxLength: 512
          description: >-
            Stable legacy environment identity, at most 512 UTF-8 bytes. Keep it
            unchanged across runs and credential rotations.
        companyId:
          type: string
          minLength: 1
          maxLength: 255
          description: Stable source identifier, at most 255 UTF-8 bytes.
        fileId:
          type: string
          minLength: 1
          maxLength: 255
          description: Stable source identifier, at most 255 UTF-8 bytes.
    CompanyFileMigrationRevision:
      description: >-
        Exact source object declaration. At least one base64 checksum from
        source object metadata is required. Every available common checksum must
        match destination storage before finalization.
      allOf:
        - type: object
          additionalProperties: false
          required:
            - bucket
            - object
            - generation
            - byteSize
            - contentType
          properties:
            bucket:
              type: string
              minLength: 1
              maxLength: 255
            object:
              type: string
              minLength: 1
              maxLength: 2048
            generation:
              type: string
              pattern: ^\d+$
              maxLength: 40
              description: >-
                Exact GCS source generation; pin every source read to this
                generation.
            byteSize:
              type: integer
              minimum: 1
              maximum: 2147483648
            contentType:
              type: string
              minLength: 1
              maxLength: 255
              description: Supported MIME type; normalized to lowercase.
            md5Hash:
              type: string
              pattern: ^[A-Za-z0-9+/]{22}==$
            crc32c:
              type: string
              pattern: ^[A-Za-z0-9+/]{6}==$
        - anyOf:
            - type: object
              required:
                - md5Hash
              properties:
                md5Hash:
                  type: string
                  pattern: ^[A-Za-z0-9+/]{22}==$
            - type: object
              required:
                - crc32c
              properties:
                crc32c:
                  type: string
                  pattern: ^[A-Za-z0-9+/]{6}==$
    CompanyFileMigrationState:
      type: object
      additionalProperties: false
      required:
        - sourceId
        - fileId
        - currentVersionId
        - revision
        - metadata
        - conflicts
      properties:
        sourceId:
          type: string
          format: uuid
        fileId:
          type: string
          format: uuid
        currentVersionId:
          type: string
          format: uuid
          nullable: true
        revision:
          type: object
          additionalProperties: false
          required:
            - versionId
            - storageKey
            - state
            - uploadUrl
            - byteSize
            - contentType
          properties:
            versionId:
              type: string
              format: uuid
            storageKey:
              type: string
            state:
              type: string
              enum:
                - pending
                - ready
                - quarantined
                - infected
            uploadUrl:
              type: string
              nullable: true
              description: >-
                Bearer resumable-upload capability. Present only for an active
                pending revision without conflicts; never log or expose it in
                diagnostics.
            byteSize:
              type: integer
              minimum: 1
              maximum: 2147483648
            contentType:
              type: string
          nullable: true
          description: >-
            Requested revision, or the active revision when none is supplied;
            null if absent or its version was reclaimed.
        metadata:
          $ref: '#/components/schemas/CompanyFileMigrationDisplayMetadata'
        conflicts:
          type: array
          items:
            type: string
          description: >-
            Stable diagnostic codes, including deleted targets, operator version
            changes, superseded source revisions, reclaimed versions and
            infected results.
    ErrorResponse:
      type: object
      description: Standard error response for all external API endpoints
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: Machine-readable error code
              example: VALIDATION_ERROR
            message:
              type: string
              description: Human-readable error message
              example: 'submissionId: Required field is missing'
            userMessages:
              type: array
              description: >-
                Clean, verbatim-displayable messages — one entry per failure,
                free of error-code tags, field paths, and internal noise.
                Suitable for showing to end users as-is.
              items:
                type: string
              example:
                - Exposures of type 'company' require an address
            details:
              type: array
              description: Additional details for validation errors (field-level errors)
              items:
                type: object
                properties:
                  field:
                    type: string
                    description: The field that caused the error
                    example: submissionId
                  code:
                    type: string
                    description: Stable problem code for this individual validation failure
                    example: BLANK_LIST_ELEMENT
                  reason:
                    type: string
                    description: Stable reason the value violates its canonical contract
                    example: blank-list-element
                  expected:
                    type: string
                    description: The expected canonical value contract
                    example: nonblank trimmed string
                  message:
                    type: string
                    description: Description of the field error
                    example: Required field is missing
    CompanyFileMigrationDisplayMetadata:
      type: object
      additionalProperties: false
      required:
        - displayName
        - displayDate
        - displayAuthor
      properties:
        displayName:
          type: string
          minLength: 1
          maxLength: 1024
          description: Source display name; independent of the storage upload filename.
        displayDate:
          type: string
          format: date-time
          nullable: true
          description: >-
            Source attribution date. Stored at whole-second precision; null
            clears it.
        displayAuthor:
          type: string
          minLength: 1
          maxLength: 255
          nullable: true
          description: >-
            Source attribution label, trimmed. Audit actors remain the
            authenticated importer.
  responses:
    Unauthorized:
      description: Unauthorized - Invalid or missing API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            missingApiKey:
              summary: Missing API key
              value:
                error:
                  code: AuthenticationError
                  message: API key authentication required
                  userMessages:
                    - API key authentication required
            invalidApiKey:
              summary: >-
                Invalid API key (e.g. unknown key, or a Bearer token used
                instead of an API key)
              value:
                error:
                  code: AuthenticationError
                  message: Invalid API key
                  userMessages:
                    - Invalid API key
    Forbidden:
      description: Forbidden - Insufficient permissions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            insufficientPermissions:
              summary: Insufficient permissions
              value:
                error:
                  code: AuthorizationError
                  message: User is not authorized to perform the requested action
                  userMessages:
                    - User is not authorized to perform the requested action
            companyMismatch:
              summary: A valid API key naming another company in the URL
              value:
                error:
                  code: AuthorizationError
                  message: API key is not scoped to the requested company
                  userMessages:
                    - API key is not scoped to the requested company
    InternalServerError:
      description: Internal Server Error - Unexpected error occurred
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            internalError:
              summary: Unexpected server error
              value:
                error:
                  code: UncaughtActionError
                  message: Uncaught error occurred in <actionName>
                  userMessages:
                    - An unexpected error occurred. Please try again later.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        API key authentication. Send your raw API key as the `Authorization`
        header value with NO scheme prefix — `Authorization: YOUR-API-KEY`. Do
        NOT prefix it with `Bearer ` or `ApiKey `, and do not use an `X-API-Key`
        header; those are not accepted.
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        User-principal OAuth 2.0 Bearer authentication. Send a user-scoped Auth0
        access token (audience = the app API audience) as `Authorization: Bearer
        <jwt>`. The request resolves to the user's identity and is authorized by
        their Role on the `{companyId}` in the path — the same role-based
        permissions the web app enforces. This is the path the MCP connector
        uses to act on a user's behalf; endpoints that accept it list both
        `BearerAuth` and `ApiKeyAuth`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.