---
title: "Save business answers or defer file collection"
method: PATCH
path: "/client-onboarding/public/enrollments/{token}/book-setup"
tags: ["Client Onboarding"]
---

# Save business answers or defer file collection

`PATCH /client-onboarding/public/enrollments/{token}/book-setup`

## Request

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

Save token-scoped business answers. Set deferFiles=true to record that the customer will send files later. Import settings and bank connections are left to the accountant. Legacy source fields remain accepted. This client action is excluded from MCP.

## Path parameters

- `token` string, required

## Request body

- PatchPublicClientOnboardingBookSetup
  - `deferFiles` boolean: Record that the customer will send files later.
  - `setupAnswers` object
  - `bookSetupMethod` 'quickbooks' | 'bank_csv' | 'fresh_start': Persist the customer's file source. The current UI offers quickbooks or bank_csv; fresh_start remains for older integrations. Original source_file uploads preserve this choice and remain a neutral file handoff.
  - `cutoffDate` string, date, nullable
  - `accountingBasis` 'accrual' | 'cash' | 'not_sure' | 'null', nullable

## Response `200`

Updated post-sale 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`: Required answers are incomplete or the selected source is locked
- `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)
