---
updatedAt: 2026-07-15T16:35:24.000Z
agentTools:
  projectIndex: https://developers.modusign.co.kr/llms.txt
---

# 내용 수정 완료

임시저장된 변경점을 원본에 확정 적용합니다. 일반 문서는 진행 중(ON_GOING), 내부결재를 거쳐 요청된 문서는 결재중(APPROVAL_PENDING) 상태로 전이됩니다.

# OpenAPI definition

```json
{
  "openapi": "3.0.0",
  "paths": {
    "/documents/{documentId}/complete-modification": {
      "post": {
        "description": "임시저장된 변경점을 원본에 확정 적용합니다. 일반 문서는 진행 중(ON_GOING), 내부결재를 거쳐 요청된 문서는 결재중(APPROVAL_PENDING) 상태로 전이됩니다.",
        "operationId": "DocumentController_completeModification",
        "parameters": [
          {
            "name": "documentId",
            "required": true,
            "in": "path",
            "description": "문서 ID",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompleteModificationRequestDto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompleteModificationResponseDto"
                }
              }
            }
          },
          "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"
                }
              }
            }
          }
        },
        "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": {
      "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"
        ]
      },
      "CompleteModificationRequestDto": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500,
            "description": "수정 사유"
          }
        },
        "required": [
          "reason"
        ]
      },
      "CompleteModificationResponseDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "문서 ID"
          },
          "status": {
            "type": "string",
            "description": "수정 완료 후 문서 상태. 일반 문서는 ON_GOING, 내부결재를 거쳐 요청된 문서는 결재 대기 중 APPROVAL_PENDING 상태로 변경되며 결재 승인시 ON_GOING으로 전환됩니다.",
            "enum": [
              "ON_GOING",
              "APPROVAL_PENDING"
            ]
          }
        },
        "required": [
          "id",
          "status"
        ]
      }
    }
  }
}
```