---
title: "Verify the enrollment's original-book uploads"
method: POST
path: "/client-onboarding/public/enrollments/{token}/book-setup/uploads/complete"
tags: ["Client Onboarding"]
---

# Verify the enrollment's original-book uploads

`POST /client-onboarding/public/enrollments/{token}/book-setup/uploads/complete`

## Request

- Base URL: `https://ledgerhq.pro/api/v1`
- URL: `https://ledgerhq.pro/api/v1/client-onboarding/public/enrollments/{token}/book-setup/uploads/complete`
- Auth: none required

Verifies the exact current upload batch through the existing assisted-import file service and marks its files ready. It does not create or submit an assisted-import request. This prospect file action is intentionally excluded from MCP.

## Path parameters

- `token` string, required

## Request body

- CompletePublicClientOnboardingUploads
  - `uploadBatchId` string, uuid, required

## Response `200`

Verified upload batch and current book-setup projection

- PublicClientOnboardingBookSetupResponse
  - `bookSetup` PublicClientOnboardingBookSetup, required
    - `enrollmentId` string, uuid, required
    - `companyOrganizationId` string, uuid, required
    - `firm` PublicClientOnboardingFrozenFirm, required
      - `name` string, required
      - `email` string, email, required
      - `phone` string, nullable, required
      - `website` string, nullable, required
      - `branding` object, required
        - `logoUrl` string, uri, nullable, required
        - `primaryColor` string, required
        - `accentColor` string, required
      - `onboardingContact` object, required
        - `name` string, nullable, required
        - `title` string, nullable, required
        - `email` string, email, required
        - `phone` string, nullable, required
    - `phase` 'business_questions' | 'book_source' | 'bank_connection' | 'file_upload' | 'ready_for_review' | 'submitted', required
    - `questions` ClientOnboardingPublicQuestionSnapshot, required
      - `standard` ClientOnboardingPublicStandardQuestion[], required
        - `key` string, required
        - `prompt` string, required
        - `type` 'short_text' | 'long_text' | 'yes_no' | 'date' | 'single_select' | 'address' | 'contact', required
        - `enabled` boolean, required
        - `required` boolean, required
        - `order` integer, required
        - `options` string[]
      - `custom` ClientOnboardingCustomQuestion[], required
        - `id` string, uuid, required
        - `prompt` string, required
        - `type` 'short_text' | 'long_text' | 'yes_no' | 'single_select', required
        - `required` boolean, required
        - `options` string[], required
        - `order` integer, required
    - `setupAnswers` object, required
    - `questionsComplete` boolean, required
    - `filesDeferredAt` string, date-time, nullable
    - `bookSetupMethod` 'quickbooks' | 'bank_csv' | 'fresh_start' | 'null', nullable, required
    - `cutoffDate` string, date, nullable, required
    - `accountingBasis` 'accrual' | 'cash' | 'not_sure' | 'null', nullable, required
    - `sourceLocked` boolean, required
    - `bankConnection` object, nullable, required
      - `taskId` string, uuid, required
      - `status` 'open' | 'completed' | 'cancelled' | 'expired', required
      - `url` string, uri, required
      - `completedAt` string, date-time, nullable, required
    - `uploads` object, required
      - `uploadBatchId` string, uuid, nullable, required
      - `filesReadyAt` string, date-time, nullable, required
      - `requiredRoles` string[], required
      - `allowedRoles` string[], required
      - `files` PublicClientOnboardingBookSetupFile[], required
        - `role` 'chart_of_accounts' | 'journal' | 'profit_and_loss' | 'balance_sheet' | 'bank_activity' | 'source_file', required
        - `fileName` string, required
        - `fileSize` integer, required
        - `mimeType` string, required
    - `submission` object, nullable, required
      - `submittedAt` string, date-time, required
      - `assistedImport` object, nullable, required
        - `id` string, uuid, required
        - `status` 'ready' | 'in_progress' | 'needs_information' | 'complete', required
        - `statusLabel` string, required
      - `portal` object, required
        - `status` 'active' | 'invite_pending' | 'invite_expired', required
        - `actionUrl` string, nullable, required

## Other responses

- `409`: The upload batch is incomplete or no longer current
- `410`: The resume token is invalid or expired
- `429`: Rate limit exceeded
- `default`: Error response

---

[API](https://skmtc.dev/ledgerhq-pro/apis/ledgerhq-bookkeeping-api.md) · [All operations](https://skmtc.dev/ledgerhq-pro/apis/ledgerhq-bookkeeping-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ledgerhq-pro/apis/ledgerhq-bookkeeping-api/revisions/9a8269f0a586?raw)
