---
updatedAt: 2026-04-22T09:48:12.000Z
agentTools:
  projectIndex: https://developers.modusign.co.kr/llms.txt
---

# 서명 요청

서명 요청에 필요한 정보들로 서명 요청을 진행합니다

# OpenAPI definition

```json
{
  "openapi": "3.0.0",
  "paths": {
    "/documents": {
      "post": {
        "description": "서명 요청에 필요한 정보들로 서명 요청을 진행합니다",
        "operationId": "DocumentController_create",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateDocumentRequestDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "문서 정보",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateDocumentResponseDto"
                }
              }
            }
          },
          "400": {
            "description": "앵커 텍스트가 PDF에서 매칭되지 않으면 현재 첫 번째 미매칭 앵커를 errors에 반환합니다. 앵커로 배치한 입력란에 조건부 표시 규칙을 지정하거나, 그룹 체크박스 멤버의 dataLabel 이 겹치면 요청 검증 실패로 거부합니다.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "Bad request",
                  "required": [
                    "type",
                    "title"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "BadRequestException"
                    },
                    "title": {
                      "type": "string",
                      "example": "Anchor text not found in PDF"
                    },
                    "data": {
                      "oneOf": [
                        {
                          "type": "object",
                          "title": "Anchor text not found in PDF",
                          "required": [
                            "errors"
                          ],
                          "properties": {
                            "errors": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "required": [
                                  "position"
                                ],
                                "properties": {
                                  "position": {
                                    "type": "object",
                                    "required": [
                                      "anchor"
                                    ],
                                    "properties": {
                                      "anchor": {
                                        "type": "object",
                                        "required": [
                                          "text"
                                        ],
                                        "properties": {
                                          "text": {
                                            "type": "string"
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        },
                        {
                          "type": "object",
                          "title": "Validation failed",
                          "required": [
                            "constraints"
                          ],
                          "properties": {
                            "constraints": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "required": [
                                  "property",
                                  "message"
                                ],
                                "properties": {
                                  "property": {
                                    "type": "string"
                                  },
                                  "message": {
                                    "type": "string"
                                  }
                                }
                              }
                            }
                          }
                        }
                      ]
                    }
                  }
                },
                "examples": {
                  "anchorTextNotFound": {
                    "summary": "앵커 텍스트 미매칭",
                    "value": {
                      "type": "BadRequestException",
                      "title": "Anchor text not found in PDF",
                      "data": {
                        "errors": [
                          {
                            "position": {
                              "anchor": {
                                "text": "서명 위치"
                              }
                            }
                          }
                        ]
                      }
                    }
                  },
                  "groupMemberDataLabelTakesIndex": {
                    "summary": "그룹 멤버의 dataLabel 이 라벨 없는 멤버가 받을 번호와 같음",
                    "value": {
                      "type": "ValidationFailedException",
                      "title": "Validation failed",
                      "data": {
                        "constraints": [
                          {
                            "property": "participants[0].fields",
                            "message": "Checkbox dataLabel must not equal the number given to an unlabeled member of the same group."
                          }
                        ]
                      }
                    }
                  },
                  "conditionalRuleOnAnchorField": {
                    "summary": "자동 배치 입력란에 규칙 지정",
                    "value": {
                      "type": "ValidationFailedException",
                      "title": "Validation failed",
                      "data": {
                        "constraints": [
                          {
                            "property": "participants[0].fields[1].conditionalRule",
                            "message": "Anchor field cannot carry a conditional display rule"
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "요금제 검증에 실패했습니다. 사용량을 모두 사용했으면 `UsageLimitExceededException`으로 `data` 없이 응답합니다. 그 밖의 원인은 `ForbiddenException`의 `data.reason`(THROTTLE_EXCEEDED, FEATURE_NOT_INCLUDED, SUBSCRIPTION_INACTIVE, SUBSCRIPTION_NOT_FOUND)으로 구분합니다. `data.throttleName`은 수량 상한 목록, `data.features`는 권한 목록의 값이며 두 목록은 서로 다릅니다.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlanAuthorityErrorResponseDto"
                }
              }
            }
          },
          "422": {
            "description": "규칙 그래프 위반 또는 같은 요청 안의 중복 대상",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ConditionalRuleReferenceNotFoundException"
                    },
                    {
                      "$ref": "#/components/schemas/ConditionalRuleCycleDetectedException"
                    },
                    {
                      "$ref": "#/components/schemas/ConditionalRuleParticipantScopeViolationException"
                    },
                    {
                      "$ref": "#/components/schemas/ConditionalRuleTargetLimitExceededException"
                    },
                    {
                      "$ref": "#/components/schemas/ConditionalRuleTriggerValueNotAllowedException"
                    },
                    {
                      "$ref": "#/components/schemas/ConditionalRuleCarrierNotAllowedException"
                    },
                    {
                      "$ref": "#/components/schemas/ConditionalRuleRequesterCarrierNotAllowedException"
                    },
                    {
                      "$ref": "#/components/schemas/DataLabelNotUniqueException"
                    },
                    {
                      "$ref": "#/components/schemas/ConditionalRuleOneClickTargetNotAllowedException"
                    },
                    {
                      "$ref": "#/components/schemas/ConditionalRuleGraphSizeExceededException"
                    }
                  ]
                },
                "examples": {
                  "referenceNotFound": {
                    "summary": "규칙이 가리키는 조건 입력란이 없음",
                    "value": {
                      "instance": "/documents",
                      "type": "ConditionalRuleReferenceNotFoundException",
                      "title": "Conditional rule refers to a field that does not exist",
                      "detail": "Conditional rule refers to '결제수단', which is not in the requested document. Check that the field is not excluded.",
                      "data": {
                        "dataLabel": "결제수단",
                        "groupDataLabel": null
                      }
                    }
                  },
                  "cycleDetected": {
                    "summary": "순환 참조",
                    "value": {
                      "instance": "/documents",
                      "type": "ConditionalRuleCycleDetectedException",
                      "title": "Conditional rule graph must be acyclic",
                      "detail": "Conditional rule cycle detected: 결제수단 -> 카드종류 -> 결제수단.",
                      "data": {
                        "cycle": [
                          "결제수단",
                          "카드종류",
                          "결제수단"
                        ]
                      }
                    }
                  },
                  "participantScopeViolation": {
                    "summary": "서로 다른 참여자의 입력란을 조건·대상으로 연결",
                    "value": {
                      "instance": "/documents",
                      "type": "ConditionalRuleParticipantScopeViolationException",
                      "title": "Conditional rule must stay within a single participant",
                      "detail": "Target field '카드번호' belongs to participant '보증인' but its trigger field '결제수단' belongs to participant '신청자'.",
                      "data": {
                        "targetDataLabel": "카드번호",
                        "targetParticipantDataLabel": "보증인",
                        "triggerDataLabel": "결제수단",
                        "triggerParticipantDataLabel": "신청자"
                      }
                    }
                  },
                  "targetLimitExceeded": {
                    "summary": "한 규칙의 대상 수 상한 초과",
                    "value": {
                      "instance": "/documents",
                      "type": "ConditionalRuleTargetLimitExceededException",
                      "title": "Conditional rule target count exceeded",
                      "detail": "A conditional rule triggered by '결제수단' must target at most 100 carriers. (currentCount: 101)",
                      "data": {
                        "triggerDataLabel": "결제수단",
                        "maxCount": 100,
                        "currentCount": 101
                      }
                    }
                  },
                  "triggerValueNotAllowed": {
                    "summary": "조건 입력란이 가질 수 없는 기대값",
                    "value": {
                      "instance": "/documents",
                      "type": "ConditionalRuleTriggerValueNotAllowedException",
                      "title": "Conditional rule trigger value is not allowed",
                      "detail": "Conditional rule expects '결제수단' to be '신용가드', which is not one of its allowed values ('신용카드', '현금').",
                      "data": {
                        "dataLabel": "결제수단",
                        "groupDataLabel": null,
                        "value": "신용가드",
                        "allowedValues": [
                          "신용카드",
                          "현금"
                        ]
                      }
                    }
                  },
                  "carrierNotAllowed": {
                    "summary": "조건 입력란으로 쓸 수 없는 종류",
                    "value": {
                      "instance": "/documents",
                      "type": "ConditionalRuleCarrierNotAllowedException",
                      "title": "Conditional rule carrier is not allowed",
                      "detail": "'이름' of type 'TEXT' cannot be used as the trigger of a conditional rule.",
                      "data": {
                        "dataLabel": "이름",
                        "fieldType": "TEXT",
                        "role": "TRIGGER"
                      }
                    }
                  },
                  "requesterCarrierNotAllowed": {
                    "summary": "요청자 입력란을 규칙에 사용",
                    "value": {
                      "instance": "/documents",
                      "type": "ConditionalRuleRequesterCarrierNotAllowedException",
                      "title": "Requester field cannot take part in a conditional rule",
                      "detail": "Field '계약금액' belongs to requester '요청자' and cannot be used as the trigger of a conditional rule.",
                      "data": {
                        "dataLabel": "계약금액",
                        "participantDataLabel": "요청자",
                        "role": "TRIGGER"
                      }
                    }
                  },
                  "dataLabelNotUnique": {
                    "summary": "같은 요청에 같은 체크박스 그룹을 두 번 지정",
                    "value": {
                      "instance": "/documents",
                      "type": "DataLabelNotUniqueException",
                      "title": "Data label must be unique",
                      "detail": "Data label '수신채널' is duplicated",
                      "data": {
                        "dataLabel": "수신채널"
                      }
                    }
                  },
                  "oneClickTargetNotAllowed": {
                    "summary": "한 번에 선택 체크박스를 규칙으로 숨김",
                    "value": {
                      "instance": "/documents",
                      "type": "ConditionalRuleOneClickTargetNotAllowedException",
                      "title": "One-click checkbox cannot be hidden by a conditional rule",
                      "detail": "'약관동의' contains checkbox '전체동의' with one-click selection enabled and cannot be used as the target of a conditional rule.",
                      "data": {
                        "targetDataLabel": "약관동의",
                        "oneClickFieldDataLabel": "전체동의",
                        "groupDataLabel": "약관동의"
                      }
                    }
                  },
                  "graphSizeExceeded": {
                    "summary": "검증 가능한 규칙 그래프 크기 초과",
                    "value": {
                      "instance": "/documents",
                      "type": "ConditionalRuleGraphSizeExceededException",
                      "title": "Conditional rule graph is too large to validate",
                      "detail": "Conditional rule graph carries 4001 nodes but only 4000 can be traversed.",
                      "data": {
                        "currentCount": 4001,
                        "maxCount": 4000
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "Basic": []
          },
          {
            "Bearer": []
          }
        ],
        "summary": "서명 요청",
        "tags": [
          "USER API"
        ]
      }
    }
  },
  "info": {
    "title": "MODUSIGN API",
    "description": "",
    "version": "1.0.0",
    "contact": {}
  },
  "servers": [
    {
      "url": "https://api.modusign.co.kr",
      "description": "production"
    }
  ],
  "components": {
    "securitySchemes": {
      "Bearer": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      },
      "Basic": {
        "type": "http",
        "scheme": "basic"
      }
    },
    "schemas": {
      "ConditionalRuleReferenceNotFoundExceptionData": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "조건부 표시 규칙이 조건으로 가리켰으나 문서에 없는 데이터 라벨"
          },
          "groupDataLabel": {
            "type": "string",
            "description": "가리킨 조건이 체크박스 그룹의 멤버일 때 그 그룹의 데이터 라벨. 그렇지 않으면 null",
            "nullable": true
          }
        },
        "required": [
          "dataLabel",
          "groupDataLabel"
        ]
      },
      "ConditionalRuleReferenceNotFoundException": {
        "type": "object",
        "properties": {
          "instance": {
            "type": "string",
            "description": "에러 대상 URL"
          },
          "type": {
            "type": "string",
            "enum": [
              "ConditionalRuleReferenceNotFoundException"
            ],
            "description": "Error 식별자"
          },
          "title": {
            "type": "string",
            "description": "Error 명칭"
          },
          "detail": {
            "type": "string",
            "description": "Error 상세 설명"
          },
          "data": {
            "description": "에러 맥락 추가 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleReferenceNotFoundExceptionData"
              }
            ]
          }
        },
        "required": [
          "instance",
          "type",
          "title"
        ]
      },
      "ConditionalRuleCycleDetectedExceptionData": {
        "type": "object",
        "properties": {
          "cycle": {
            "description": "순환을 이루는 데이터 라벨 경로. 시작 지점이 마지막에 다시 나타납니다.",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "cycle"
        ]
      },
      "ConditionalRuleCycleDetectedException": {
        "type": "object",
        "properties": {
          "instance": {
            "type": "string",
            "description": "에러 대상 URL"
          },
          "type": {
            "type": "string",
            "enum": [
              "ConditionalRuleCycleDetectedException"
            ],
            "description": "Error 식별자"
          },
          "title": {
            "type": "string",
            "description": "Error 명칭"
          },
          "detail": {
            "type": "string",
            "description": "Error 상세 설명"
          },
          "data": {
            "description": "에러 맥락 추가 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleCycleDetectedExceptionData"
              }
            ]
          }
        },
        "required": [
          "instance",
          "type",
          "title"
        ]
      },
      "ConditionalRuleParticipantScopeViolationExceptionData": {
        "type": "object",
        "properties": {
          "targetDataLabel": {
            "type": "string",
            "description": "규칙을 보유한 대상 입력란의 데이터 라벨"
          },
          "targetParticipantDataLabel": {
            "type": "string",
            "description": "대상 입력란에 할당된 참여자의 데이터 라벨"
          },
          "triggerDataLabel": {
            "type": "string",
            "description": "조건 입력란의 데이터 라벨"
          },
          "triggerParticipantDataLabel": {
            "type": "string",
            "description": "조건 입력란에 할당된 참여자의 데이터 라벨"
          }
        },
        "required": [
          "targetDataLabel",
          "targetParticipantDataLabel",
          "triggerDataLabel",
          "triggerParticipantDataLabel"
        ]
      },
      "ConditionalRuleParticipantScopeViolationException": {
        "type": "object",
        "properties": {
          "instance": {
            "type": "string",
            "description": "에러 대상 URL"
          },
          "type": {
            "type": "string",
            "enum": [
              "ConditionalRuleParticipantScopeViolationException"
            ],
            "description": "Error 식별자"
          },
          "title": {
            "type": "string",
            "description": "Error 명칭"
          },
          "detail": {
            "type": "string",
            "description": "Error 상세 설명"
          },
          "data": {
            "description": "에러 맥락 추가 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleParticipantScopeViolationExceptionData"
              }
            ]
          }
        },
        "required": [
          "instance",
          "type",
          "title"
        ]
      },
      "ConditionalRuleTargetLimitExceededExceptionData": {
        "type": "object",
        "properties": {
          "triggerDataLabel": {
            "type": "string",
            "description": "상한을 넘긴 규칙의 조건 입력란 데이터 라벨"
          },
          "maxCount": {
            "type": "number",
            "description": "규칙 하나가 가질 수 있는 최대 대상 수"
          },
          "currentCount": {
            "type": "number",
            "description": "현재 대상 수. 체크박스 그룹은 멤버 수와 무관하게 1개로 계수합니다."
          }
        },
        "required": [
          "triggerDataLabel",
          "maxCount",
          "currentCount"
        ]
      },
      "ConditionalRuleTargetLimitExceededException": {
        "type": "object",
        "properties": {
          "instance": {
            "type": "string",
            "description": "에러 대상 URL"
          },
          "type": {
            "type": "string",
            "enum": [
              "ConditionalRuleTargetLimitExceededException"
            ],
            "description": "Error 식별자"
          },
          "title": {
            "type": "string",
            "description": "Error 명칭"
          },
          "detail": {
            "type": "string",
            "description": "Error 상세 설명"
          },
          "data": {
            "description": "에러 맥락 추가 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleTargetLimitExceededExceptionData"
              }
            ]
          }
        },
        "required": [
          "instance",
          "type",
          "title"
        ]
      },
      "ConditionalRuleTriggerValueNotAllowedExceptionData": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "조건 입력란의 데이터 라벨"
          },
          "groupDataLabel": {
            "type": "string",
            "description": "조건 입력란이 체크박스 그룹 멤버일 때 그 그룹의 데이터 라벨. 그렇지 않으면 null",
            "nullable": true
          },
          "value": {
            "type": "string",
            "description": "규칙이 기대값으로 지정했으나 조건 입력란이 가질 수 없는 값"
          },
          "allowedValues": {
            "description": "조건 입력란이 가질 수 있는 값 목록. 드롭다운은 옵션 값, 체크박스는 TRUE 입니다.",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "dataLabel",
          "groupDataLabel",
          "value",
          "allowedValues"
        ]
      },
      "ConditionalRuleTriggerValueNotAllowedException": {
        "type": "object",
        "properties": {
          "instance": {
            "type": "string",
            "description": "에러 대상 URL"
          },
          "type": {
            "type": "string",
            "enum": [
              "ConditionalRuleTriggerValueNotAllowedException"
            ],
            "description": "Error 식별자"
          },
          "title": {
            "type": "string",
            "description": "Error 명칭"
          },
          "detail": {
            "type": "string",
            "description": "Error 상세 설명"
          },
          "data": {
            "description": "에러 맥락 추가 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleTriggerValueNotAllowedExceptionData"
              }
            ]
          }
        },
        "required": [
          "instance",
          "type",
          "title"
        ]
      },
      "ConditionalRuleCarrierNotAllowedExceptionData": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "자격을 갖추지 못한 입력란·체크박스 그룹의 데이터 라벨"
          },
          "fieldType": {
            "type": "string",
            "description": "해당 입력란의 유형"
          },
          "role": {
            "type": "string",
            "description": "규칙에서 맡으려던 역할",
            "enum": [
              "TRIGGER",
              "TARGET"
            ]
          }
        },
        "required": [
          "dataLabel",
          "fieldType",
          "role"
        ]
      },
      "ConditionalRuleCarrierNotAllowedException": {
        "type": "object",
        "properties": {
          "instance": {
            "type": "string",
            "description": "에러 대상 URL"
          },
          "type": {
            "type": "string",
            "enum": [
              "ConditionalRuleCarrierNotAllowedException"
            ],
            "description": "Error 식별자"
          },
          "title": {
            "type": "string",
            "description": "Error 명칭"
          },
          "detail": {
            "type": "string",
            "description": "Error 상세 설명"
          },
          "data": {
            "description": "에러 맥락 추가 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleCarrierNotAllowedExceptionData"
              }
            ]
          }
        },
        "required": [
          "instance",
          "type",
          "title"
        ]
      },
      "ConditionalRuleRequesterCarrierNotAllowedExceptionData": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "규칙에 참여할 수 없는 입력란의 데이터 라벨"
          },
          "participantDataLabel": {
            "type": "string",
            "description": "해당 입력란에 할당된 요청자의 데이터 라벨"
          },
          "role": {
            "type": "string",
            "description": "규칙에서 맡으려던 역할",
            "enum": [
              "TRIGGER",
              "TARGET"
            ]
          }
        },
        "required": [
          "dataLabel",
          "participantDataLabel",
          "role"
        ]
      },
      "ConditionalRuleRequesterCarrierNotAllowedException": {
        "type": "object",
        "properties": {
          "instance": {
            "type": "string",
            "description": "에러 대상 URL"
          },
          "type": {
            "type": "string",
            "enum": [
              "ConditionalRuleRequesterCarrierNotAllowedException"
            ],
            "description": "Error 식별자"
          },
          "title": {
            "type": "string",
            "description": "Error 명칭"
          },
          "detail": {
            "type": "string",
            "description": "Error 상세 설명"
          },
          "data": {
            "description": "에러 맥락 추가 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleRequesterCarrierNotAllowedExceptionData"
              }
            ]
          }
        },
        "required": [
          "instance",
          "type",
          "title"
        ]
      },
      "DataLabelNotUniqueExceptionData": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "중복된 데이터 라벨"
          }
        },
        "required": [
          "dataLabel"
        ]
      },
      "DataLabelNotUniqueException": {
        "type": "object",
        "properties": {
          "instance": {
            "type": "string",
            "description": "에러 대상 URL"
          },
          "type": {
            "type": "string",
            "enum": [
              "DataLabelNotUniqueException"
            ],
            "description": "Error 식별자"
          },
          "title": {
            "type": "string",
            "description": "Error 명칭"
          },
          "detail": {
            "type": "string",
            "description": "Error 상세 설명"
          },
          "data": {
            "description": "에러 맥락 추가 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/DataLabelNotUniqueExceptionData"
              }
            ]
          }
        },
        "required": [
          "instance",
          "type",
          "title"
        ]
      },
      "ConditionalRuleOneClickTargetNotAllowedExceptionData": {
        "type": "object",
        "properties": {
          "targetDataLabel": {
            "type": "string",
            "description": "규칙의 대상으로 지정하려 한 입력란·체크박스 그룹의 데이터 라벨"
          },
          "oneClickFieldDataLabel": {
            "type": "string",
            "description": "한 번에 선택이 켜져 있어 충돌을 만든 체크박스의 데이터 라벨"
          },
          "groupDataLabel": {
            "type": "string",
            "description": "충돌 체크박스가 속한 그룹의 데이터 라벨. 그룹에 속하지 않으면 null",
            "nullable": true
          }
        },
        "required": [
          "targetDataLabel",
          "oneClickFieldDataLabel",
          "groupDataLabel"
        ]
      },
      "ConditionalRuleOneClickTargetNotAllowedException": {
        "type": "object",
        "properties": {
          "instance": {
            "type": "string",
            "description": "에러 대상 URL"
          },
          "type": {
            "type": "string",
            "enum": [
              "ConditionalRuleOneClickTargetNotAllowedException"
            ],
            "description": "Error 식별자"
          },
          "title": {
            "type": "string",
            "description": "Error 명칭"
          },
          "detail": {
            "type": "string",
            "description": "Error 상세 설명"
          },
          "data": {
            "description": "에러 맥락 추가 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleOneClickTargetNotAllowedExceptionData"
              }
            ]
          }
        },
        "required": [
          "instance",
          "type",
          "title"
        ]
      },
      "ConditionalRuleGraphSizeExceededExceptionData": {
        "type": "object",
        "properties": {
          "currentCount": {
            "type": "number",
            "description": "규칙 그래프가 순회해야 하는 노드 수. 입력란과 체크박스 그룹의 합"
          },
          "maxCount": {
            "type": "number",
            "description": "한 번에 순회할 수 있는 최대 노드 수"
          }
        },
        "required": [
          "currentCount",
          "maxCount"
        ]
      },
      "ConditionalRuleGraphSizeExceededException": {
        "type": "object",
        "properties": {
          "instance": {
            "type": "string",
            "description": "에러 대상 URL"
          },
          "type": {
            "type": "string",
            "enum": [
              "ConditionalRuleGraphSizeExceededException"
            ],
            "description": "Error 식별자"
          },
          "title": {
            "type": "string",
            "description": "Error 명칭"
          },
          "detail": {
            "type": "string",
            "description": "Error 상세 설명"
          },
          "data": {
            "description": "에러 맥락 추가 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleGraphSizeExceededExceptionData"
              }
            ]
          }
        },
        "required": [
          "instance",
          "type",
          "title"
        ]
      },
      "PlanAuthorityThrottleExceededDataDto": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "enum": [
              "THROTTLE_EXCEEDED"
            ]
          },
          "throttleName": {
            "type": "string",
            "enum": [
              "TEMPLATE_COUNT",
              "SIGNER_COUNT",
              "ATTACHMENT_REQUEST_COUNT"
            ],
            "description": "상한을 넘은 항목. 보유·요청 수량 상한 목록의 값이며, 권한 목록(`FEATURE_NOT_INCLUDED.features`)과는 다른 목록입니다.",
            "example": "TEMPLATE_COUNT"
          },
          "limit": {
            "type": "integer",
            "minimum": 0,
            "description": "상한"
          },
          "requested": {
            "type": "integer",
            "minimum": 1,
            "description": "검증에 쓴 값. 템플릿은 \"기존 수 + 1\", 첨부·서명자는 이 요청의 개수"
          }
        },
        "required": [
          "reason",
          "throttleName",
          "limit",
          "requested"
        ]
      },
      "PlanAuthorityFeatureNotIncludedDataDto": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "enum": [
              "FEATURE_NOT_INCLUDED"
            ]
          },
          "features": {
            "type": "array",
            "uniqueItems": true,
            "minItems": 1,
            "description": "요금제에 없는 기능 가운데 공개하는 것. 값은 권한 목록이며, 수량 상한 목록(`THROTTLE_EXCEEDED`의 `throttleName`)과는 다른 목록입니다. 공개하지 않는 기능만 빠졌으면 `data` 없이 403 `Forbidden`으로 응답합니다",
            "example": [
              "ADVANCED_FIELDS"
            ],
            "items": {
              "type": "string",
              "enum": [
                "DOCUMENT",
                "TEMPLATE",
                "ADVANCED_FIELDS",
                "SIGNATURE_FIELD_ONECLICK",
                "TEMPLATE_MERGING",
                "PREFILLED_VALUE"
              ]
            }
          }
        },
        "required": [
          "reason",
          "features"
        ]
      },
      "PlanAuthoritySubscriptionInactiveDataDto": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "enum": [
              "SUBSCRIPTION_INACTIVE"
            ]
          }
        },
        "required": [
          "reason"
        ]
      },
      "PlanAuthoritySubscriptionNotFoundDataDto": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "enum": [
              "SUBSCRIPTION_NOT_FOUND"
            ]
          }
        },
        "required": [
          "reason"
        ]
      },
      "PlanAuthorityErrorResponseDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "ForbiddenException",
              "UsageLimitExceededException"
            ],
            "description": "`UsageLimitExceededException`은 기간 누적 사용량 초과에만 쓰이며 `data`가 없습니다."
          },
          "title": {
            "type": "string",
            "enum": [
              "Forbidden",
              "Usage limit exceeded"
            ]
          },
          "instance": {
            "type": "string",
            "description": "오류가 발생한 API 경로",
            "example": "/documents/request-with-template"
          },
          "data": {
            "description": "거절 원인. `reason`으로 구분하며, 사용량 초과(`UsageLimitExceededException`)와 원인을 알 수 없는 403에는 없습니다.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PlanAuthorityThrottleExceededDataDto"
              },
              {
                "$ref": "#/components/schemas/PlanAuthorityFeatureNotIncludedDataDto"
              },
              {
                "$ref": "#/components/schemas/PlanAuthoritySubscriptionInactiveDataDto"
              },
              {
                "$ref": "#/components/schemas/PlanAuthoritySubscriptionNotFoundDataDto"
              }
            ]
          }
        },
        "required": [
          "type",
          "title",
          "instance"
        ]
      },
      "FileRefDocumentFileInDocumentRequestDto": {
        "type": "object",
        "properties": {
          "fileId": {
            "type": "string",
            "description": "파일 ID"
          },
          "token": {
            "type": "string",
            "description": "파일 토큰"
          }
        },
        "required": [
          "fileId",
          "token"
        ]
      },
      "Base64DocumentFileInDocumentRequestDto": {
        "type": "object",
        "properties": {
          "base64": {
            "type": "string",
            "description": "base64 형식의 문서 파일"
          },
          "extension": {
            "type": "string",
            "description": "문서 파일의 확장자",
            "enum": [
              "pdf",
              "hwp",
              "hwpx",
              "doc",
              "docx",
              "xls",
              "xlsx",
              "ppt",
              "pptx",
              "bmp",
              "gif",
              "jpg",
              "jpeg",
              "png",
              "tiff"
            ],
            "default": "pdf"
          }
        },
        "required": [
          "base64",
          "extension"
        ]
      },
      "PositionInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number",
            "description": "입력란의 가로 좌표",
            "minimum": 0,
            "maximum": 1
          },
          "y": {
            "type": "number",
            "description": "입력란의 세로 좌표",
            "minimum": 0,
            "maximum": 1
          },
          "page": {
            "type": "integer",
            "description": "입력란이 위치할 페이지",
            "minimum": 1
          }
        },
        "required": [
          "x",
          "y",
          "page"
        ]
      },
      "SizeInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "width": {
            "type": "number",
            "description": "입력란의 너비",
            "minimum": 0,
            "maximum": 1
          },
          "height": {
            "type": "number",
            "description": "입력란의 높이",
            "minimum": 0,
            "maximum": 1
          }
        },
        "required": [
          "width",
          "height"
        ]
      },
      "TextFieldStyleInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "size": {
            "type": "number",
            "description": "텍스트 크기",
            "enum": [
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              24,
              30,
              36,
              48,
              60
            ],
            "default": 12
          },
          "font": {
            "type": "string",
            "description": "텍스트 글자체",
            "enum": [
              "NOTO_SANS",
              "NOTO_SERIF"
            ]
          },
          "align": {
            "type": "string",
            "description": "텍스트 정렬",
            "enum": [
              "LEFT",
              "CENTER",
              "RIGHT"
            ],
            "default": "LEFT"
          }
        },
        "required": [
          "size",
          "font"
        ]
      },
      "TextInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "데이터 라벨",
            "minLength": 1,
            "maxLength": 100,
            "example": "기타사항"
          },
          "type": {
            "type": "string",
            "example": "TEXT",
            "description": "요청자 입력 타입 (예시 값으로 고정되어 있습니다)"
          },
          "position": {
            "description": "입력란의 위치",
            "allOf": [
              {
                "$ref": "#/components/schemas/PositionInCreateDocumentRequestDto"
              }
            ]
          },
          "size": {
            "description": "입력란의 크기",
            "allOf": [
              {
                "$ref": "#/components/schemas/SizeInCreateDocumentRequestDto"
              }
            ]
          },
          "textStyle": {
            "description": "텍스트 스타일",
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldStyleInCreateDocumentRequestDto"
              }
            ]
          },
          "value": {
            "type": "string",
            "maxLength": 1000,
            "example": "기타사항입니다",
            "description": "텍스트 박스에 입력될 값"
          }
        },
        "required": [
          "type",
          "position",
          "size",
          "textStyle",
          "value"
        ]
      },
      "SigningDateFieldSizeInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "width": {
            "type": "number",
            "description": "입력란의 너비",
            "minimum": 0,
            "maximum": 1
          },
          "height": {
            "type": "number",
            "description": "입력란의 높이",
            "minimum": 0,
            "maximum": 1
          }
        },
        "required": [
          "width",
          "height"
        ]
      },
      "ConditionalRuleTriggerInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "조건 입력란의 데이터 라벨 (드롭다운 또는 개별 체크박스). 그룹에 속한 체크박스는 그 멤버의 dataLabel(생략했다면 그룹 안 위치순 번호)을 지정하고 groupLabel 에 그룹 라벨을 함께 지정합니다.",
            "minLength": 1,
            "maxLength": 100
          },
          "groupLabel": {
            "type": "string",
            "description": "조건 입력란이 체크박스 그룹에 속할 때 그 그룹의 라벨. 드롭다운이 조건이면 null 입니다.",
            "nullable": true
          },
          "value": {
            "type": "string",
            "description": "조건이 성립하는 값. 드롭다운은 옵션 값, 체크박스는 TRUE(선택됨)만 허용합니다.",
            "example": "TRUE",
            "minLength": 1
          }
        },
        "required": [
          "dataLabel",
          "value"
        ]
      },
      "ConditionalRuleInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "triggers": {
            "description": "규칙을 성립시키는 조건 목록. 현재는 1개만 지원합니다.",
            "minItems": 1,
            "maxItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConditionalRuleTriggerInCreateDocumentRequestDto"
            }
          }
        },
        "required": [
          "triggers"
        ]
      },
      "SigningDateInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "데이터 라벨",
            "minLength": 1,
            "maxLength": 100,
            "example": "기타사항"
          },
          "type": {
            "type": "string",
            "description": "필드 타입 (SIGNING_DATE로 요청해야 합니다)",
            "default": "SIGNING_DATE",
            "example": "SIGNING_DATE"
          },
          "size": {
            "description": "입력란의 크기",
            "allOf": [
              {
                "$ref": "#/components/schemas/SigningDateFieldSizeInCreateDocumentRequestDto"
              }
            ]
          },
          "position": {
            "description": "입력란의 위치",
            "allOf": [
              {
                "$ref": "#/components/schemas/PositionInCreateDocumentRequestDto"
              }
            ]
          },
          "textStyle": {
            "description": "텍스트 스타일",
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldStyleInCreateDocumentRequestDto"
              }
            ]
          },
          "displayFormat": {
            "type": "string",
            "description": "날짜 표기 형식",
            "enum": [
              "YYYY-MM-DD",
              "YYYY/DD/MM",
              "YYYY.MM.DD",
              "YYYYMMDD",
              "YYYY년 MM월 DD일",
              "DD-MM-YYYY",
              "DD/MM/YYYY",
              "DD.MM.YYYY",
              "DDMMYYYY",
              "DD일 MM월 YYYY년",
              "MM-DD-YYYY",
              "MM/DD/YYYY",
              "MM.DD.YYYY",
              "MMDDYYYY",
              "MM월 DD일 YYYY년",
              "YYYY/MM/DD",
              "YYYY-DD-MM",
              "YYYY.DD.MM",
              "YYYYDDMM",
              "YYYY년 DD일 MM월",
              "YY-MM-DD",
              "YY/MM/DD",
              "YY.MM.DD",
              "YYMMDD",
              "YY년 MM월 DD일",
              "DD-MM-YY",
              "DD/MM/YY",
              "DD.MM.YY",
              "DDMMYY",
              "DD일 MM월 YY년",
              "MM-DD-YY",
              "MM/DD/YY",
              "MM.DD.YY",
              "MMDDYY",
              "MM월 DD일 YY년",
              "YY-DD-MM",
              "YY/DD/MM",
              "YY.DD.MM",
              "YYDDMM",
              "YY년 DD일 MM월"
            ],
            "example": "YYYY-MM-DD"
          },
          "conditionalRule": {
            "description": "조건부 표시 규칙. 조건이 성립할 때만 이 입력란을 서명자에게 보여줍니다.",
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "type",
          "size",
          "position",
          "textStyle",
          "displayFormat"
        ]
      },
      "CheckboxInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "데이터 라벨",
            "minLength": 1,
            "maxLength": 100,
            "example": "기타사항"
          },
          "type": {
            "type": "string",
            "example": "CHECKBOX",
            "description": "요청자 입력 타입 (예시 값으로 고정되어 있습니다)"
          },
          "position": {
            "description": "입력란의 위치",
            "allOf": [
              {
                "$ref": "#/components/schemas/PositionInCreateDocumentRequestDto"
              }
            ]
          },
          "size": {
            "description": "입력란의 크기",
            "allOf": [
              {
                "$ref": "#/components/schemas/SizeInCreateDocumentRequestDto"
              }
            ]
          },
          "value": {
            "type": "boolean",
            "description": "체크 여부",
            "example": true
          }
        },
        "required": [
          "type",
          "position",
          "size",
          "value"
        ]
      },
      "RequesterImageInfoInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "base64": {
            "type": "string",
            "description": "이미지 데이터를 base64로 인코딩한 문자열"
          }
        },
        "required": [
          "base64"
        ]
      },
      "ImageInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "데이터 라벨",
            "minLength": 1,
            "maxLength": 100,
            "example": "기타사항"
          },
          "type": {
            "type": "string",
            "example": "IMAGE",
            "description": "요청자 입력 타입 (예시 값으로 고정되어 있습니다)"
          },
          "position": {
            "description": "입력란의 위치",
            "allOf": [
              {
                "$ref": "#/components/schemas/PositionInCreateDocumentRequestDto"
              }
            ]
          },
          "size": {
            "description": "입력란의 크기",
            "allOf": [
              {
                "$ref": "#/components/schemas/SizeInCreateDocumentRequestDto"
              }
            ]
          },
          "value": {
            "description": "3MB 이하의 jpg 또는 png 이미지 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/RequesterImageInfoInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "type",
          "position",
          "size",
          "value"
        ]
      },
      "PhoneNumberFormatInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "휴대폰 번호 입력 형식 타입",
            "enum": [
              "PHONE_NUMBER"
            ]
          }
        },
        "required": [
          "type"
        ]
      },
      "BankAccountNumberFormatInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "계좌 번호 입력 형식 타입",
            "enum": [
              "BANK_ACCOUNT_NUMBER"
            ]
          }
        },
        "required": [
          "type"
        ]
      },
      "BizNumberFormatInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "사업자 등록 번호 입력 형식 타입",
            "enum": [
              "BIZ_NUMBER"
            ]
          }
        },
        "required": [
          "type"
        ]
      },
      "RegexFormatInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "정규 표현식 입력 형식 타입",
            "enum": [
              "REGEX"
            ]
          },
          "name": {
            "type": "string",
            "description": "정규식 형식 이름 (예: 휴대폰)",
            "minLength": 1,
            "maxLength": 50
          },
          "pattern": {
            "type": "string",
            "description": "정규식 패턴 (최대 50자)",
            "minLength": 1,
            "maxLength": 50
          }
        },
        "required": [
          "type",
          "name",
          "pattern"
        ]
      },
      "TextFieldSizeInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "width": {
            "type": "number",
            "description": "입력란의 너비",
            "minimum": 0,
            "maximum": 1
          },
          "height": {
            "type": "number",
            "description": "입력란의 높이",
            "minimum": 0,
            "maximum": 1
          }
        },
        "required": [
          "width",
          "height"
        ]
      },
      "TextFieldInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "데이터 라벨",
            "minLength": 1,
            "maxLength": 100,
            "example": "기타사항"
          },
          "type": {
            "type": "string",
            "description": "필드 타입 (TEXT로 요청해야 합니다)",
            "default": "TEXT",
            "example": "TEXT"
          },
          "required": {
            "type": "boolean",
            "description": "필수 여부",
            "default": true
          },
          "size": {
            "description": "입력란의 크기",
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldSizeInCreateDocumentRequestDto"
              }
            ]
          },
          "position": {
            "oneOf": [
              {
                "title": "COORDINATE",
                "$ref": "#/components/schemas/CoordinatePositionInCreateDocumentRequestDto"
              },
              {
                "title": "ANCHOR",
                "$ref": "#/components/schemas/AnchorPositionInCreateDocumentRequestDto"
              }
            ],
            "description": "입력란의 위치. 좌표(x,y,page) 또는 anchor 중 하나만 지정"
          },
          "textStyle": {
            "description": "텍스트 스타일",
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldStyleInCreateDocumentRequestDto"
              }
            ]
          },
          "format": {
            "description": "입력 형식 (정규 표현식 등)",
            "oneOf": [
              {
                "title": "PHONE_NUMBER",
                "$ref": "#/components/schemas/PhoneNumberFormatInCreateDocumentRequestDto"
              },
              {
                "title": "BANK_ACCOUNT_NUMBER",
                "$ref": "#/components/schemas/BankAccountNumberFormatInCreateDocumentRequestDto"
              },
              {
                "title": "BIZ_NUMBER",
                "$ref": "#/components/schemas/BizNumberFormatInCreateDocumentRequestDto"
              },
              {
                "title": "REGEX",
                "$ref": "#/components/schemas/RegexFormatInCreateDocumentRequestDto"
              }
            ],
            "nullable": true
          },
          "valueDescription": {
            "type": "string",
            "description": "입력란 가이드",
            "nullable": true,
            "minLength": 1,
            "maxLength": 40
          },
          "prefilledValue": {
            "type": "string",
            "nullable": true,
            "description": "사전 입력값",
            "default": null
          },
          "conditionalRule": {
            "description": "조건부 표시 규칙. 조건이 성립할 때만 이 입력란을 서명자에게 보여줍니다.",
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "type",
          "size",
          "position",
          "textStyle"
        ]
      },
      "CheckboxFieldSizeInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "width": {
            "type": "number",
            "description": "입력란의 너비",
            "minimum": 0,
            "maximum": 1
          }
        },
        "required": [
          "width"
        ]
      },
      "CheckboxFieldInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "데이터 라벨. 같은 그룹 안에서는 중복될 수 없습니다.",
            "minLength": 1,
            "maxLength": 100,
            "example": "기타사항"
          },
          "type": {
            "type": "string",
            "description": "필드 타입 (CHECKBOX로 요청해야 합니다)",
            "default": "CHECKBOX",
            "example": "CHECKBOX"
          },
          "required": {
            "type": "boolean",
            "description": "필수 여부\n- 체크박스가 그룹에 속하는 경우 무시됩니다.",
            "default": false
          },
          "size": {
            "description": "입력란의 크기",
            "allOf": [
              {
                "$ref": "#/components/schemas/CheckboxFieldSizeInCreateDocumentRequestDto"
              }
            ]
          },
          "position": {
            "description": "입력란의 위치",
            "allOf": [
              {
                "$ref": "#/components/schemas/PositionInCreateDocumentRequestDto"
              }
            ]
          },
          "valueDescription": {
            "type": "string",
            "description": "체크박스 내용, 체크박스를 호버하거나 한번에 선택할때 서명자에게 노출됩니다.",
            "minLength": 1,
            "maxLength": 40
          },
          "enableOneClick": {
            "type": "boolean",
            "description": "체크박스를 한번에 선택(체크) 할 수 있는 여부, 문서 서명시 활성화된 체크박스는 서명자가 확인 후 한번에 체크할 수 있습니다.",
            "default": false
          },
          "prefilledValue": {
            "type": "boolean",
            "nullable": true,
            "description": "사전 입력값",
            "default": null
          },
          "groupLabel": {
            "type": "string",
            "description": "그룹 라벨",
            "minLength": 1,
            "maxLength": 100
          },
          "conditionalRule": {
            "description": "조건부 표시 규칙. 조건이 성립할 때만 이 입력란을 서명자에게 보여줍니다.",
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "type",
          "size",
          "position"
        ]
      },
      "SignatureFieldSizeInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "width": {
            "type": "number",
            "description": "입력란의 너비",
            "minimum": 0.01,
            "maximum": 1
          },
          "height": {
            "type": "number",
            "description": "입력란의 높이",
            "minimum": 0.01,
            "maximum": 1
          }
        },
        "required": [
          "width",
          "height"
        ]
      },
      "SignatureFieldInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "데이터 라벨",
            "minLength": 1,
            "maxLength": 100,
            "example": "기타사항"
          },
          "type": {
            "type": "string",
            "description": "필드 타입 (SIGNATURE로 요청해야 합니다)",
            "default": "SIGNATURE",
            "example": "SIGNATURE"
          },
          "required": {
            "type": "boolean",
            "description": "필수 여부\n- type이 `SIGNATURE`일 경우는 무조건 true가 됩니다.\n",
            "default": true
          },
          "signatureTypes": {
            "type": "array",
            "description": "서명 타입",
            "minItems": 1,
            "maxItems": 2,
            "items": {
              "type": "string",
              "enum": [
                "SIGN",
                "STAMP"
              ]
            }
          },
          "allowedGenerationMethods": {
            "type": "array",
            "description": "서명 생성 방식",
            "maxItems": 2,
            "items": {
              "type": "string",
              "enum": [
                "STAMP_IMAGE",
                "SIGN_DRAWING"
              ]
            }
          },
          "size": {
            "description": "입력란의 크기",
            "allOf": [
              {
                "$ref": "#/components/schemas/SignatureFieldSizeInCreateDocumentRequestDto"
              }
            ]
          },
          "position": {
            "oneOf": [
              {
                "title": "COORDINATE",
                "$ref": "#/components/schemas/CoordinatePositionInCreateDocumentRequestDto"
              },
              {
                "title": "ANCHOR",
                "$ref": "#/components/schemas/AnchorPositionInCreateDocumentRequestDto"
              }
            ],
            "description": "입력란의 위치. 좌표(x,y,page) 또는 anchor 중 하나만 지정"
          },
          "enableOneClick": {
            "type": "boolean",
            "description": "한번에 서명 활성화 여부",
            "default": false
          },
          "conditionalRule": {
            "description": "조건부 표시 규칙. 조건이 성립할 때만 이 입력란을 서명자에게 보여줍니다.",
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "type",
          "required",
          "signatureTypes",
          "position"
        ]
      },
      "SigningMethodInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "KAKAO",
              "EMAIL",
              "SECURE_LINK"
            ],
            "example": "EMAIL",
            "description": "참여 수단 종류"
          },
          "value": {
            "type": "string",
            "example": "modu.kim@modusign.co.kr / 01012345678",
            "description": "참여자의 참여 수단 (이메일 또는 휴대전화번호)"
          }
        },
        "required": [
          "type",
          "value"
        ]
      },
      "AttachmentRequestInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "첨부파일 1",
            "description": "첨부파일 이름 (특수문자 /?<>\\\":*|₩ 이 포함된 이름은 사용할 수 없습니다)",
            "minLength": 1,
            "maxLength": 100
          },
          "message": {
            "type": "string",
            "example": "2개월 내에 발급받은 회사 직인이 찍힌 원천징수영수증",
            "description": "첨부파일에 대한 설명",
            "nullable": true,
            "minLength": 1,
            "maxLength": 100
          },
          "required": {
            "type": "boolean",
            "description": "필수 여부",
            "example": true,
            "default": false
          }
        },
        "required": [
          "name"
        ]
      },
      "PasswordInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "example": "thisIsPassword",
            "description": "비밀번호 (4~20자, 한글 불가 — 영문/숫자/특수문자만 허용)",
            "minLength": 4,
            "maxLength": 20
          },
          "hint": {
            "type": "string",
            "nullable": true,
            "description": "비밀번호 힌트",
            "minLength": 1,
            "maxLength": 100
          }
        },
        "required": [
          "value"
        ]
      },
      "MobileIdentificationInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "김모두",
            "description": "휴대폰 본인 인증의 명의자 이름",
            "minLength": 1,
            "maxLength": 30
          },
          "phoneNumber": {
            "type": "string",
            "example": "01012345678",
            "description": "휴대폰 본인 인증의 명의자 전화번호"
          },
          "allowOptions": {
            "type": "array",
            "description": "휴대폰 본인 인증 옵션",
            "items": {
              "type": "string",
              "enum": [
                "SMS_OR_PASS",
                "SIMPLE_AUTH"
              ]
            }
          }
        },
        "required": [
          "name",
          "phoneNumber"
        ]
      },
      "DCertInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "주식회사 모두싸인",
            "description": "법인 공동인증서 인증 법인명",
            "minLength": 1,
            "maxLength": 30
          },
          "bizNumber": {
            "type": "string",
            "example": "1231212315",
            "description": "법인 공동인증서 인증 사업자등록번호",
            "minLength": 1
          }
        },
        "required": [
          "name",
          "bizNumber"
        ]
      },
      "VerificationInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "password": {
            "description": "접근 암호",
            "allOf": [
              {
                "$ref": "#/components/schemas/PasswordInCreateDocumentRequestDto"
              }
            ]
          },
          "mobileIdentification": {
            "description": "휴대폰 본인 인증",
            "allOf": [
              {
                "$ref": "#/components/schemas/MobileIdentificationInCreateDocumentRequestDto"
              }
            ]
          },
          "dCert": {
            "description": "법인 공동인증서 인증",
            "allOf": [
              {
                "$ref": "#/components/schemas/DCertInCreateDocumentRequestDto"
              }
            ]
          }
        }
      },
      "CheckboxGroupInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "groupLabel": {
            "type": "string",
            "description": "그룹 라벨",
            "minLength": 1,
            "maxLength": 100
          },
          "minCheckRequired": {
            "type": "number",
            "description": "최소 선택 개수. 현재는 0 또는 1만 지원합니다.",
            "enum": [
              0,
              1
            ]
          },
          "maxCheckLimit": {
            "type": "number",
            "nullable": true,
            "default": null,
            "example": 1,
            "description": "최대 선택 개수. 현재는 1또는 null만 지원합니다. null은 최대 개수까지 선택가능함을 뜻합니다."
          },
          "conditionalRule": {
            "description": "조건부 표시 규칙. 조건이 성립할 때만 이 체크박스 그룹을 서명자에게 보여줍니다.",
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "groupLabel",
          "minCheckRequired"
        ]
      },
      "ParticipantInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "SIGNER",
              "VIEWER"
            ],
            "description": "참여자 타입",
            "default": "SIGNER"
          },
          "role": {
            "type": "string",
            "example": "근로자",
            "description": "참여자의 역할",
            "minLength": 1,
            "maxLength": 36
          },
          "name": {
            "type": "string",
            "example": "김모두",
            "description": "참여자 이름 (특수문자 /?<>\\\":*|₩ 이 포함된 이름은 사용할 수 없습니다)",
            "minLength": 2,
            "maxLength": 30
          },
          "requesterMessage": {
            "type": "string",
            "description": "참여자에게 전달할 남길말",
            "minLength": 1,
            "maxLength": 1000,
            "example": "서명해 주세요",
            "nullable": true
          },
          "locale": {
            "type": "string",
            "description": "참여자가 사용할 언어",
            "default": "ko",
            "enum": [
              "ko",
              "en",
              "zh-CN",
              "ja",
              "vi",
              "fr"
            ]
          },
          "signingOrder": {
            "type": "integer",
            "description": "참여 순서. 순서 없이 참여하려면 모두 1로 설정하세요.",
            "example": 1,
            "minimum": 1,
            "maximum": 30
          },
          "signingDuration": {
            "type": "integer",
            "description": "참여자의 참여 유효 기간 (분)\n * 미지정시 기본값 20160분 (14일)",
            "minimum": 60,
            "maximum": 525600,
            "example": 20160,
            "default": 20160
          },
          "signingMethod": {
            "description": "참여자의 참여 수단",
            "allOf": [
              {
                "$ref": "#/components/schemas/SigningMethodInCreateDocumentRequestDto"
              }
            ]
          },
          "attachmentRequests": {
            "description": "첨부파일 요청 정보",
            "default": [],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AttachmentRequestInCreateDocumentRequestDto",
              "maxLength": 30
            }
          },
          "verification": {
            "description": "참여자의 추가 인증 (휴대폰 본인 인증과 법인 공동인증서 인증서는 함께 설정할 수 없습니다)",
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/VerificationInCreateDocumentRequestDto"
              }
            ]
          },
          "fields": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "title": "TEXT",
                  "$ref": "#/components/schemas/TextFieldInCreateDocumentRequestDto"
                },
                {
                  "title": "CHECKBOX",
                  "$ref": "#/components/schemas/CheckboxFieldInCreateDocumentRequestDto"
                },
                {
                  "title": "SIGNATURE",
                  "$ref": "#/components/schemas/SignatureFieldInCreateDocumentRequestDto"
                },
                {
                  "title": "SIGNING_DATE",
                  "$ref": "#/components/schemas/SigningDateInCreateDocumentRequestDto"
                },
                {
                  "title": "IMAGE",
                  "$ref": "#/components/schemas/ImageFieldInCreateDocumentRequestDto"
                },
                {
                  "title": "DATE",
                  "$ref": "#/components/schemas/DateFieldInCreateDocumentRequestDto"
                },
                {
                  "title": "DROPDOWN",
                  "$ref": "#/components/schemas/DropdownFieldInCreateDocumentRequestDto"
                },
                {
                  "title": "NAME",
                  "$ref": "#/components/schemas/NameFieldInCreateDocumentRequestDto"
                },
                {
                  "title": "COMPANY_NAME",
                  "$ref": "#/components/schemas/CompanyNameFieldInCreateDocumentRequestDto"
                },
                {
                  "title": "ADDRESS",
                  "$ref": "#/components/schemas/AddressFieldInCreateDocumentRequestDto"
                }
              ]
            },
            "description": "참여자 필드 정보 (VIEWER 타입 참여자는 필드를 가질 수 없음)",
            "default": []
          },
          "checkboxFieldGroups": {
            "description": "체크박스 그룹",
            "default": [],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CheckboxGroupInCreateDocumentRequestDto"
            }
          }
        },
        "required": [
          "name",
          "signingOrder",
          "signingMethod"
        ]
      },
      "ImageFieldInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "데이터 라벨"
          },
          "type": {
            "type": "string",
            "description": "필드 타입 (IMAGE로 요청해야 합니다)",
            "default": "IMAGE",
            "example": "IMAGE"
          },
          "required": {
            "type": "boolean",
            "description": "필수 여부",
            "default": true
          },
          "size": {
            "description": "입력란 크기",
            "allOf": [
              {
                "$ref": "#/components/schemas/SizeInCreateDocumentRequestDto"
              }
            ]
          },
          "position": {
            "description": "입력란의 위치",
            "allOf": [
              {
                "$ref": "#/components/schemas/PositionInCreateDocumentRequestDto"
              }
            ]
          },
          "conditionalRule": {
            "description": "조건부 표시 규칙. 조건이 성립할 때만 이 입력란을 서명자에게 보여줍니다.",
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "type",
          "size",
          "position"
        ]
      },
      "DateFieldInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "데이터 라벨",
            "minLength": 1,
            "maxLength": 100,
            "example": "기타사항"
          },
          "type": {
            "type": "string",
            "description": "필드 타입 (DATE로 요청해야 합니다)",
            "default": "DATE",
            "example": "DATE"
          },
          "required": {
            "type": "boolean",
            "description": "필수 여부",
            "default": true
          },
          "size": {
            "description": "입력란의 크기",
            "allOf": [
              {
                "$ref": "#/components/schemas/SizeInCreateDocumentRequestDto"
              }
            ]
          },
          "position": {
            "description": "입력란의 위치",
            "allOf": [
              {
                "$ref": "#/components/schemas/PositionInCreateDocumentRequestDto"
              }
            ]
          },
          "textStyle": {
            "description": "텍스트 스타일",
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldStyleInCreateDocumentRequestDto"
              }
            ]
          },
          "displayFormat": {
            "type": "string",
            "description": "날짜 표기 형식",
            "enum": [
              "YYYY-MM-DD",
              "YYYY/DD/MM",
              "YYYY.MM.DD",
              "YYYYMMDD",
              "YYYY년 MM월 DD일",
              "DD-MM-YYYY",
              "DD/MM/YYYY",
              "DD.MM.YYYY",
              "DDMMYYYY",
              "DD일 MM월 YYYY년",
              "MM-DD-YYYY",
              "MM/DD/YYYY",
              "MM.DD.YYYY",
              "MMDDYYYY",
              "MM월 DD일 YYYY년",
              "YYYY/MM/DD",
              "YYYY-DD-MM",
              "YYYY.DD.MM",
              "YYYYDDMM",
              "YYYY년 DD일 MM월",
              "YY-MM-DD",
              "YY/MM/DD",
              "YY.MM.DD",
              "YYMMDD",
              "YY년 MM월 DD일",
              "DD-MM-YY",
              "DD/MM/YY",
              "DD.MM.YY",
              "DDMMYY",
              "DD일 MM월 YY년",
              "MM-DD-YY",
              "MM/DD/YY",
              "MM.DD.YY",
              "MMDDYY",
              "MM월 DD일 YY년",
              "YY-DD-MM",
              "YY/DD/MM",
              "YY.DD.MM",
              "YYDDMM",
              "YY년 DD일 MM월"
            ],
            "example": "YYYY-MM-DD"
          },
          "prefilledValue": {
            "type": "string",
            "nullable": true,
            "description": "사전 입력값 (ISO 8601 형식)",
            "default": null
          },
          "conditionalRule": {
            "description": "조건부 표시 규칙. 조건이 성립할 때만 이 입력란을 서명자에게 보여줍니다.",
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "type",
          "size",
          "position",
          "textStyle",
          "displayFormat"
        ]
      },
      "DropdownFieldInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "데이터 라벨",
            "minLength": 1,
            "maxLength": 100,
            "example": "기타사항"
          },
          "type": {
            "type": "string",
            "description": "필드 타입 (DROPDOWN으로 요청해야 합니다)",
            "default": "DROPDOWN",
            "example": "DROPDOWN"
          },
          "required": {
            "type": "boolean",
            "description": "필수 여부",
            "default": true
          },
          "size": {
            "description": "입력란 크기, 입력란 크기가 텍스트 크기보다 작은 경우, 예상치 못한 동작이 발생될 수 있습니다. 충분한 width를 지정해주세요.",
            "allOf": [
              {
                "$ref": "#/components/schemas/SizeInCreateDocumentRequestDto"
              }
            ]
          },
          "position": {
            "description": "입력란의 위치",
            "allOf": [
              {
                "$ref": "#/components/schemas/PositionInCreateDocumentRequestDto"
              }
            ]
          },
          "options": {
            "type": "array",
            "description": "드롭다운 옵션 목록",
            "items": {
              "$ref": "#/components/schemas/DropdownOptionInCreateDocumentRequestDto"
            },
            "minItems": 1,
            "maxItems": 100
          },
          "textStyle": {
            "description": "텍스트 스타일",
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldStyleInCreateDocumentRequestDto"
              }
            ]
          },
          "prefilledValue": {
            "type": "string",
            "nullable": true,
            "description": "사전 입력값",
            "default": null
          },
          "conditionalRule": {
            "description": "조건부 표시 규칙. 조건이 성립할 때만 이 입력란을 서명자에게 보여줍니다.",
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "type",
          "size",
          "position",
          "options",
          "textStyle"
        ]
      },
      "DropdownOptionInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "드롭다운 옵션 값",
            "minLength": 1,
            "maxLength": 50
          }
        },
        "required": [
          "value"
        ]
      },
      "NameFieldInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "데이터 라벨",
            "minLength": 1,
            "maxLength": 100,
            "example": "기타사항"
          },
          "type": {
            "type": "string",
            "description": "필드 타입 (NAME으로 요청해야 합니다)",
            "default": "NAME",
            "example": "NAME"
          },
          "required": {
            "type": "boolean",
            "description": "필수 여부",
            "default": true
          },
          "size": {
            "description": "입력란 크기",
            "allOf": [
              {
                "$ref": "#/components/schemas/SizeInCreateDocumentRequestDto"
              }
            ]
          },
          "position": {
            "description": "입력란의 위치",
            "allOf": [
              {
                "$ref": "#/components/schemas/PositionInCreateDocumentRequestDto"
              }
            ]
          },
          "textStyle": {
            "description": "텍스트 스타일",
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldStyleInCreateDocumentRequestDto"
              }
            ]
          },
          "conditionalRule": {
            "description": "조건부 표시 규칙. 조건이 성립할 때만 이 입력란을 서명자에게 보여줍니다.",
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "type",
          "size",
          "position",
          "textStyle"
        ]
      },
      "CompanyNameFieldInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "데이터 라벨",
            "minLength": 1,
            "maxLength": 100,
            "example": "기타사항"
          },
          "type": {
            "type": "string",
            "description": "필드 타입 (COMPANY_NAME으로 요청해야 합니다)",
            "default": "COMPANY_NAME",
            "example": "COMPANY_NAME"
          },
          "required": {
            "type": "boolean",
            "description": "필수 여부",
            "default": true
          },
          "size": {
            "description": "입력란 크기",
            "allOf": [
              {
                "$ref": "#/components/schemas/SizeInCreateDocumentRequestDto"
              }
            ]
          },
          "position": {
            "description": "입력란의 위치",
            "allOf": [
              {
                "$ref": "#/components/schemas/PositionInCreateDocumentRequestDto"
              }
            ]
          },
          "textStyle": {
            "description": "텍스트 스타일",
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldStyleInCreateDocumentRequestDto"
              }
            ]
          },
          "prefilledValue": {
            "type": "string",
            "nullable": true,
            "description": "사전 입력값",
            "default": null
          },
          "conditionalRule": {
            "description": "조건부 표시 규칙. 조건이 성립할 때만 이 입력란을 서명자에게 보여줍니다.",
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "type",
          "size",
          "position",
          "textStyle"
        ]
      },
      "AddressPrefilledValueInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "address1": {
            "type": "string",
            "description": "기본 주소"
          },
          "address2": {
            "type": "string",
            "description": "상세 주소",
            "nullable": true
          },
          "city": {
            "type": "string",
            "description": "시군구",
            "nullable": true
          },
          "province": {
            "type": "string",
            "description": "도시"
          },
          "zip": {
            "type": "string",
            "description": "우편번호"
          },
          "country": {
            "type": "string",
            "description": "나라",
            "enum": [
              "KR"
            ]
          }
        },
        "required": [
          "address1",
          "province",
          "zip",
          "country"
        ]
      },
      "AddressFieldInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "dataLabel": {
            "type": "string",
            "description": "데이터 라벨",
            "minLength": 1,
            "maxLength": 100,
            "example": "기타사항"
          },
          "type": {
            "type": "string",
            "description": "필드 타입 (ADDRESS로 요청해야 합니다)",
            "default": "ADDRESS",
            "example": "ADDRESS"
          },
          "required": {
            "type": "boolean",
            "description": "필수 여부",
            "default": true
          },
          "size": {
            "description": "입력란 크기",
            "allOf": [
              {
                "$ref": "#/components/schemas/SizeInCreateDocumentRequestDto"
              }
            ]
          },
          "position": {
            "description": "입력란의 위치",
            "allOf": [
              {
                "$ref": "#/components/schemas/PositionInCreateDocumentRequestDto"
              }
            ]
          },
          "textStyle": {
            "description": "텍스트 스타일",
            "allOf": [
              {
                "$ref": "#/components/schemas/TextFieldStyleInCreateDocumentRequestDto"
              }
            ]
          },
          "prefilledValue": {
            "nullable": true,
            "description": "사전 입력값",
            "default": null,
            "allOf": [
              {
                "$ref": "#/components/schemas/AddressPrefilledValueInCreateDocumentRequestDto"
              }
            ]
          },
          "conditionalRule": {
            "description": "조건부 표시 규칙. 조건이 성립할 때만 이 입력란을 서명자에게 보여줍니다.",
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ConditionalRuleInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "type",
          "size",
          "position",
          "textStyle"
        ]
      },
      "AuditTrailRequestDto": {
        "type": "object",
        "properties": {
          "locales": {
            "type": "array",
            "description": "감사 추적 인증서 제공 언어",
            "example": [
              "ko",
              "en"
            ],
            "default": [
              "ko"
            ],
            "items": {
              "type": "string",
              "enum": [
                "ko",
                "en"
              ]
            }
          }
        },
        "required": [
          "locales"
        ]
      },
      "IntegritySealPosition": {
        "type": "string",
        "enum": [
          "TOP_LEFT",
          "TOP_RIGHT",
          "BOTTOM_LEFT",
          "BOTTOM_RIGHT"
        ],
        "description": "진본 증명 도장 위치"
      },
      "IntegritySealInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "진본 증명 도장 활성화 여부",
            "default": false
          },
          "position": {
            "description": "진본 증명 도장 위치",
            "nullable": true,
            "example": "TOP_RIGHT",
            "allOf": [
              {
                "$ref": "#/components/schemas/IntegritySealPosition"
              }
            ]
          }
        },
        "required": [
          "enabled",
          "position"
        ]
      },
      "DocumentSealInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "integritySeal": {
            "description": "진본 증명 도장 설정",
            "allOf": [
              {
                "$ref": "#/components/schemas/IntegritySealInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "integritySeal"
        ]
      },
      "CoordinatePositionInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number",
            "description": "입력란의 가로 좌표",
            "minimum": 0,
            "maximum": 1
          },
          "y": {
            "type": "number",
            "description": "입력란의 세로 좌표",
            "minimum": 0,
            "maximum": 1
          },
          "page": {
            "type": "integer",
            "description": "입력란이 위치할 페이지",
            "minimum": 1
          }
        },
        "required": [
          "x",
          "y",
          "page"
        ]
      },
      "AnchorOffsetInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number",
            "description": "anchor 기준 가로 오프셋 (양수: 우측, 음수: 좌측)",
            "minimum": -1,
            "maximum": 1
          },
          "y": {
            "type": "number",
            "description": "anchor 기준 세로 오프셋 (양수: 하단, 음수: 상단)",
            "minimum": -1,
            "maximum": 1
          }
        },
        "required": [
          "x",
          "y"
        ]
      },
      "AnchorInPositionDto": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "PDF에서 찾을 anchor 텍스트 (1~200자, 특수문자 허용, 대소문자 구분)",
            "minLength": 1,
            "maxLength": 200
          },
          "offset": {
            "description": "anchor 기준 오프셋 (미지정 시 anchor text 위치에 정렬)",
            "allOf": [
              {
                "$ref": "#/components/schemas/AnchorOffsetInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "text"
        ]
      },
      "AnchorPositionInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "anchor": {
            "description": "anchor 기반 필드 배치 설정. PDF 내 해당 텍스트 위치에 필드가 자동 배치됩니다.",
            "allOf": [
              {
                "$ref": "#/components/schemas/AnchorInPositionDto"
              }
            ]
          }
        },
        "required": [
          "anchor"
        ]
      },
      "FileInfoInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "fileId": {
            "type": "string",
            "description": "파일 업로드 API 를 통해 얻은 파일 ID"
          },
          "token": {
            "type": "string",
            "description": "파일 업로드 API 를 통해 얻은 파일 토큰"
          },
          "name": {
            "type": "string",
            "example": "첨부파일_1",
            "description": "첨부파일명 (확장자 제외, 특수문자 /?<>\\\":*|₩ 이 포함된 이름은 사용할 수 없습니다)",
            "minLength": 1,
            "maxLength": 100
          }
        },
        "required": [
          "fileId",
          "token",
          "name"
        ]
      },
      "RequesterAttachmentInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "example": "첨부파일 1",
            "description": "첨부파일 이름 (특수문자 /?<>\\\":*|₩ 이 포함된 이름은 사용할 수 없습니다)",
            "minLength": 1,
            "maxLength": 100
          },
          "file": {
            "description": "파일 정보",
            "example": {
              "fileId": "2752f600-c6fc-11ed-b2e3-b5476bd20f82",
              "token": "01GVZ3BGGT2D9BSEVXJJ2V00SP",
              "name": "첨부파일_1"
            },
            "allOf": [
              {
                "$ref": "#/components/schemas/FileInfoInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "name",
          "file"
        ]
      },
      "CarbonCopy": {
        "type": "object",
        "properties": {
          "contact": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "example": "01000000000 or example@modusign.co.kr",
            "description": "참조자 연락처 (이메일 주소 또는 휴대전화번호)"
          },
          "locale": {
            "type": "string",
            "enum": [
              "ko",
              "en",
              "zh-CN",
              "ja",
              "vi",
              "fr"
            ],
            "example": "ko",
            "description": "참조자 언어"
          }
        },
        "required": [
          "contact"
        ]
      },
      "MetadataInCreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40,
            "description": "메타데이터 키"
          },
          "value": {
            "type": "string",
            "maxLength": 80,
            "description": "메타데이터 값"
          }
        },
        "required": [
          "key"
        ]
      },
      "CreateDocumentRequestDto": {
        "type": "object",
        "properties": {
          "labelIds": {
            "nullable": true,
            "maxItems": 5,
            "description": "문서 생성 시 문서가 적용 될 라벨 ID List",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "folderId": {
            "type": "string",
            "nullable": true,
            "minLength": 1,
            "maxLength": 36,
            "description": "(deprecated) 문서 생성 시 문서가 보관 될 폴더의 ID (labelIds 로 대체)",
            "deprecated": true
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "example": "근로계약서",
            "description": "문서의 제목"
          },
          "file": {
            "description": "문서의 파일 데이터",
            "oneOf": [
              {
                "title": "BASE64",
                "$ref": "#/components/schemas/Base64DocumentFileInDocumentRequestDto"
              },
              {
                "title": "FILE_REF",
                "$ref": "#/components/schemas/FileRefDocumentFileInDocumentRequestDto"
              }
            ]
          },
          "fileOpenPassword": {
            "type": "string",
            "example": "thisIsPassword",
            "nullable": true,
            "minLength": 6,
            "maxLength": 32,
            "description": "완료문서(.pdf) 비밀번호"
          },
          "requesterInputs": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "title": "TEXT",
                  "$ref": "#/components/schemas/TextInCreateDocumentRequestDto"
                },
                {
                  "title": "CHECKBOX",
                  "$ref": "#/components/schemas/CheckboxInCreateDocumentRequestDto"
                },
                {
                  "title": "IMAGE",
                  "$ref": "#/components/schemas/ImageInCreateDocumentRequestDto"
                }
              ]
            },
            "description": "요청자의 입력 (이미지의 개수는 최대 7개)",
            "default": []
          },
          "participants": {
            "description": "참여자 정보 (참여자의 필드 개수 총합은 최대 2000개까지 지원합니다)",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParticipantInCreateDocumentRequestDto"
            }
          },
          "requesterAttachments": {
            "description": "요청자 첨부파일 정보. 서명자 첨부파일과 합산하여 최대 30개까지 첨부 가능",
            "default": [],
            "maxItems": 30,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RequesterAttachmentInCreateDocumentRequestDto"
            }
          },
          "carbonCopies": {
            "description": "참조자 연락처 정보",
            "default": [],
            "maxItems": 30,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CarbonCopy"
            }
          },
          "auditTrail": {
            "description": "감사추적인증서 파일 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/AuditTrailRequestDto"
              }
            ]
          },
          "metadatas": {
            "maxItems": 10,
            "default": [],
            "description": "메타데이터 리스트. 최대 10개까지 등록 가능 \n(응답의 메타데이터는 순서가 보장되지 않습니다)",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetadataInCreateDocumentRequestDto"
            }
          },
          "brandId": {
            "type": "string",
            "description": "브랜드 ID"
          },
          "seal": {
            "description": "문서 봉인 설정",
            "allOf": [
              {
                "$ref": "#/components/schemas/DocumentSealInCreateDocumentRequestDto"
              }
            ]
          }
        },
        "required": [
          "title",
          "file",
          "participants"
        ]
      },
      "SigningDueInDocumentResponseDto": {
        "type": "object",
        "properties": {
          "valid": {
            "type": "boolean",
            "description": "현재 참여 가능 여부"
          },
          "datetime": {
            "format": "date-time",
            "type": "string",
            "description": "참여자의 참여 유효일",
            "nullable": true
          }
        },
        "required": [
          "valid",
          "datetime"
        ]
      },
      "SigningMethodInDocumentResponseDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "EMAIL",
              "KAKAO",
              "SECURE_LINK",
              "IN_PERSON"
            ],
            "description": "참여 수단 종류"
          },
          "value": {
            "type": "string",
            "description": "참여 수단 값"
          }
        },
        "required": [
          "type",
          "value"
        ]
      },
      "SignerInDocumentResponseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "참여자 ID"
          },
          "type": {
            "type": "string",
            "enum": [
              "SIGNER",
              "VIEWER"
            ],
            "description": "참여자 타입"
          },
          "name": {
            "type": "string",
            "description": "참여자 이름"
          },
          "signingOrder": {
            "type": "number",
            "description": "참여자의 참여 순서"
          },
          "signingDue": {
            "description": "참여 기한",
            "allOf": [
              {
                "$ref": "#/components/schemas/SigningDueInDocumentResponseDto"
              }
            ]
          },
          "signingMethod": {
            "description": "참여 수단",
            "allOf": [
              {
                "$ref": "#/components/schemas/SigningMethodInDocumentResponseDto"
              }
            ]
          },
          "locale": {
            "type": "string",
            "enum": [
              "ko",
              "en",
              "zh-CN",
              "ja",
              "vi",
              "fr"
            ],
            "description": "참여자가 사용할 언어"
          }
        },
        "required": [
          "id",
          "type",
          "name",
          "signingOrder",
          "signingDue",
          "signingMethod",
          "locale"
        ]
      },
      "ViewerInDocumentResponseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "참여자 ID"
          },
          "type": {
            "type": "string",
            "enum": [
              "VIEWER"
            ],
            "description": "참여자 타입"
          },
          "name": {
            "type": "string",
            "description": "참여자 이름"
          },
          "signingOrder": {
            "type": "number",
            "description": "참여자의 참여 순서"
          },
          "signingDue": {
            "description": "참여 기한",
            "allOf": [
              {
                "$ref": "#/components/schemas/SigningDueInDocumentResponseDto"
              }
            ]
          },
          "signingMethod": {
            "description": "참여 수단",
            "allOf": [
              {
                "$ref": "#/components/schemas/SigningMethodInDocumentResponseDto"
              }
            ]
          },
          "locale": {
            "type": "string",
            "enum": [
              "ko",
              "en",
              "zh-CN",
              "ja",
              "vi",
              "fr"
            ],
            "description": "참여자가 사용할 언어"
          },
          "manuallyViewing": {
            "type": "boolean",
            "description": "상세 열람 여부"
          }
        },
        "required": [
          "id",
          "type",
          "name",
          "signingOrder",
          "signingDue",
          "signingMethod",
          "locale",
          "manuallyViewing"
        ]
      },
      "RequesterInDocumentResponseDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "요청자 이메일"
          },
          "name": {
            "type": "string",
            "description": "요청자 이름"
          }
        },
        "required": [
          "email",
          "name"
        ]
      },
      "SigningInDocumentResponseDto": {
        "type": "object",
        "properties": {
          "participantId": {
            "type": "string",
            "description": "참여한 참여자 ID"
          },
          "signedAt": {
            "format": "date-time",
            "type": "string",
            "description": "참여한 시간"
          }
        },
        "required": [
          "participantId",
          "signedAt"
        ]
      },
      "AbortInDocumentResponseDto": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "중단 종류:\n* `REJECTION` - 거절됨\n* `SIGNING_CANCELLATION` - 참여 취소됨\n* `REQUEST_CANCELLATION` - 요청 취소됨",
            "enum": [
              "REJECTION",
              "SIGNING_CANCELLATION",
              "REQUEST_CANCELLATION"
            ]
          },
          "message": {
            "type": "string",
            "description": "중단 사유"
          },
          "abortedAt": {
            "format": "date-time",
            "type": "string",
            "description": "중단 시점"
          },
          "participantId": {
            "type": "string",
            "nullable": true,
            "description": "중단한 참여자 ID (거절 또는 참여 취소 시)"
          }
        },
        "required": [
          "type",
          "message",
          "abortedAt",
          "participantId"
        ]
      },
      "PdfFileInDocumentResponseDto": {
        "type": "object",
        "properties": {
          "downloadUrl": {
            "type": "string",
            "description": "다운로드 링크(유효시간: 10분)"
          }
        },
        "required": [
          "downloadUrl"
        ]
      },
      "AuditTrailLocale": {
        "type": "string",
        "enum": [
          "ko",
          "en"
        ],
        "description": "감사추적인증서 제공 언어"
      },
      "AuditTrailInDocumentResponseDto": {
        "type": "object",
        "properties": {
          "downloadUrl": {
            "type": "string",
            "description": "다운로드 링크(유효시간: 10분)"
          },
          "locales": {
            "type": "array",
            "description": "감사추적인증서 제공 언어",
            "items": {
              "$ref": "#/components/schemas/AuditTrailLocale"
            }
          }
        },
        "required": [
          "downloadUrl",
          "locales"
        ]
      },
      "IntegritySealInDocumentResponseDto": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "진본 증명 도장 활성화 여부",
            "default": false
          },
          "position": {
            "description": "진본 증명 도장 위치",
            "nullable": true,
            "example": "TOP_RIGHT",
            "allOf": [
              {
                "$ref": "#/components/schemas/IntegritySealPosition"
              }
            ]
          }
        },
        "required": [
          "enabled",
          "position"
        ]
      },
      "DocumentSealInDocumentResponseDto": {
        "type": "object",
        "properties": {
          "integritySeal": {
            "description": "진본 증명 도장 설정",
            "allOf": [
              {
                "$ref": "#/components/schemas/IntegritySealInDocumentResponseDto"
              }
            ]
          }
        },
        "required": [
          "integritySeal"
        ]
      },
      "MetadataDtoInDocumentResponseDto": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "description": "메타 데이터 키"
          },
          "value": {
            "type": "string",
            "description": "메타 데이터 값"
          }
        },
        "required": [
          "key",
          "value"
        ]
      },
      "CreateDocumentResponseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "문서 ID"
          },
          "title": {
            "type": "string",
            "description": "문서 제목"
          },
          "status": {
            "type": "string",
            "description": "문서 상태:\n* `DRAFT` - 작성 중* `SCHEDULED` - 전송 예약 중\n* `ON_GOING` - 서명/열람 진행 중\n* `MODIFYING` - 수정 중\n* `APPROVAL_PENDING` - 결재 대기 중\n* `ON_PROCESSING` - 문서 처리 중\n* `PROCESSING_FAILED` - 문서 처리 실패\n* `ABORTED` - 서명/열람 중단됨\n* `COMPLETED` - 모든 서명/열람 완료",
            "enum": [
              "ON_GOING",
              "MODIFYING",
              "APPROVAL_PENDING",
              "DRAFT",
              "ON_PROCESSING",
              "PROCESSING_FAILED",
              "ABORTED",
              "COMPLETED",
              "SCHEDULED"
            ]
          },
          "requester": {
            "description": "문서 요청자 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/RequesterInDocumentResponseDto"
              }
            ]
          },
          "participants": {
            "type": "array",
            "description": "참여자 리스트",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/SignerInDocumentResponseDto",
                  "title": "서명자 (SIGNER)",
                  "description": "서명자"
                },
                {
                  "$ref": "#/components/schemas/ViewerInDocumentResponseDto",
                  "title": "열람자 (VIEWER)",
                  "description": "열람자"
                }
              ]
            }
          },
          "currentSigningOrder": {
            "type": "integer",
            "description": "현재 참여 차례"
          },
          "signings": {
            "description": "입력된 서명, 열람 완료된 참여자 리스트",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SigningInDocumentResponseDto"
            }
          },
          "accessibleByParticipant": {
            "type": "boolean",
            "description": "문서 중단 시 요청자 외의 참여자들의 문서 파일 접근 가능 여부"
          },
          "abort": {
            "nullable": true,
            "description": "문서의 중단 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/AbortInDocumentResponseDto"
              }
            ]
          },
          "updatedAt": {
            "type": "string",
            "format": "date",
            "description": "마지막 업데이트 시간"
          },
          "createdAt": {
            "type": "string",
            "format": "date",
            "description": "문서 생성 시간"
          },
          "startedAt": {
            "type": "string",
            "format": "date",
            "description": "참여 요청 시간",
            "nullable": true
          },
          "file": {
            "nullable": true,
            "description": "문서 PDF 파일 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/PdfFileInDocumentResponseDto"
              }
            ]
          },
          "auditTrail": {
            "nullable": true,
            "description": "감사추적인증서 파일 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/AuditTrailInDocumentResponseDto"
              }
            ]
          },
          "seal": {
            "description": "문서 봉인 설정 정보",
            "allOf": [
              {
                "$ref": "#/components/schemas/DocumentSealInDocumentResponseDto"
              }
            ]
          },
          "metadatas": {
            "description": "메타데이터 리스트(응답의 메타데이터는 순서가 보장되지 않습니다)",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MetadataDtoInDocumentResponseDto"
            }
          },
          "brandId": {
            "type": "string",
            "description": "브랜드 ID"
          }
        },
        "required": [
          "id",
          "title",
          "status",
          "requester",
          "participants",
          "currentSigningOrder",
          "signings",
          "accessibleByParticipant",
          "abort",
          "updatedAt",
          "createdAt",
          "startedAt",
          "file",
          "auditTrail",
          "seal",
          "metadatas"
        ]
      }
    }
  }
}
```