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

# Sign part URLs

> For a `multipart` upload only: returns one signed URL for each part you name, up to 100 per call. Each URL is signed for that part's exact length (`partSize`, or the remainder for the last part) and lives for a few minutes, so request them shortly before you send the parts.



## OpenAPI

````yaml post /platform/files/uploads/{uploadId}/parts
openapi: 3.0.3
info:
  title: ROOTKey Documentation
  description: >-
    Your API of choice for creating, managing, and validating information easily
    and securely!
  termsOfService: https://www.rootkey.ai/legal/privacy-policy
  contact:
    name: ROOTKey
    url: https://www.rootkey.ai/contact
    email: support@rootkey.ai
  version: 1.0.0
servers:
  - description: Production
    url: https://api.rootkey.ai/api-v1/
security:
  - x-api-key: []
tags:
  - name: api-v1-public
    description: Unauthenticated top-level /api-v1 endpoints (health, plans, annual report)
  - name: api-v1-files
    description: >-
      File anchoring, versioning, validation and compliance reporting
      (/api-v1/platform/files)
  - name: api-v1-records
    description: Structured-data record anchoring (/api-v1/platform/records)
  - name: api-v1-vaults
    description: 'Vault lifecycle: create / update / delete (/api-v1/platform/vaults)'
  - name: api-v1-recovery-points
    description: >-
      Backup archives created from vault contents
      (/api-v1/platform/recovery-point)
paths:
  /platform/files/uploads/{uploadId}/parts:
    post:
      tags:
        - api-v1-files
      summary: Sign part URLs
      description: >-
        For a `multipart` upload only: returns one signed URL for each part you
        name, up to 100 per call. Each URL is signed for that part's exact
        length (`partSize`, or the remainder for the last part) and lives for a
        few minutes, so request them shortly before you send the parts.
      parameters:
        - name: uploadId
          in: path
          required: true
          description: >-
            The `uploadId` returned by [Start an
            upload](/api-reference/platform/endpoint/files/start-file-upload).
          schema:
            type: string
            pattern: ^upl_[0-9a-f]{32}$
            example: upl_3f2b8c1e5a7d4e9b9c2a1d6e8f0a4b7c
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - parts
              properties:
                parts:
                  type: array
                  minItems: 1
                  maxItems: 100
                  items:
                    type: object
                    required:
                      - partNumber
                    properties:
                      partNumber:
                        type: integer
                        minimum: 1
                        maximum: 10000
                        description: From 1 to the `partCount` of the upload.
                      sha256:
                        type: string
                        pattern: ^[0-9a-fA-F]{64}$
                        description: >-
                          The SHA-256 of this part alone, as 64 hexadecimal
                          characters. Always sending it is safe: it is required
                          where the storage checks each part as it arrives
                          (`file_upload_part_checksum_required` otherwise), and
                          ignored where it cannot.
      responses:
        '200':
          description: One signed request per part.
          content:
            application/json:
              schema:
                type: object
                properties:
                  parts:
                    type: array
                    items:
                      allOf:
                        - $ref: '#/components/schemas/PresignedRequest'
                        - type: object
                          properties:
                            partNumber:
                              type: integer
        '400':
          description: >-
            `file_upload_not_multipart`, `file_upload_part_out_of_range`,
            `file_upload_part_checksum_required`, or a malformed body.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainErrorResponse'
        '401':
          description: Unauthenticated
        '404':
          description: '`file_upload_not_found`'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainErrorResponse'
        '409':
          description: '`file_upload_not_open`: the upload is no longer open.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainErrorResponse'
        '410':
          description: '`file_upload_expired`: the upload expired. Start a new one.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DomainErrorResponse'
        '500':
          $ref: '#/components/responses/InternalError'
      security:
        - x-api-key: []
components:
  schemas:
    PresignedRequest:
      type: object
      properties:
        method:
          type: string
          enum:
            - PUT
        url:
          type: string
          format: uri
          description: Send the bytes to this URL.
        headers:
          type: object
          additionalProperties:
            type: string
          description: >-
            Send exactly these headers. They are part of the signature, so a
            different value is refused by the storage. The object can be empty.
            Your HTTP client sets `Content-Length` itself.
        expiresAt:
          type: string
          format: date-time
          description: The request must start before this time.
    DomainErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            requestId:
              type: string
            message:
              type: string
            errorCode:
              type: string
            docUrl:
              type: string
            timestamp:
              type: string
              format: date-time
  responses:
    InternalError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/DomainErrorResponse'
  securitySchemes:
    x-api-key:
      type: apiKey
      name: x-api-key
      in: header
      description: >-
        ROOTKey API key (rk_live_... for production, rk_test_... for the test
        network).

````

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