{"openapi":"3.1.0","info":{"title":"Compliancly.ai Asset Service","description":"Owns scan targets and ownership verification.","version":"0.1.0"},"paths":{"/health":{"get":{"tags":["meta"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/ready":{"get":{"tags":["meta"],"summary":"Ready","operationId":"ready_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/v1/assets":{"get":{"tags":["assets"],"summary":"List Assets","operationId":"list_assets_v1_assets_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetStatus"},{"type":"null"}],"title":"Status"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetType"},{"type":"null"}],"title":"Type"}},{"name":"criticality","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/Criticality"},{"type":"null"}],"title":"Criticality"}},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/Environment"},{"type":"null"}],"title":"Environment"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}},{"name":"owner_user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Owner User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["assets"],"summary":"Create Asset","operationId":"create_asset_v1_assets_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/assets/{asset_id}":{"get":{"tags":["assets"],"summary":"Get Asset","operationId":"get_asset_v1_assets__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["assets"],"summary":"Update Asset","operationId":"update_asset_v1_assets__asset_id__patch","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["assets"],"summary":"Delete Asset","operationId":"delete_asset_v1_assets__asset_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/assets/bulk":{"post":{"tags":["assets"],"summary":"Bulk Update Assets","description":"Apply the same update to many assets in a single transaction.\n\nBody shape:\n  {\n    \"asset_ids\": [\"uuid\", ...],          # max 500\n    \"updates\": {\n      \"criticality\": \"high\",             # optional\n      \"environment\": \"production\",       # optional\n      \"tags\": [\"pci\", \"external\"]        # optional — REPLACES existing tags\n    }\n  }\n\nReturns counts of updated / not_found ids.","operationId":"bulk_update_assets_v1_assets_bulk_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Bulk Update Assets V1 Assets Bulk Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/assets/{asset_id}/upload":{"post":{"tags":["assets"],"summary":"Upload Asset File","description":"Stream a binary artifact (APK/IPA/tarball) to MinIO and link it to the asset.\n\nStreamed end-to-end — no full-file buffering. Aborts as soon as we\ncross the configured byte cap. SHA-256 is computed during the stream.","operationId":"upload_asset_file_v1_assets__asset_id__upload_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_asset_file_v1_assets__asset_id__upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetUploadResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/assets/{asset_id}/verifications":{"post":{"tags":["verification"],"summary":"Start Verification","description":"Generate a verification challenge — returns instructions for the user.","operationId":"start_verification_v1_assets__asset_id__verifications_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerificationCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerificationInstructions"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["verification"],"summary":"List Verifications","operationId":"list_verifications_v1_assets__asset_id__verifications_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VerificationRead"},"title":"Response List Verifications V1 Assets  Asset Id  Verifications Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/assets/{asset_id}/verifications/{verification_id}/check":{"post":{"tags":["verification"],"summary":"Check Verification","description":"Run the live check now.","operationId":"check_verification_v1_assets__asset_id__verifications__verification_id__check_post","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}},{"name":"verification_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Verification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerificationCheckResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/asset-groups":{"get":{"tags":["groups"],"summary":"List Groups","operationId":"list_groups_v1_asset_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AssetGroupRead"},"type":"array","title":"Response List Groups V1 Asset Groups Get"}}}}}},"post":{"tags":["groups"],"summary":"Create Group","operationId":"create_group_v1_asset_groups_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetGroupCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetGroupRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/assets/stats/summary":{"get":{"tags":["stats"],"summary":"Get Stats","operationId":"get_stats_v1_assets_stats_summary_get","parameters":[{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Super-admin only: stats for a specific tenant. Non-super-admins ignore this and see their own tenant.","title":"Tenant Id"},"description":"Super-admin only: stats for a specific tenant. Non-super-admins ignore this and see their own tenant."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/evidence":{"get":{"tags":["evidence"],"summary":"Evidence List","description":"List evidence files. Aggregates the evidence_files table (manual +\nauto-snapshotted) and surfaces a virtual row for each asset artifact.\n\nSupply `linked_finding_id` to retrieve only evidence already attached\nto a specific finding (drives the \"Evidence\" panel on the finding\ndetail page).","operationId":"evidence_list_v1_evidence_get","parameters":[{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"framework","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Framework"}},{"name":"linked_finding_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Linked Finding Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Evidence List V1 Evidence Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/evidence/upload":{"post":{"tags":["evidence"],"summary":"Evidence Upload","description":"Stream a manual evidence file into MinIO + index it.","operationId":"evidence_upload_v1_evidence_upload_post","parameters":[{"name":"title","in":"query","required":true,"schema":{"type":"string","title":"Title"}},{"name":"description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},{"name":"framework","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Framework"}},{"name":"control_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Control Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_evidence_upload_v1_evidence_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Evidence Upload V1 Evidence Upload Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/evidence/{ev_id}/download":{"get":{"tags":["evidence"],"summary":"Evidence Download","description":"Return a presigned URL for the evidence file.","operationId":"evidence_download_v1_evidence__ev_id__download_get","parameters":[{"name":"ev_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Ev Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Evidence Download V1 Evidence  Ev Id  Download Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/evidence/{ev_id}/link":{"patch":{"tags":["evidence"],"summary":"Evidence Link","description":"Attach (or detach) an evidence record to a finding.\n\nPersists `linked_finding_id` on the row. Auditors can then trace from a\ncontrol gap → finding → uploaded proof artifact in one click.","operationId":"evidence_link_v1_evidence__ev_id__link_patch","parameters":[{"name":"ev_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Ev Id"}},{"name":"finding_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Set null to unlink. Provide a finding UUID to attach.","title":"Finding Id"},"description":"Set null to unlink. Provide a finding UUID to attach."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Evidence Link V1 Evidence  Ev Id  Link Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/evidence/{ev_id}":{"delete":{"tags":["evidence"],"summary":"Evidence Delete","operationId":"evidence_delete_v1_evidence__ev_id__delete","parameters":[{"name":"ev_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Ev Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AssetCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":2,"title":"Name"},"type":{"$ref":"#/components/schemas/AssetType"},"target":{"type":"string","maxLength":2048,"minLength":3,"title":"Target"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"criticality":{"$ref":"#/components/schemas/Criticality","default":"medium"},"environment":{"$ref":"#/components/schemas/Environment","default":"production"},"tags":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Tags"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["name","type","target"],"title":"AssetCreate"},"AssetGroupCreate":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"color":{"anyOf":[{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$"},{"type":"null"}],"title":"Color"}},"type":"object","required":["name"],"title":"AssetGroupCreate"},"AssetGroupRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","tenant_id","name","description","color","created_at"],"title":"AssetGroupRead"},"AssetList":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AssetRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"}},"type":"object","required":["items","total","page","page_size"],"title":"AssetList"},"AssetRead":{"properties":{"name":{"type":"string","maxLength":200,"minLength":2,"title":"Name"},"type":{"$ref":"#/components/schemas/AssetType"},"target":{"type":"string","maxLength":2048,"minLength":3,"title":"Target"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"criticality":{"$ref":"#/components/schemas/Criticality","default":"medium"},"environment":{"$ref":"#/components/schemas/Environment","default":"production"},"tags":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Tags"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"id":{"type":"string","format":"uuid","title":"Id"},"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"base_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Domain"},"status":{"$ref":"#/components/schemas/AssetStatus"},"owner_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Owner User Id"},"last_scan_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Scan At"},"last_scan_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Scan Status"},"auto_discovered":{"type":"boolean","title":"Auto Discovered"},"discovered_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discovered From"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Url"},"file_size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"File Size Bytes"},"file_sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Sha256"}},"type":"object","required":["name","type","target","id","tenant_id","base_domain","status","owner_user_id","last_scan_at","last_scan_status","auto_discovered","discovered_from","created_at","updated_at"],"title":"AssetRead"},"AssetStats":{"properties":{"total":{"type":"integer","title":"Total"},"verified":{"type":"integer","title":"Verified"},"pending_verification":{"type":"integer","title":"Pending Verification"},"by_status":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Status"},"by_type":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Type"},"by_criticality":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Criticality"}},"type":"object","required":["total","verified","pending_verification","by_status","by_type","by_criticality"],"title":"AssetStats"},"AssetStatus":{"type":"string","enum":["draft","pending_verification","verified","suspended","rejected"],"title":"AssetStatus","description":"Lifecycle of an asset."},"AssetType":{"type":"string","enum":["web_app","api","network","mobile_app","code_repo","cloud_account","container_image","kubernetes","ai_model"],"title":"AssetType","description":"What kind of target."},"AssetUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":2},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"criticality":{"anyOf":[{"$ref":"#/components/schemas/Criticality"},{"type":"null"}]},"environment":{"anyOf":[{"$ref":"#/components/schemas/Environment"},{"type":"null"}]},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Tags"},"owner_user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Owner User Id"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","title":"AssetUpdate"},"AssetUploadResult":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"file_url":{"type":"string","title":"File Url"},"file_size_bytes":{"type":"integer","title":"File Size Bytes"},"file_sha256":{"type":"string","title":"File Sha256"},"presigned_url":{"type":"string","title":"Presigned Url"},"presigned_expires_in_seconds":{"type":"integer","title":"Presigned Expires In Seconds"}},"type":"object","required":["id","file_url","file_size_bytes","file_sha256","presigned_url","presigned_expires_in_seconds"],"title":"AssetUploadResult","description":"Returned by POST /v1/assets/{id}/upload."},"Body_evidence_upload_v1_evidence_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_evidence_upload_v1_evidence_upload_post"},"Body_upload_asset_file_v1_assets__asset_id__upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_asset_file_v1_assets__asset_id__upload_post"},"Criticality":{"type":"string","enum":["low","medium","high","critical"],"title":"Criticality","description":"Business criticality — drives scan priority and SLA."},"Environment":{"type":"string","enum":["production","staging","development"],"title":"Environment","description":"Deployment environment — drives compliance scoping (e.g. PCI/SOC 2\nonly audit `production`) and scan-aggressiveness defaults."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status","default":"ok"},"service":{"type":"string","title":"Service"},"version":{"type":"string","title":"Version"},"db_ok":{"type":"boolean","title":"Db Ok"}},"type":"object","required":["service","version","db_ok"],"title":"HealthResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerificationCheckResult":{"properties":{"success":{"type":"boolean","title":"Success"},"status":{"$ref":"#/components/schemas/VerificationStatus"},"message":{"type":"string","title":"Message"},"detail":{"additionalProperties":true,"type":"object","title":"Detail"}},"type":"object","required":["success","status","message"],"title":"VerificationCheckResult"},"VerificationCreate":{"properties":{"method":{"$ref":"#/components/schemas/VerificationMethod"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["method"],"title":"VerificationCreate"},"VerificationInstructions":{"properties":{"method":{"$ref":"#/components/schemas/VerificationMethod"},"token":{"type":"string","title":"Token"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"instructions":{"items":{"type":"string"},"type":"array","title":"Instructions"},"record_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Record Name"},"record_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Record Value"},"file_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Path"}},"type":"object","required":["method","token","expires_at","instructions"],"title":"VerificationInstructions","description":"Returned alongside a fresh verification — tells the user what to do."},"VerificationMethod":{"type":"string","enum":["dns_txt","file_upload","meta_tag","cloud_iam","github_app","manual"],"title":"VerificationMethod"},"VerificationRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"asset_id":{"type":"string","format":"uuid","title":"Asset Id"},"method":{"$ref":"#/components/schemas/VerificationMethod"},"token":{"type":"string","title":"Token"},"status":{"$ref":"#/components/schemas/VerificationStatus"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"last_attempt_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Attempt At"},"attempt_count":{"type":"integer","title":"Attempt Count"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","asset_id","method","token","status","expires_at","last_attempt_at","attempt_count","failure_reason","metadata","created_at"],"title":"VerificationRead"},"VerificationStatus":{"type":"string","enum":["pending","succeeded","failed","expired"],"title":"VerificationStatus"}}}}