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

# 값과 요청 크기

> 요청 한 번에 담을 수 있는 크기와 값의 상한, 긴 텍스트를 읽고 쓰는 방법을 정리합니다.

이 상한은 요청 한 번에 적용됩니다. 저장할 수 있는 값의 크기가 아닙니다. 앱에서 입력한 텍스트는 이보다 길 수 있습니다.

## 쓰기 요청

| 대상 | 상한 | 초과 시 |
| - | - | - |
| 요청 본문 | 500KB(512,000바이트) | 400 `validation_error` `Request body is too large. The maximum size is 512000 bytes.` |
| 값 쓰기 한 번 | 저장 형식으로 768,000바이트 | 400 `validation_error` `The page properties are too large.` |
| `title` · `rich_text` 조각 하나의 글자 수 | 2,000(UTF-16 코드 단위) | 400 `validation_error` |
| `title` · `rich_text` 조각 수 | 100개 | 400 `validation_error` |
| `multi_select` · `people` · `relation` · `files` 항목 수 | 100개 | 400 `validation_error` |
| `url` | 2,000자 | 400 `validation_error` |
| `email` · `phone_number` | 100자 | 400 `validation_error` |
| 선택지 이름 | 2,000자, 쉼표 불가 | 400 `validation_error` |
| 속성 하나의 선택지 수 | 1,000개 | 400 `Invalid select option for property: ...` |
| 파일 이름(`external`) | 100자 | 400 `validation_error` |
| 파일 · 표지 외부 URL | 2,048자 | 400 `validation_error` |

768,000바이트는 서식 정보까지 더해 저장 형식으로 바꾼 크기입니다. 요청 본문이 500KB 이내여도 서식이 많으면 넘을 수 있습니다.

조각 상한을 넘으면 다음 메시지를 반환합니다.

```text theme={null}
body failed validation: body.properties.Notes.rich_text[0].text.content.length should be ≤ `2000`, instead was `2001`.
body failed validation: body.properties.Notes.rich_text.length should be ≤ `100`, instead was `101`.
```

## 긴 텍스트

`rich_text`와 `title` 배열의 항목 하나를 '조각'이라고 합니다. Bottari는 텍스트를 2,000자 이하의 조각으로 나누어 반환합니다. 이모지는 나누지 않으므로 일부 조각은 2,000자보다 짧습니다.

| 텍스트 | 반환되는 조각 길이 |
| - | - |
| 빈 텍스트 | 조각 없음(`[]`) |
| 짧은 텍스트 | 조각 1개 |
| 5,001자(1,999자 + 이모지 + 3,000자) | `[1999, 2000, 1002]` |
| 2,000자씩 100조각으로 쓴 텍스트 | 100조각 |
| 같은 서식의 짧은 조각 여러 개로 쓴 텍스트 | 합친 뒤 2,000자 단위로 나눔 |

본문 블록의 `rich_text`와 댓글도 같습니다. 2,500자 댓글은 `[2000, 500]`입니다.

> [!WARNING]
>
> `rich_text[0]`만 읽으면 앞 2,000자만 받습니다. 조각을 모두 합쳐 사용하세요.

```js theme={null}
const text = property.rich_text.map((item) => item.plain_text).join("");
```

### 읽은 값을 그대로 다시 쓰기

읽은 긴 텍스트는 그대로 다시 쓸 수 있습니다. 조각이 이미 2,000자 이내로 나뉘어 있기 때문입니다.

200,000 UTF-16 코드 단위를 넘는 텍스트는 조각이 100개를 넘어 그대로 다시 쓰면 400을 반환합니다. API로는 한 번에 이 길이를 쓸 수 없으므로, 앱 입력처럼 다른 경로로 들어온 텍스트에서만 발생합니다.

### 긴 텍스트 새로 쓰기

텍스트를 2,000자 이하의 조각으로 나누어 보내세요. 이모지 같은 서로게이트 쌍을 나누지 마세요.

```js theme={null}
function toItems(text, size = 2000) {
  const out = [];
  for (let i = 0; i < text.length; ) {
    let end = Math.min(i + size, text.length);
    const last = text.charCodeAt(end - 1);
    if (end < text.length && last >= 0xd800 && last <= 0xdbff) end -= 1;
    out.push({ text: { content: text.slice(i, end) } });
    i = end;
  }
  return out;
}
```

## 읽기 응답

| 대상 | 상한 | 전부 읽는 방법 |
| - | - | - |
| 목록의 `page_size` | 1\~100, 기본값 100 | `start_cursor`로 다음 목록을 읽습니다. |
| 행 응답의 `relation` | 25개와 `has_more` | [속성 값 읽기](https://developers.bottari.ai/ko/api-reference/pages/property.md) |
| 행 응답의 롤업 원래 값 | 25개를 넘으면 `type: "unsupported"` | [속성 값 읽기](https://developers.bottari.ai/ko/api-reference/pages/property.md) |
| 행 응답의 `people` · `title` · `rich_text` | 상한 없음 | 모두 포함됩니다. |
| 마크다운의 `unknown_block_ids` | 100개 | 블록 API로 읽습니다. |
| 파일 · 아이콘 · 표지의 서명 주소 | 1시간 뒤 만료(`expiry_time`) | 다시 읽으면 새 주소를 받습니다. |

> [!WARNING]
>
> `has_more: true`인 `relation`을 읽은 그대로 다시 쓰면 25개 뒤의 값이 빠집니다. 쓰기는 값 전체를 바꿉니다. 다시 쓰기 전에 전부 읽으세요.

## 필터와 정렬

| 대상 | 상한 |
| - | - |
| `and` · `or` 중첩 | 2단계 |
| `and` · `or` 배열 하나의 항목 | 100개 |
| 한 요청의 조건 수 | 모두 1,000개 |
| `sorts` 항목 | 100개 |
| `select` · `status` · `multi_select` 이름 배열 | 100개 |

## 연동과 웹훅

| 대상 | 상한 |
| - | - |
| 팀의 연동 수 | 25개 |
| 연동 이름 | 80자 |
| 연동 만들기 · 새 토큰 · 구독 만들기 · 인증 전 구독의 주소 변경 | 합쳐서 팀마다 시간당 10번 |
| 연동의 웹훅 구독 | 1개 |
| 인증 토큰 다시 보내기 | 구독마다 시간당 10번 |
| 웹훅 받을 주소 | 2,048자 |

## 블록 한도

팀의 블록 한도에 도달하면 행을 만들 때 403 `restricted_resource` `This workspace has reached its block limit.`을 반환합니다.


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