---
title: "Create folder, sheet, doc bundle, or memo"
method: POST
path: "/create"
---

# Create folder, sheet, doc bundle, or memo

`POST /create`

## Request

- Base URL: `https://api.space-ocr.com`
- URL: `https://api.space-ocr.com/create`
- Auth: HTTP bearer

## Request body

- object
  - `path` string, required: parent folder path
  - `type` 'folder' | 'sheet' | 'memo' | 'doc', required
  - `name` string, required
  - `text` string
  - `columns` ColumnSpec[]
    - `id` string
    - `name` string, required
    - `type` string, required: "string" (default) | "number" | "integer" | "date" | "array". Scalar types never reach the model — declaring one adds a parsed `normalized` value per cell and raises `type_mismatch` when the printed value won't parse.
    - `description` string
    - `children` unknown[]
      - unknown
    - `required` boolean: Review declaration: report reason "missing" when this column comes back empty on an upload. Never shown to the model.
    - `label` union: Printed label to anchor this column's coordinates to when the value repeats on the page (string columns only, engine v64). Never shown to the model.
      - string
      - string[]
    - `pattern` union: Regex the extracted value must match (string columns only, JSON-Schema partial-match semantics — anchor with ^…$ for whole-value). Array = any-one-matches. Violation → review reason `pattern_mismatch`. Never shown to the model.
      - string
      - string[]
    - `min` number: Inclusive lower bound for a number/integer column's normalized value. Violation → `out_of_range`.
    - `max` number: Inclusive upper bound for a number/integer column's normalized value. Violation → `out_of_range`.
    - `enum` string[]: Allowed values (string columns only). A value outside the set raises review reason `pattern_mismatch`. Never shown to the model.
    - `near` union: Vocabulary that must be printed beside the value — one term, a list, or { terms, match }. The check runs over every occurrence of the value: none beside a declared term → `near_mismatch`, one beside a term but not the copy the coordinates landed on → `near_ambiguous`. When the term itself is absent, `review.notes` reports `near_unresolved`. Never shown to the model.
      - string
      - string[]
      - object
        - `terms` union, required
          - string
          - string[]
        - `match` string
    - `not_near` union: The mirror of `near` — vocabulary the value must NOT sit beside (登録番号/TEL/〒 on an addressee column). Sitting beside one raises `near_conflict`. Absence of the vocabulary is not a violation, so this never abstains. Never shown to the model.
      - string
      - string[]
      - object
        - `terms` union, required
          - string
          - string[]
        - `match` string
    - `review` 'normal' | 'off': "off" withholds engine-inferred review reasons for this column. Declared-rule violations (missing / pattern / range / enum / near) still report.
  - `prompt` string
  - `mode` 'markdown' | 'text': Doc bundles only. "markdown" (default) converts each page to layout-preserving Markdown; "text" keeps the raw text.

## Response `201`

Created

- unknown

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `402`: Payment Required
- `403`: Forbidden
- `404`: Not Found
- `413`: Payload Too Large
- `429`: Too Many Requests
- `500`: Internal Error
- `502`: OCR engine error (charge auto-refunded)
- `504`: OCR engine timeout (charge auto-refunded)

---

[API](https://skmtc.dev/space-ocr/apis/space-ocr-public-api.md) · [All operations](https://skmtc.dev/space-ocr/apis/space-ocr-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/space-ocr/apis/space-ocr-public-api/revisions/d7831cf1168e?raw)
