# 주문과 체결

REST 기본 주소는 `https://api.btxpro.co.kr`입니다. 모든 요청은 서명하며, 조회는 read, 생성·취소는 trade 권한이 필요합니다.

## 지원하는 주문

현재는 `type: "limit"`, `timeInForce: "GTC"`인 지정가 주문만 지원합니다. `side`는 `buy` 또는 `sell`입니다. 시장가, post-only, IOC/FOK, quote 수량 주문은 지원하지 않습니다.

## 주문 생성

```http
POST https://api.btxpro.co.kr/v1/orders
Content-Type: application/json
```

```json
{
  "symbol": "BTC-USDT",
  "walletId": 21,
  "side": "buy",
  "type": "limit",
  "timeInForce": "GTC",
  "quantity": "0.100000000",
  "price": "65000.000000000"
}
```

위 JSON은 서명 전 본문의 예시입니다. 전송할 JSON 바이트로 서명한 뒤 인증 헤더를 붙여 요청합니다. 응답은 엔진 결과를 최대 10초 기다린 후 반환하며, 성공 시 `data.orderId`와 주문 상태를 확인합니다. 성공·실패 모델의 전체 필드는 [주문 모델](/api-docs/generated/schemas.md#schema-order)을 확인하세요.

## 조회와 취소

| 메서드 | 경로 | 주요 파라미터 |
| --- | --- | --- |
| GET | `/v1/orders/open` | `walletId`, `symbol`, `limit` 선택 |
| GET | `/v1/orders/history` | `walletId`, `symbol`, `limit`, `startTime`, `endTime` 선택 |
| GET | `/v1/orders/{orderId}` | orderId 필수 |
| DELETE | `/v1/orders/{orderId}` | orderId 필수, `walletId`, `symbol`은 일치 여부 확인용 |
| DELETE | `/v1/orders` | `walletId` 필수, `symbol`, `limit` 선택 |
| GET | `/v1/fills` | `walletId`, `symbol`, `limit`, `startTime`, `endTime` 선택 |

단건 취소 예시 경로:

```text
DELETE /v1/orders/987654?walletId=21&symbol=BTC-USDT
```

서명할 쿼리는 정렬된 `symbol=BTC-USDT&walletId=21`입니다. 서명 예제가 전송 쿼리도 같은 방식으로 생성합니다.

일괄 취소는 지정한 지갑의 대상 주문을 선택합니다. 최대 16개 엔진 명령을 동시에 처리하고, 배치 전체가 하나의 10초 제한을 공유합니다. 결과의 `items`와 `hasMore`를 확인하세요. 개별 취소 실패도 항목별로 확인해야 하며 HTTP 성공만으로 전체 주문의 취소를 판단하면 안 됩니다.

## 주문 타임아웃과 재시도 {#timeouts-and-retries}

`ENGINE_TIMEOUT`은 주문이 실패했다는 확정 응답이 아닙니다. 엔진에서 처리됐지만 응답을 받지 못했을 수 있습니다.

1. 같은 생성·취소 요청을 자동으로 다시 보내지 않습니다.
2. 미체결 주문, 주문 이력, 체결 이력을 조회합니다.
3. 개인 WS를 사용한다면 재연결 후 새 스냅샷도 반영합니다.
4. 결과를 식별하지 못하면 중복 주문 위험을 감수하는 자동 재전송 대신 운영 확인 절차로 전환합니다.

고객 주문 ID, 멱등성 키, 요청 상태 조회 엔드포인트는 현재 없습니다. `requestId`와 WS 명령 `id`는 요청·응답을 연결하는 값입니다.
