---
title: "Create up to 100 cards at once, all or nothing (used to save AI drafts)"
method: POST
path: "/revise/cards/batch"
tags: ["revise"]
---

# Create up to 100 cards at once, all or nothing (used to save AI drafts)

`POST /revise/cards/batch`

## Request

- Base URL: `https://api.focusbear.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.focusbear.io/revise/cards/batch`
- Auth: HTTP bearer

## Request body

- BatchCreateReviseCardsDto
  - `deck_id` string, uuid: Deck for every card in the batch
  - `cards` ReviseCardFieldsDto[], required
    - `front` string, required
    - `back` string, required
    - `id` string, uuid: Client-generated id; repeating it returns the existing card
    - `source_type` 'manual' | 'note' | 'pdf' | 'anki' | 'algoapp' | 'file': Import sources are accepted too: the Mac reads Anki and AlgoApp files itself (preview mode) and copies those cards to the account, and they must stay imported cards, due at once and outside the daily new-card allowance. Refusing them failed every 100-card batch of a copy with a 400.
    - `source_note_id` string, uuid: The user's note the card came from
    - `source_label` string: PDF file name or note title
    - `created_by` 'user' | 'ai'

## Response `201`

- ReviseCardListResponseDto
  - `items` ReviseCardResponseDto[], required
    - `id` string, required
    - `deck_id` string, nullable, required
    - `front` string, required
    - `back` string, required
    - `source_type` 'manual' | 'note' | 'pdf' | 'anki' | 'algoapp' | 'file', required
    - `source_note_id` string, nullable, required
    - `source_label` string, nullable, required
    - `created_by` 'user' | 'ai', required
    - `needs_rewrite` boolean, required
    - `rewrite_flagged_at` string, nullable, required
    - `rewrite_resolved_at` string, nullable, required
    - `state` 'learning' | 'review' | 'relearning', required
    - `step` number, nullable, required
    - `stability` number, nullable, required
    - `difficulty` number, nullable, required
    - `due_at` string, required
    - `last_reviewed_at` string, nullable, required
    - `first_reviewed_at` string, nullable, required
    - `review_count` number, required
    - `lapse_count` number, required
    - `is_new` boolean, required: Never reviewed
    - `preview_due_at` RevisePreviewDueAtDto, required
      - `no_idea` string, required
      - `again` string, required
      - `hard` string, required
      - `good` string, required
      - `easy` string, required
    - `created_at` string, required
    - `updated_at` string, required
    - `deleted_at` string, nullable, required

---

[API](https://skmtc.dev/focusbear/apis/focusbear-api.md) - [All operations](https://skmtc.dev/focusbear/apis/focusbear-api/llms.txt) - [OpenAPI document](https://skmtc.dev/focusbear/apis/focusbear-api/revisions/3a83a3b9a811?raw)
