{"openapi":"3.1.0","info":{"title":"SignDeal API","version":"v1","description":"싸인딜 REST API, OAuth, MCP discovery 명세입니다. 실제 데이터 접근은 OAuth scope 또는 API key 로 보호됩니다."},"servers":[{"url":"https://api.signdeal.kr","description":"REST API and OAuth-adjacent API endpoints"},{"url":"https://mcp.signdeal.kr","description":"MCP Streamable HTTP endpoint host"},{"url":"https://app.signdeal.kr","description":"Human web app host"}],"externalDocs":{"description":"AI Documentation","url":"https://signdeal.kr/docs/ai"},"security":[{"OAuth2":["contract:read","contract:draft","contract:send","document:read"]},{"ApiKeyBearer":[]}],"components":{"securitySchemes":{"OAuth2":{"type":"oauth2","flows":{"authorizationCode":{"authorizationUrl":"https://auth.signdeal.kr/oauth/authorize","tokenUrl":"https://auth.signdeal.kr/oauth/token","scopes":{"contract:read":"계약 목록과 상태를 조회합니다.","contract:draft":"계약 초안 생성, 서명자 추가, 서명필드 배치를 수행합니다.","contract:send":"명시적 승인 후 서명 요청을 발송합니다.","document:read":"체결 완료 문서 메타데이터와 다운로드 URL을 조회합니다."}}}},"ApiKeyBearer":{"type":"http","scheme":"bearer","bearerFormat":"sk_live or oat"}}},"paths":{"/healthz":{"get":{"summary":"Health check","responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/mcp":{"post":{"summary":"MCP Streamable HTTP JSON-RPC endpoint","security":[{"OAuth2":["contract:read","contract:draft","contract:send","document:read"]},{"ApiKeyBearer":[]}],"responses":{"200":{"description":"JSON-RPC response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"OAuth protected resource challenge","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/contracts":{"get":{"summary":"List contracts","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}}],"responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}},"post":{"summary":"Create contract draft metadata","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}}],"responses":{"201":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/contracts/{id}":{"get":{"summary":"Get contract detail","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"404":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/contracts/{id}/signers":{"post":{"summary":"Add signer","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/contracts/{id}:ready":{"post":{"summary":"Mark draft ready","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/contracts/{id}:send":{"post":{"summary":"Dry-run or send signature request","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"402":{"description":"Payment required","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/contracts/{id}:void":{"post":{"summary":"Void sent contract","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/contracts/{id}/document":{"get":{"summary":"Get completed document metadata","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/signers/{sid}/verify:start":{"post":{"summary":"Start signer verification","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}},{"name":"sid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/signers/{sid}/verify:check":{"post":{"summary":"Check signer verification","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}},{"name":"sid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/signers/{sid}/sign":{"post":{"summary":"Record signer signature","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}},{"name":"sid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/signers/{sid}/decline":{"post":{"summary":"Decline signing request","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}},{"name":"sid","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/templates":{"get":{"summary":"List templates","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}}],"responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}},"post":{"summary":"Create template","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}}],"responses":{"201":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/registry/tools":{"get":{"summary":"Tool registry","responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/registry/tools/{name}":{"get":{"summary":"Tool registry item","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/registry/categories":{"get":{"summary":"Tool categories","responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/approvals":{"get":{"summary":"List HITL approvals","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}}],"responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/approvals/{id}/decide":{"post":{"summary":"Approve or reject HITL request","parameters":[{"name":"X-Org-Id","in":"header","required":false,"description":"선택(인증 아님) — org 는 Bearer 토큰에서 도출됩니다.","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/oauth/authorize":{"get":{"summary":"OAuth authorization endpoint","responses":{"302":{"description":"Login/consent redirect"}}}},"/oauth/token":{"post":{"summary":"OAuth token endpoint","responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/oauth/register":{"post":{"summary":"Dynamic client registration","responses":{"201":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/oauth/revoke":{"post":{"summary":"OAuth token revocation","responses":{"200":{"description":"Revoked or ignored"}}}},"/oauth/introspect":{"post":{"summary":"OAuth token introspection","responses":{"200":{"description":"RFC 7662 active token response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/ai/tools":{"get":{"summary":"AI-readable Tool Registry alias","responses":{"200":{"description":"성공 응답","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}}}}