{"openapi":"3.1.0","info":{"title":"esign — проверка ЭП (ГОСТ)","description":"Техническая проверка отсоединённой российской электронной подписи (ГОСТ Р 34.10-2012, CMS/CAdES detached) через openssl + gost-engine. НЕ юридически значимо — для этого нужен КриптоПро/Госуслуги.","version":"0.9.6"},"paths":{"/":{"get":{"summary":"Index","operationId":"index__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/help":{"get":{"summary":"Help Page","operationId":"help_page_help_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/release-notes":{"get":{"summary":"Release Notes Page","operationId":"release_notes_page_release_notes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/release-notes":{"get":{"summary":"Release Notes Md","operationId":"release_notes_md_api_release_notes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/healthz":{"get":{"summary":"Healthz","operationId":"healthz_api_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Healthz Api Healthz Get"}}}}}}},"/api/version":{"get":{"summary":"Version","operationId":"version_api_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Version Api Version Get"}}}}}}},"/api/verify":{"post":{"summary":"Verify Multipart","operationId":"verify_multipart_api_verify_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_verify_multipart_api_verify_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/verify/base64":{"post":{"summary":"Verify B64","operationId":"verify_b64_api_verify_base64_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyBase64Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/verify/batch":{"post":{"summary":"Verify Batch","description":"Пакетная проверка: список {signature_b64, document_b64?, filename?} → список результатов.","operationId":"verify_batch_api_verify_batch_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/verify/batch-upload":{"post":{"summary":"Verify Batch Upload","description":"Пакетная проверка загрузкой: набор файлов (документ + .sig рядом) или ZIP-архив.\nСопоставляет пары по имени, PDF/совмещённые — самодостаточны.","operationId":"verify_batch_upload_api_verify_batch_upload_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_verify_batch_upload_api_verify_batch_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"BatchItem":{"properties":{"signature_b64":{"type":"string","title":"Signature B64","description":"Подпись (base64)"},"document_b64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document B64","description":"Документ (base64); опустить для attached-подписи"},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename","description":"Имя файла (для сопоставления в ответе)"}},"type":"object","required":["signature_b64"],"title":"BatchItem"},"BatchRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BatchItem"},"type":"array","title":"Items","description":"Список документ+подпись для проверки"}},"type":"object","required":["items"],"title":"BatchRequest"},"BatchResult":{"properties":{"count":{"type":"integer","title":"Count"},"results":{"items":{"$ref":"#/components/schemas/BatchResultItem"},"type":"array","title":"Results"}},"type":"object","required":["count"],"title":"BatchResult"},"BatchResultItem":{"properties":{"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename"},"result":{"anyOf":[{"$ref":"#/components/schemas/VerifyResult"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","title":"BatchResultItem"},"Body_verify_batch_upload_api_verify_batch_upload_post":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files","description":"Несколько файлов или один .zip-архив"}},"type":"object","required":["files"],"title":"Body_verify_batch_upload_api_verify_batch_upload_post"},"Body_verify_multipart_api_verify_post":{"properties":{"signature":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Signature","description":"Подпись .sig/.p7s/.sgn (detached/attached) или PDF с встроенной подписью (PAdES)"},"document":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Document","description":"Оригинал документа (для detached). Не нужен для attached/PAdES"}},"type":"object","title":"Body_verify_multipart_api_verify_post"},"ChainInfo":{"properties":{"trusted":{"type":"boolean","title":"Trusted","description":"Цепочка построена до доверенного корня из trust store","default":false},"path":{"items":{"type":"string"},"type":"array","title":"Path","description":"Путь цепочки (CN): от подписанта к корню"},"detail":{"type":"string","title":"Detail","default":""}},"type":"object","title":"ChainInfo"},"CheckResult":{"properties":{"ok":{"type":"boolean","title":"Ok"},"detail":{"type":"string","title":"Detail","default":""}},"type":"object","required":["ok"],"title":"CheckResult"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"RevocationInfo":{"properties":{"status":{"type":"string","title":"Status","description":"good | revoked | unknown | unreachable | no_info | disabled","default":"no_info"},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Method","description":"ocsp | crl — каким способом проверено"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At","description":"Дата отзыва (если revoked)"},"detail":{"type":"string","title":"Detail","default":""}},"type":"object","title":"RevocationInfo"},"SignerInfo":{"properties":{"common_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Common Name","description":"CN — ФИО или название организации"},"surname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Surname"},"given_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Given Name"},"inn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inn","description":"ИНН (ОГРН для юр.лиц) из ГОСТ-OID"},"inn_le":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inn Le","description":"ИНН юридического лица"},"snils":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snils","description":"СНИЛС"},"ogrn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ogrn"},"ogrnip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ogrnip"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization"},"position":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Position"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"issuer_cn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issuer Cn","description":"CN удостоверяющего центра"},"serial":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serial","description":"Серийный номер сертификата (hex)"},"valid_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid From"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid To"},"expired_at_check":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Expired At Check","description":"Истёк ли серт на момент проверки"},"signed_within_validity":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Signed Within Validity","description":"Время подписания попадает в период действия сертификата (по доверенной метке времени, иначе по signing_time)"},"crypto_ok":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Crypto Ok","description":"Криптографическая подпись этого подписанта валидна"},"certificate_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Certificate Valid","description":"Сертификат не истёк на момент проверки"},"algorithm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Algorithm","description":"Алгоритм подписи (GOST R 34.10-2012 256/512)"},"signed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Signed At","description":"signingTime из подписанных атрибутов"},"chain":{"anyOf":[{"$ref":"#/components/schemas/ChainInfo"},{"type":"null"}],"description":"Цепочка доверия (слой 3)"},"revocation":{"anyOf":[{"$ref":"#/components/schemas/RevocationInfo"},{"type":"null"}],"description":"Отзыв CRL/OCSP (слой 4)"},"timestamp":{"anyOf":[{"$ref":"#/components/schemas/TimestampInfo"},{"type":"null"}],"description":"Метка времени TSP (слой 5)"}},"type":"object","title":"SignerInfo"},"TimestampInfo":{"properties":{"present":{"type":"boolean","title":"Present","description":"Есть ли в подписи метка времени (CAdES-T)","default":false},"gen_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Gen Time","description":"Доверенное время подписания (genTime TSA)"},"tsa":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tsa","description":"CN службы меток времени (TSA)"},"serial":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serial","description":"Серийный номер токена (hex)"},"hash_algorithm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hash Algorithm"},"token_signature_ok":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Token Signature Ok","description":"Подпись токена TSA валидна"},"imprint_match":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Imprint Match","description":"messageImprint совпал с подписью"},"detail":{"type":"string","title":"Detail","default":""}},"type":"object","title":"TimestampInfo"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyBase64Request":{"properties":{"signature_b64":{"type":"string","title":"Signature B64","description":"Подпись .sig/.p7s (base64)"},"document_b64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document B64","description":"Документ (base64); опустить для attached"},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename","description":"Имя документа (для логов, опционально)"}},"type":"object","required":["signature_b64"],"title":"VerifyBase64Request","description":"server-to-server: файлы в base64. document_b64 опционален (для attached-подписи)."},"VerifyResult":{"properties":{"valid":{"type":"boolean","title":"Valid","description":"True только при verdict='valid' (полностью действительна на сегодня)."},"verdict":{"type":"string","title":"Verdict","description":"valid — действительна (зелёный); warning — крипто верно, но сертификат истёк/ещё не действует (жёлтый): была действительна на момент подписания, но не на сегодня; invalid — недействительна: подпись не сошлась или сертификат отозван (красный).","default":"invalid"},"summary":{"type":"string","title":"Summary","description":"Человекочитаемый итог для показа пользователю","default":""},"checks":{"additionalProperties":{"$ref":"#/components/schemas/CheckResult"},"type":"object","title":"Checks","description":"Общие проверки контейнера: format, signature. Детали по подписантам — в signers[]."},"signers":{"items":{"$ref":"#/components/schemas/SignerInfo"},"type":"array","title":"Signers","description":"Все подписанты документа. Каждый несёт свои chain/revocation/timestamp."},"signers_count":{"type":"integer","title":"Signers Count","description":"Число подписантов в контейнере","default":0},"signature_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signature Format","description":"CMS / CAdES detached / attached"},"chain":{"anyOf":[{"$ref":"#/components/schemas/ChainInfo"},{"type":"null"}],"description":"Цепочка первого подписанта (зеркало signers[0])"},"revocation":{"anyOf":[{"$ref":"#/components/schemas/RevocationInfo"},{"type":"null"}],"description":"Отзыв первого подписанта (зеркало signers[0])"},"timestamp":{"anyOf":[{"$ref":"#/components/schemas/TimestampInfo"},{"type":"null"}],"description":"Метка времени первого подписанта (зеркало signers[0])"},"algorithm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Algorithm","description":"Алгоритм первого подписанта (зеркало)"},"signed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Signed At","description":"signingTime первого подписанта (зеркало)"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"engine":{"type":"string","title":"Engine","description":"Движок проверки","default":"openssl + gost-engine (Reference implementation)"},"disclaimer":{"type":"string","title":"Disclaimer","description":"Юридический дисклеймер — обязательно показывать в UI и API-клиентам","default":"Техническая проверка целостности и криптографической подписи. НЕ является юридически значимым заключением (движок не сертифицирован ФСБ). Для юридически значимой проверки используйте КриптоПро/Госуслуги."}},"type":"object","required":["valid"],"title":"VerifyResult"}}}}