{"openapi":"3.1.0","info":{"title":"SSL.com CLM API","version":"1.1.0","description":"Welcome to the documentation for the SSL.com CLM API. This API enables seamless integration and automation for your certificate lifecycle management needs, allowing you to interact with SSL.com's services programmatically. Whether you are managing certificates, \ncreating new requests, or monitoring certificate statuses, our API provides the necessary endpoints and functionality to handle these tasks efficiently.\n\n### **Authentication**\n\nAuthentication is crucial to ensure secure access to our API. It is performed by verifying the Bearer token embedded in the Authorization header of each request. To authenticate your requests, include the Authorization header with the following format:\n\n`Authorization: Bearer XXXX`\n\nReplace `XXXX` with your API Token. This token is unique to your account and must be kept confidential.\n\n\u003cbr\u003e\n\n### **Filtering and Ordering**\n\nOur API supports advanced filtering and ordering capabilities to provide precise and customizable data retrieval. By using these features, you can tailor your queries to match specific criteria and sort the results as needed.\n\n\u003cbr\u003e\n\n### **Pagination**\n\nAll of our listing (index) endpoints support pagination to ensure efficient data retrieval and manageable response sizes. By using pagination, you can navigate through large datasets seamlessly. To fetch a paginated response, set the `page` and `per_page` parameters as follows:\n\n- **page**: Specifies the page number of the results to retrieve.\n\n- **per_page**: Specifies the number of results per page. The maximum value is 50, and the default is 25.\n\nEach paginated response includes a `X-Pagination` header containing a structured set of data.\n\n\u003cbr\u003e\n\n### **Versioning Policy**\n\nOur API adheres to a structured versioning policy designed to ensure stability and predictability, facilitating seamless integration for developers. By following this versioning policy, we aim to provide a predictable and \nstable API environment, allowing you to plan and execute your integration efforts with confidence. Always refer to the release notes for detailed information on any changes introduced in each version update.\n\n- **Major Version Updates (v1.0.0 to v2.0.0)**\n\n  Major version updates occur when there are substantial changes or refactoring to the API. These updates may introduce significant modifications that could potentially break existing integrations. Examples include:\n\n  - Overhauling the API's core functionality\n  - Changing the overall structure of endpoints\n  - Removing or renaming key endpoints or functionalities\n\n  Such updates necessitate careful review and potential reworking of your integration to maintain compatibility.\n\n\u003cbr\u003e\n\n- **Minor Version Updates (v1.1.0 to v1.2.0)**\n\n  Minor version updates occur when there are breaking changes that require attention but do not constitute a complete overhaul of the API. These changes might include:\n\n  - Deprecation or removal of specific endpoints\n  - Alteration or removal of data within response objects\n\n  These updates may require adjustments to your existing integration. It is crucial to review the release notes associated with minor version updates to understand the implications and necessary changes for your integration.\n\n\u003cbr\u003e\n\n- **Patch Version Updates (v1.0.0 to v1.0.1)**\n\n  Patch version updates occur when there are non-breaking changes that enhance the API's functionality while maintaining backward compatibility. These updates include:\n\n  - Addition of new endpoints\n  - Inclusion of new data elements in response objects\n\n  While these updates should not disrupt your current integration, it is advisable to ensure your integration can gracefully handle additional data elements in response payloads to maintain robustness.\n"},"components":{"headers":{"X-Pagination":{"description":"The details around pagination for the list operations","schema":{"type":"object","properties":{"page":{"type":"string","example":1},"per_page":{"type":"string","example":25},"total_records":{"type":"string","example":35},"total_pages":{"type":"string","example":1},"previous_page":{"type":"string","example":null},"next_page":{"type":"string","example":"https://api.staging.ssl.com/api/v1/teams/:id/domains?page=2\u0026per_page=25"},"first_page":{"type":"string","example":"https://api.staging.ssl.com/api/v1/teams/:id/domains?page=1\u0026per_page=25"},"last_page":{"type":"string","example":"https://api.staging.ssl.com/api/v1/teams/:id/domains?page=2\u0026per_page=25"},"order":{"type":"string"},"filter":{"type":"string"}}}},"X-Request-ID":{"description":"The Request UUID for tracking API operation","schema":{"type":"string","example":"00000000-0000-0000-0000-000000000000"}}},"parameters":{"domain_param":{"name":"domain","in":"query","description":"The domain name.","required":true,"schema":{"type":"string"}},"filters_param":{"name":"filters","in":"query","description":"Filtering allows you to narrow down the results based on specific conditions.\n\u003cbr\u003e\nThe `filters` parameter should be a comma-separated list of filter conditions, each in the format `field:operator:value`.\n\u003cbr\u003e\u003cbr\u003e\n**Operators:**\n\u003cbr\u003e\u003cbr\u003e\n- `lt`: Less than\n- `lte`: Less than or equal to\n- `gt`: Greater than\n- `gte`: Greater than or equal to\n- `eq`: Equal to\n- `neq`: Not equal to\n\u003cbr\u003e\u003cbr\u003e\n**Example Usage:** `filters=name:eq:demo,status:eq:active`\n\u003cbr\u003e\nFilters the results to include only records where `name` is equal to demo and `status` is equal to \"active\".\n\u003cbr\u003e\u003cbr\u003e\n","required":false,"schema":{"type":"string"}},"id_param":{"name":"id","in":"path","description":"The unique identifier of the resource.","required":true,"schema":{"type":"string"}},"order_param":{"name":"order","in":"query","description":"Ordering allows you to specify the sorting of results.\n\u003cbr\u003e\nThe `order` parameter should be a comma-separated list of fields to order by, each followed by an optional direction (`asc` for ascending, `desc` for descending).\n\u003cbr\u003e\nIf no direction is specified, the default is ascending.\n\u003cbr\u003e\u003cbr\u003e\n**Example Usage:** `created_at:desc`\n\u003cbr\u003e\nOrders the results by `created_at` in descending order.\n\u003cbr\u003e\u003cbr\u003e\n","required":false,"schema":{"type":"string"}},"organization_id_param":{"name":"organization_id","in":"path","description":"The unique identifier of the organization.","required":true,"schema":{"type":"string"}},"page_param":{"name":"page","in":"query","description":"The page number for the request.","required":false,"schema":{"type":"integer","default":1}},"per_page_param":{"name":"per_page","in":"query","description":"The number of items per page for the request.","required":false,"schema":{"type":"integer","default":10}},"synchronous_param":{"name":"synchronous","in":"query","description":"Synchronously issue the certificate if certificate request is valid and validated.","required":false,"schema":{"type":"boolean","default":false}},"team_id_param":{"name":"team_id","in":"path","description":"The unique identifier of the team.","required":true,"schema":{"type":"string"}},"validation_level_param":{"name":"validation_level","in":"query","description":"The validation level.","required":true,"schema":{"$ref":"#/components/schemas/ValidationLevel"}}},"requestBodies":{"APITokenPost":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name for the API token.","example":"CI/CD Pipeline Token"},"description":{"type":"string","description":"A brief description of the token's purpose.","example":"Token used for automated certificate issuance."},"scopes":{"type":"object","description":"Scope permissions for the token. Each key is a scope path and the value is an array of permissions (`read`, `write`). Use `*` as a wildcard key for broad access. Available scope paths include: `api.v1.certificate_manager.certificates`, `api.v1.certificate_manager.certificate_requests`, `api.v1.certificate_manager.certificate_profiles`, `api.v1.validation.domains`, `api.v1.validation.domain_groups`, `api.v1.validation.organizations`, `api.v1.validation.information_sources`, `api.v1.authentication.teams`, `api.v1.authentication.accounts`.\n","additionalProperties":{"type":"array","items":{"type":"string","enum":["read","write"]}},"example":{"api.v1.certificate_manager.certificates":["read","write"],"api.v1.certificate_manager.certificate_profiles":["read"]}}},"required":["name"]}}}},"APITokenPut":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name for the API token.","example":"Updated Token Name"},"description":{"type":"string","description":"A brief description of the token's purpose.","example":"Updated description."},"scopes":{"type":"object","description":"Updated scope permissions for the token. Each key is a scope path and the value is an array of permissions (`read`, `write`).\n","additionalProperties":{"type":"array","items":{"type":"string","enum":["read","write"]}}},"status":{"type":"string","description":"The status of the token.","enum":["active","archived","disabled"],"example":"active"}}}}}},"CertificateRequestPost":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"title":"DV TLS (DVTLS profile)","type":"object","description":"Use when the selected `certificate_profile_id` is a DV TLS profile.\nDomain control validation (DCV) must be complete before issuance.\n","properties":{"certificate_signing_request":{"type":"string","description":"PEM-encoded certificate signing request (CSR).","example":"-----BEGIN CERTIFICATE REQUEST-----\\n-----END CERTIFICATE REQUEST-----\\n"},"certificate_profile_id":{"type":"string","description":"Certificate profile ID from `GET /api/v1/certificate-profiles`.","example":"00000000-0000-0000-0000-000000000000"},"domains":{"type":"array","description":"FQDNs to include on the certificate. Each must be endorsed on the team before issuance.","items":{"type":"string"},"example":["example.com","www.example.com"]},"expires_at":{"type":"string","description":"Certificate notAfter date. Use `duration` or omit for the default validity period (198 days).","example":"2025-01-01 00:00:00 -0500","format":"date-time"},"duration":{"type":"integer","description":"Certificate validity in days. Alternative to `expires_at`.","example":365}},"required":["certificate_signing_request","certificate_profile_id","domains"]},{"title":"OV TLS (OVTLS profile)","type":"object","description":"Use when the selected `certificate_profile_id` is an OV TLS profile.\nRequires DCV on all `domains` and an active OV organization endorsement.\n","properties":{"certificate_signing_request":{"type":"string","description":"PEM-encoded certificate signing request (CSR).","example":"-----BEGIN CERTIFICATE REQUEST-----\\n-----END CERTIFICATE REQUEST-----\\n"},"certificate_profile_id":{"type":"string","description":"Certificate profile ID from `GET /api/v1/certificate-profiles`.","example":"00000000-0000-0000-0000-000000000000"},"domains":{"type":"array","description":"FQDNs to include on the certificate. Each must be endorsed on the team before issuance.","items":{"type":"string"},"example":["example.com","www.example.com"]},"organization_id":{"type":"string","description":"Organization with an active OV endorsement.","example":"00000000-0000-0000-0000-000000000000"},"expires_at":{"type":"string","description":"Certificate notAfter date. Use `duration` or omit for the default validity period (198 days).","example":"2025-01-01 00:00:00 -0500","format":"date-time"},"duration":{"type":"integer","description":"Certificate validity in days. Alternative to `expires_at`.","example":365}},"required":["certificate_signing_request","certificate_profile_id","domains","organization_id"]},{"title":"EV TLS (EVTLS profile)","type":"object","description":"Use when the selected `certificate_profile_id` is an EV TLS profile.\nRequires DCV on all `domains` and an active EV organization endorsement.\n","properties":{"certificate_signing_request":{"type":"string","description":"PEM-encoded certificate signing request (CSR).","example":"-----BEGIN CERTIFICATE REQUEST-----\\n-----END CERTIFICATE REQUEST-----\\n"},"certificate_profile_id":{"type":"string","description":"Certificate profile ID from `GET /api/v1/certificate-profiles`.","example":"00000000-0000-0000-0000-000000000000"},"domains":{"type":"array","description":"FQDNs to include on the certificate. Each must be endorsed on the team before issuance.","items":{"type":"string"},"example":["example.com","www.example.com"]},"organization_id":{"type":"string","description":"Organization with an active EV endorsement.","example":"00000000-0000-0000-0000-000000000000"},"expires_at":{"type":"string","description":"Certificate notAfter date. Use `duration` or omit for the default validity period (198 days).","example":"2025-01-01 00:00:00 -0500","format":"date-time"},"duration":{"type":"integer","description":"Certificate validity in days. Alternative to `expires_at`.","example":365}},"required":["certificate_signing_request","certificate_profile_id","domains","organization_id"]}]}}}},"CertificateRevocation":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"revocation_reason":{"$ref":"#/components/schemas/RevocationReason"},"revocation_source":{"$ref":"#/components/schemas/RevocationSource"}},"required":["revocation_reason","revocation_source"]}}}},"DomainGroupPost":{"required":true,"content":{"application/json":{"schema":{"description":"Create a domain group for one of two workflows. The domains field is always required.\n\nFor shared DCV, send validation_methods with HTTP, HTTPS, or DNS method codes. Do not send validation_candidate.\n\nFor email batch validation, send an email DCV method plus validation_candidate. Use validation_methods\n(preferred) or the legacy validation_method field.\n\nShared DCV and email batch methods cannot be combined in the same request.\n","oneOf":[{"title":"Shared DCV","type":"object","required":["domains","validation_methods"],"properties":{"validation_methods":{"type":"array","minItems":1,"items":{"type":"string","enum":["3.2.2.4.7","3.2.2.4.18","3.2.2.4.19","3.2.2.5.1"]},"description":"Shared HTTP/HTTPS/DNS DCV methods for this batch. A new shared verification_value is issued for\nevery domain. Overlapping active domain groups are archived when creating a shared DCV group.\n","example":["3.2.2.4.18","3.2.2.4.19","3.2.2.4.7"]},"domains":{"type":"array","minItems":1,"items":{"type":"string"},"description":"Domain IDs to include in the group. Domains must already exist on the team. Overlapping active domain groups are archived when creating a shared DCV group.","example":["00000000-0000-0000-0000-000000000001","00000000-0000-0000-0000-000000000002"]}}},{"title":"Email batch (validation_methods)","type":"object","required":["domains","validation_methods","validation_candidate"],"properties":{"validation_methods":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"string","enum":["3.2.2.4.2","3.2.2.4.4","3.2.2.4.14"]},"description":"Exactly one email DCV method for the batch.","example":["3.2.2.4.14"]},"validation_candidate":{"type":"string","description":"Email address used to validate every domain in the batch.","example":"admin@demo.com"},"domains":{"type":"array","minItems":1,"items":{"type":"string"},"description":"Domain IDs to include in the group. Each domain must already have a matching validation option. Overlapping groups are not archived.","example":["00000000-0000-0000-0000-000000000001","00000000-0000-0000-0000-000000000002"]}}},{"title":"Email batch (legacy validation_method)","type":"object","required":["domains","validation_method","validation_candidate"],"properties":{"validation_method":{"type":"string","enum":["3.2.2.4.2","3.2.2.4.4","3.2.2.4.14"],"description":"Legacy alias for a single email DCV method. Prefer validation_methods for new integrations.","example":"3.2.2.4.14"},"validation_candidate":{"type":"string","description":"Email address used to validate every domain in the batch.","example":"admin@demo.com"},"domains":{"type":"array","minItems":1,"items":{"type":"string"},"description":"Domain IDs to include in the group. Each domain must already have a matching validation option. Overlapping groups are not archived.","example":["00000000-0000-0000-0000-000000000001","00000000-0000-0000-0000-000000000002"]}}}]}}}},"DomainGroupPut":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Update validation settings for an existing group. All properties are optional, but at least one should be\nprovided. Linked domains cannot be changed through this endpoint; create a new group to change membership.\n","properties":{"validation_methods":{"type":"array","items":{"type":"string","enum":["3.2.2.4.2","3.2.2.4.4","3.2.2.4.7","3.2.2.4.14","3.2.2.4.18","3.2.2.4.19","3.2.2.5.1"]},"description":"Baseline Requirements DCV methods for this group. Cannot combine shared HTTP/HTTPS/DNS methods with email\nbatch methods, or include more than one email batch method. Changing methods does not add or remove linked\ndomains; use create to set membership.\n","example":["3.2.2.4.14"]},"validation_method":{"type":"string","description":"Legacy alias for a single entry in validation_methods. Prefer validation_methods for new integrations.\n","example":"3.2.2.4.14"},"validation_candidate":{"type":"string","description":"Email address for email batch validation. Required on the group when an email DCV method is configured.\n","example":"admin@demo.com"}}}}}},"DomainGroupVerifyPost":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"The token sent in the verification email for an email batch domain group. Verification succeeds only\nwhile the domain group status is active; archived or deleted groups reject the token.\n","example":"2d3c96b6ea343d8b2327cfed4e4b487aa55c488cc"}},"required":["token"]}}}},"DomainPost":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"string","description":"The FQDN to validate (e.g. `www.example.com`).","example":"www.demo.com"},"validation_option_exceptions":{"type":"array","items":{"type":"string","example":"3.2.2.4.4"},"description":"Baseline requirement method IDs to exclude from validation options."},"external_account_id":{"type":"string","description":"External account identifier for integrator account correlation (e.g. RA account number).\nStored on the domain and echoed in API responses and domain webhook payloads. Does not\naffect validation options. Accepted on domain create and create-validation.\n","example":"ac7-1k0df3m"},"account_key_hash":{"type":"string","description":"ACME account key thumbprint (JWK SHA-256). When provided, returns only ACME DCV options:\n\n- ACME DNS-01 — validation_method `3.2.2.4.7`, protocol `ACME_DNS_01`. Publish a TXT\n  record at `_acme-challenge.\u003cdomain\u003e`; the expected value is the base64url digest of\n  keyAuthorization.\n- ACME HTTP-01 — validation_method `3.2.2.4.19`, protocol `ACME_HTTP_01`. Non-wildcard domains\n  only. Serve keyAuthorization as the response body at\n  `http://\u003cdomain\u003e/.well-known/acme-challenge/\u003ctoken\u003e`.\n- ACME TLS-ALPN-01 — validation_method `3.2.2.4.20`, protocol `ACME_TLS_ALPN_01`.\n  Non-wildcard domains only. Present a self-signed certificate on port 443 with ALPN\n  `acme-tls/1`, SNI = `\u003cdomain\u003e`, and id-pe-acmeIdentifier (OID 1.3.6.1.5.5.7.1.31)\n  set to the SHA-256 digest of keyAuthorization (hex). `verification_value` in the\n  option is that hex digest.\n\nWhen omitted, non-ACME methods (email, TXT, CNAME, agreed-upon-change HTTP/HTTPS, etc.)\nare returned instead. Wildcard subjects (e.g. `*.example.com`) receive only ACME DNS-01.\nIP subjects receive no options. `validation_option_exceptions` may still exclude individual\nACME methods (e.g. `\"3.2.2.4.19\"` to omit HTTP-01, `\"3.2.2.4.20\"` to omit TLS-ALPN-01).\n","example":"2d3c96b6ea343d8b2327cfed4e4b487aa55c488cc"}},"required":["subject"]},"examples":{"default":{"summary":"Standard domain create","value":{"subject":"demo.com","external_account_id":"ac7-1k0df3m"}},"acme":{"summary":"Domain create with ACME-only validation options","description":"Provide the ACME account key thumbprint to receive ACME DNS-01 (3.2.2.4.7), ACME HTTP-01\n(3.2.2.4.19), and ACME TLS-ALPN-01 (3.2.2.4.20) options.\n","value":{"subject":"demo.com","external_account_id":"ac7-1k0df3m","account_key_hash":"2d3c96b6ea343d8b2327cfed4e4b487aa55c488cc"}}}}}},"DomainPut":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"string","description":"Update the domain FQDN.","example":"www.demo.com"},"domain_validation_option_id":{"type":"string","description":"Validation method to use (DNS, HTTP, email, etc.). When changed while validation is\n`pending` or `in_progress`, validation is restarted with the selected option.\n","example":"00000000-0000-0000-0000-000000000000"},"manual_verification":{"type":"boolean","description":"Mark for manual verification by the validation team.","example":false}},"required":["domain_validation_option_id"]},"examples":{"acme_http_01":{"summary":"Select ACME HTTP-01 validation option","description":"Use the id from a domain_validation_options entry where validation_method is 3.2.2.4.19 and protocol is ACME_HTTP_01.","value":{"domain_validation_option_id":"00000000-0000-0000-0000-000000000001"}},"acme_tls_alpn_01":{"summary":"Select ACME TLS-ALPN-01 validation option","description":"Use the id from a domain_validation_options entry where validation_method is 3.2.2.4.20 and\nprotocol is ACME_TLS_ALPN_01. Present a self-signed certificate on port 443 with ALPN\n`acme-tls/1` and id-pe-acmeIdentifier set to verification_value before updating.\n","value":{"domain_validation_option_id":"00000000-0000-0000-0000-000000000003"}}}}}},"DomainValidationPut":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"manual_verification":{"type":"boolean","description":"Mark for manual verification by the validation team.","example":false},"use_endorsements":{"type":"boolean","description":"Controls whether existing domain endorsements (completed DCV proofs) may\nsatisfy this and future validations for the domain's subject.\n\n- Omitted or `true` (default): existing active endorsements are reused; an\n  already-validated subject reports `endorsed: true` and can be issued\n  immediately.\n- Explicit `false`: **start this domain over.** Every active team endorsement\n  covering the subject is permanently archived, the domain immediately reports\n  `endorsed: false`, and no certificate can be issued for the subject — by any\n  new or pending certificate request on the team — until DCV completes again.\n  This cannot be undone.\n\n**Wildcard coverage:** endorsements from wildcard-capable DCV methods cover the\nbase domain and all of its subdomains with a single record. Sending `false` for\nany covered name (even one subdomain) archives that shared endorsement, so every\nname it covered requires a new DCV before its next issuance. Example: after\n`use_endorsements: false` for `www.example.com`, a wildcard endorsement for\n`example.com` is archived and `example.com`, `www.example.com`, and\n`api.example.com` all require fresh DCV.\n\nAlready-issued certificates are not affected. See the endpoint description for\nfull semantics.\n","example":false},"validation_option_exceptions":{"type":"array","items":{"type":"string","example":"3.2.2.4.4"},"description":"Baseline requirement method IDs to exclude from validation options."},"account_key_hash":{"type":"string","description":"ACME account key thumbprint. When set, the new validation's option list includes only\nACME DCV methods. See `account_key_hash` on domain create for details.\n","example":"2d3c96b6ea343d8b2327cfed4e4b487aa55c488cc"},"external_account_id":{"type":"string","description":"External account identifier. Updates the stored value on the domain; echoed in subsequent\nAPI responses and webhook payloads.\n","example":"ac7-1k0df3m"}},"required":[]}}}},"DomainVerifyPost":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"Token from the DCV verification email.","example":"2d3c96b6ea343d8b2327cfed4e4b487aa55c488cc"},"ip_address":{"type":"string","description":"IP address of the verifier. Recorded when the token is consumed.","example":"0.0.0.0"}},"required":["token"]}}}},"OrganizationPost":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"When the account flag `optional_organization_create_payload` is enabled (inherited by the team),\nall properties are optional and an empty object `{}` is accepted. When the flag is disabled,\n`name`, `city`, and `country` are required.\n","properties":{"name":{"type":"string","description":"Name of the organization. (This maps to the O field in the certificate)","example":"Organization A"},"description":{"type":"string","description":"Description of the organization.","example":"Organization A Description"},"assumed_name":{"type":"string","description":"Alternate or assumed name of the organization. (This overides the O field in the certificate, if approved)","example":"Org A"},"business_category":{"allOf":[{"$ref":"#/components/schemas/BusinessCategory"}],"description":"Optional on create and update. All four `BusinessCategory` values are accepted."},"address_1":{"type":"string","description":"Primary address of the organization.","example":"123 Main St"},"address_2":{"type":"string","description":"Secondary address of the organization (if applicable).","example":"Suite 456"},"city":{"type":"string","description":"City where the organization is located. (This maps to the L field in the certificate)","example":"San Francisco"},"state":{"type":"string","description":"State or province where the organization is located. (This maps to the ST field in the certificate)","example":"CA"},"zip":{"type":"string","description":"ZIP or postal code of the organization's location.","example":94105},"country":{"type":"string","description":"Country where the organization is located (ISO 3166-1 alpha-2 code). (This maps to the C field in the certificate)","example":"US"},"phone_number":{"type":"string","description":"Contact phone number of the organization.","example":"+1-123-456-7890"},"admin_email":{"type":"string","format":"email","description":"Organization contact email for reaching the applicant. Optional on create and update.\nWhen related organization or domain validation evidence has been verified per policy,\nthis address may be used as the Reliable Method of Communication (RMOC).\n","example":"admin@example.com"},"company_number":{"type":"string","description":"Official company registration number. (This maps to the serialNumber field in the certificate)","example":12345678},"incorporation_city":{"type":"string","description":"City where the organization is incorporated. (This maps to the 1.3.6.1.4.1.311.60.2.1.1 field in the certificate)","example":"Wilmington"},"incorporation_state":{"type":"string","description":"State or province where the organization is incorporated. (This maps to the 1.3.6.1.4.1.311.60.2.1.2 field in the certificate)","example":"DE"},"incorporation_country":{"type":"string","description":"Country where the organization is incorporated (ISO 3166-1 alpha-2 code). (This maps to the 1.3.6.1.4.1.311.60.2.1.3 field in the certificate)","example":"US"},"organization_identifier":{"type":"string","description":null,"example":null},"customer_identifier":{"type":"string","description":"The customer identifier for the organization.","example":"00000000-0000-0000-0000-000000000000"},"contact_name":{"type":"string","description":"EV contact person name. Optional at create; required on endorsement before approval."},"contact_title":{"type":"string","description":"EV contact person title. Optional at create; required on endorsement before approval."},"contact_email":{"type":"string","format":"email","description":"EV contact email. Optional at create; required on endorsement before approval."},"priority":{"type":"integer","description":"The priority of the endorsement.","example":1}},"required":["name","city","country"]}}}},"OrganizationPut":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of the organization. (This maps to the O field in the certificate)","example":"Organization A"},"description":{"type":"string","description":"Description of the organization.","example":"Organization A Description"},"assumed_name":{"type":"string","description":"Alternate or assumed name of the organization. (This overides the O field in the certificate, if approved)","example":"Org A"},"business_category":{"allOf":[{"$ref":"#/components/schemas/BusinessCategory"}],"description":"Optional on create and update. All four `BusinessCategory` values are accepted."},"address_1":{"type":"string","description":"Primary address of the organization.","example":"123 Main St"},"address_2":{"type":"string","description":"Secondary address of the organization (if applicable).","example":"Suite 456"},"city":{"type":"string","description":"City where the organization is located. (This maps to the L field in the certificate)","example":"San Francisco"},"state":{"type":"string","description":"State or province where the organization is located. (This maps to the ST field in the certificate)","example":"CA"},"zip":{"type":"string","description":"ZIP or postal code of the organization's location.","example":94105},"country":{"type":"string","description":"Country where the organization is located (ISO 3166-1 alpha-2 code). (This maps to the C field in the certificate)","example":"US"},"phone_number":{"type":"string","description":"Contact phone number of the organization.","example":"+1-123-456-7890"},"admin_email":{"type":"string","format":"email","description":"Organization contact email for reaching the applicant. Optional on create and update.\nWhen related organization or domain validation evidence has been verified per policy,\nthis address may be used as the Reliable Method of Communication (RMOC).\n","example":"admin@example.com"},"company_number":{"type":"string","description":"Official company registration number. (This maps to the serialNumber field in the certificate)","example":12345678},"incorporation_city":{"type":"string","description":"City where the organization is incorporated. (This maps to the 1.3.6.1.4.1.311.60.2.1.1 field in the certificate)","example":"Wilmington"},"incorporation_state":{"type":"string","description":"State or province where the organization is incorporated. (This maps to the 1.3.6.1.4.1.311.60.2.1.2 field in the certificate)","example":"DE"},"incorporation_country":{"type":"string","description":"Country where the organization is incorporated (ISO 3166-1 alpha-2 code). (This maps to the 1.3.6.1.4.1.311.60.2.1.3 field in the certificate)","example":"US"},"organization_identifier":{"type":"string","description":null,"example":null},"customer_identifier":{"type":"string","description":"The customer identifier for the organization.","example":"00000000-0000-0000-0000-000000000000"},"contact_name":{"type":"string","description":"EV contact person name. Optional at create; required on endorsement before approval."},"contact_title":{"type":"string","description":"EV contact person title. Optional at create; required on endorsement before approval."},"contact_email":{"type":"string","format":"email","description":"EV contact email. Optional at create; required on endorsement before approval."},"priority":{"type":"integer","description":"The priority of the endorsement.","example":1}}}}}},"OrganizationValidationPost":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"title":"OV Endorsement","type":"object","properties":{"validation_level":{"$ref":"#/components/schemas/ValidationLevel"},"name":{"type":"string","description":"Name of the organization. (This maps to the O field in the certificate)","example":"Organization A"},"assumed_name":{"type":"string","description":"Alternate or assumed name of the organization. (This overides the O field in the certificate, if approved)","example":"Org A"},"city":{"type":"string","description":"City where the organization is located. (This maps to the L field in the certificate)","example":"San Francisco"},"state":{"type":"string","description":"State or province where the organization is located. (This maps to the ST field in the certificate)","example":"CA"},"country":{"type":"string","description":"Country where the organization is located (ISO 3166-1 alpha-2 code). (This maps to the C field in the certificate)"},"contact_email":{"type":"string","format":"email","description":"Contact email for the Order Authorization. Required at create for both OV and EV; copied from the organization record when omitted.","example":"contact@organization-a.com"},"expires_at":{"type":"string","description":"Endorsement expiry date and time. When omitted, defaults to 396 days\nfrom submission while the endorsement is `pending_review`.\n","example":"2025-07-23 22:47:08 UTC","format":"date-time"},"customer_identifier":{"type":"string","description":"The customer identifier for the organization.","example":"00000000-0000-0000-0000-000000000000"},"priority":{"type":"integer","description":"The priority of the endorsement.","example":1},"information_sources":{"type":"array","items":{"type":"string"},"description":"Optional list of information source IDs used to validate the organization. If provided, each ID is validated against existing information sources."}},"required":["validation_level","contact_email"]},{"title":"EV Endorsement","type":"object","properties":{"validation_level":{"$ref":"#/components/schemas/ValidationLevel"},"name":{"type":"string","description":"Name of the organization. (This maps to the O field in the certificate)","example":"Organization A"},"assumed_name":{"type":"string","description":"Alternate or assumed name of the organization. (This overides the O field in the certificate, if approved)","example":"Org A"},"business_category":{"$ref":"#/components/schemas/EndorsementBusinessCategory"},"city":{"type":"string","description":"City where the organization is located. (This maps to the L field in the certificate)","example":"San Francisco"},"state":{"type":"string","description":"State or province where the organization is located. (This maps to the ST field in the certificate)","example":"CA"},"country":{"type":"string","description":"Country where the organization is located (ISO 3166-1 alpha-2 code). (This maps to the C field in the certificate)"},"company_number":{"type":"string","description":"Official company registration number. (This maps to the serialNumber field in the certificate)","example":12345678},"incorporation_city":{"type":"string","description":"City where the organization is incorporated. (This maps to the 1.3.6.1.4.1.311.60.2.1.1 field in the certificate)","example":"Wilmington"},"incorporation_state":{"type":"string","description":"State or province where the organization is incorporated. (This maps to the 1.3.6.1.4.1.311.60.2.1.2 field in the certificate)","example":"DE"},"incorporation_country":{"type":"string","description":"Country where the organization is incorporated (ISO 3166-1 alpha-2 code). (This maps to the 1.3.6.1.4.1.311.60.2.1.3 field in the certificate)","example":"US"},"expires_at":{"type":"string","description":"Endorsement expiry date and time. When omitted, defaults to 396 days\nfrom submission while the endorsement is `pending_review`.\n","example":"2025-07-23 22:47:08 UTC","format":"date-time"},"customer_identifier":{"type":"string","description":"The customer identifier for the organization.","example":"00000000-0000-0000-0000-000000000000"},"priority":{"type":"integer","description":"The priority of the endorsement.","example":1},"information_sources":{"type":"array","items":{"type":"string"},"description":"Optional list of information source IDs used to validate the organization. If provided, each ID is validated against existing information sources."},"contact_name":{"type":"string","description":"EV contact person name. Optional at create; required before approval."},"contact_title":{"type":"string","description":"EV contact person title (Manager/Director preferred). Optional at create; required before approval."},"contact_email":{"type":"string","format":"email","description":"Contact email for the Order Authorization. Required at create for both OV and EV; copied from the organization record when omitted."}},"required":["validation_level","contact_email"]},{"title":"VMC Endorsement (Verified Mark Certificate)","type":"object","description":"A Verified Mark Certificate (VMC) endorsement validates an organization's trademark\nfor use with BIMI (Brand Indicators for Message Identification). Requires a registered\ntrademark and an SVG mark image conforming to the BIMI SVG Tiny PS profile.\n","properties":{"validation_level":{"type":"string","enum":["VMC"],"example":"VMC"},"name":{"type":"string","description":"Name of the organization. (This maps to the O field in the certificate)","example":"Acme Corp"},"assumed_name":{"type":"string","description":"Alternate or assumed name of the organization.","example":"Acme"},"business_category":{"$ref":"#/components/schemas/BusinessCategory"},"city":{"type":"string","description":"City where the organization is located.","example":"Houston"},"state":{"type":"string","description":"State or province where the organization is located.","example":"Texas"},"country":{"type":"string","description":"Country where the organization is located (ISO 3166-1 alpha-2 code).","example":"US"},"street_address":{"type":"string","description":"Street address of the organization.","example":"123 Main St"},"postal_code":{"type":"string","description":"Postal code of the organization.","example":"77001"},"company_number":{"type":"string","description":"Official company registration number.","example":"C0036001"},"incorporation_city":{"type":"string","description":"City where the organization is incorporated.","example":"Houston"},"incorporation_state":{"type":"string","description":"State or province where the organization is incorporated.","example":"Texas"},"incorporation_country":{"type":"string","description":"Country where the organization is incorporated (ISO 3166-1 alpha-2 code).","example":"US"},"trademark_country":{"type":"string","description":"Country where the trademark is registered (ISO 3166-1 alpha-2 code).","example":"US"},"trademark_office":{"type":"string","description":"Name of the trademark office. Must match a recognized trademark office for the given country.","example":"United States Patent and Trademark Office (USPTO)"},"trademark_identifier":{"type":"string","description":"Trademark registration number.","example":"97123456"},"wordmark":{"type":"string","description":"The wordmark associated with the trademark.","example":"ACME"},"mark_image":{"type":"string","description":"Base64-encoded SVG mark image. Must conform to the BIMI SVG Tiny Portable/Secure profile (version 1.2, baseProfile tiny-ps, square viewBox \u003e= 96x96, max 32KB, no scripts/styles).","example":"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249..."},"expires_at":{"type":"string","description":"The expiry date and time for the endorsement.","example":"2026-08-01 00:00:00 UTC","format":"date-time"},"customer_identifier":{"type":"string","description":"The customer identifier for the organization.","example":"00000000-0000-0000-0000-000000000000"},"information_sources":{"type":"array","items":{"type":"string"},"description":"Optional list of information source IDs used to validate the organization. If provided, each ID is validated against existing information sources."}},"required":["validation_level"]},{"title":"CMC Endorsement (Common Mark Certificate)","type":"object","description":"A Common Mark Certificate (CMC) endorsement validates an organization's mark based on\nprior use evidence. Requires a URL demonstrating prior use of the mark and an SVG mark image.\n","properties":{"validation_level":{"type":"string","enum":["CMC"],"example":"CMC"},"name":{"type":"string","description":"Name of the organization.","example":"Acme Corp"},"assumed_name":{"type":"string","description":"Alternate or assumed name of the organization.","example":"Acme"},"business_category":{"$ref":"#/components/schemas/BusinessCategory"},"city":{"type":"string","description":"City where the organization is located.","example":"Houston"},"state":{"type":"string","description":"State or province where the organization is located.","example":"Texas"},"country":{"type":"string","description":"Country where the organization is located (ISO 3166-1 alpha-2 code).","example":"US"},"street_address":{"type":"string","description":"Street address of the organization.","example":"123 Main St"},"postal_code":{"type":"string","description":"Postal code of the organization.","example":"77001"},"company_number":{"type":"string","description":"Official company registration number.","example":"C0036001"},"incorporation_city":{"type":"string","description":"City where the organization is incorporated.","example":"Houston"},"incorporation_state":{"type":"string","description":"State or province where the organization is incorporated.","example":"Texas"},"incorporation_country":{"type":"string","description":"Country where the organization is incorporated (ISO 3166-1 alpha-2 code).","example":"US"},"prior_use_mark_source_url":{"type":"string","description":"URL demonstrating prior use of the mark. The domain of this URL must match one of the domains validated on the certificate request.","example":"https://www.example.com/our-brand"},"mark_image":{"type":"string","description":"Base64-encoded SVG mark image. Must conform to the BIMI SVG Tiny Portable/Secure profile.","example":"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249..."},"expires_at":{"type":"string","description":"The expiry date and time for the endorsement.","example":"2026-08-01 00:00:00 UTC","format":"date-time"},"customer_identifier":{"type":"string","description":"The customer identifier for the organization.","example":"00000000-0000-0000-0000-000000000000"},"information_sources":{"type":"array","items":{"type":"string"},"description":"Optional list of information source IDs used to validate the organization. If provided, each ID is validated against existing information sources."}},"required":["validation_level"]},{"title":"GMC Endorsement (Government Mark Certificate)","type":"object","description":"A Government Mark Certificate (GMC) endorsement validates a government entity's mark\nbased on an authorizing statute. Requires statute details and an SVG mark image.\n","properties":{"validation_level":{"type":"string","enum":["GMC"],"example":"GMC"},"name":{"type":"string","description":"Name of the organization.","example":"State of California"},"assumed_name":{"type":"string","description":"Alternate or assumed name of the organization."},"business_category":{"$ref":"#/components/schemas/BusinessCategory"},"city":{"type":"string","description":"City where the organization is located.","example":"Sacramento"},"state":{"type":"string","description":"State or province where the organization is located.","example":"California"},"country":{"type":"string","description":"Country where the organization is located (ISO 3166-1 alpha-2 code).","example":"US"},"street_address":{"type":"string","description":"Street address of the organization.","example":"1315 10th Street"},"postal_code":{"type":"string","description":"Postal code of the organization.","example":"95814"},"company_number":{"type":"string","description":"Official registration number.","example":"GOV-CA-001"},"incorporation_city":{"type":"string","description":"City where the organization is incorporated.","example":"Sacramento"},"incorporation_state":{"type":"string","description":"State or province where the organization is incorporated.","example":"California"},"incorporation_country":{"type":"string","description":"Country where the organization is incorporated (ISO 3166-1 alpha-2 code).","example":"US"},"statute_citation":{"type":"string","description":"Citation of the statute authorizing use of the mark.","example":"Cal. Gov. Code § 12173"},"statute_url":{"type":"string","description":"URL to the full text of the statute.","example":"https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml"},"statute_country":{"type":"string","description":"Country of the statute (ISO 3166-1 alpha-2 code).","example":"US"},"statute_state":{"type":"string","description":"State or province of the statute.","example":"California"},"statute_locality":{"type":"string","description":"Locality of the statute."},"mark_image":{"type":"string","description":"Base64-encoded SVG mark image. Must conform to the BIMI SVG Tiny Portable/Secure profile.","example":"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249..."},"expires_at":{"type":"string","description":"The expiry date and time for the endorsement.","example":"2026-08-01 00:00:00 UTC","format":"date-time"},"customer_identifier":{"type":"string","description":"The customer identifier for the organization.","example":"00000000-0000-0000-0000-000000000000"},"information_sources":{"type":"array","items":{"type":"string"},"description":"Optional list of information source IDs used to validate the organization. If provided, each ID is validated against existing information sources."}},"required":["validation_level"]},{"title":"MRM Endorsement (Mark with Registered Mark)","type":"object","description":"A Mark with Registered Mark (MRM) endorsement combines trademark registration with\nprior use evidence. Requires both trademark details and a prior use URL, plus an SVG mark image.\n","properties":{"validation_level":{"type":"string","enum":["MRM"],"example":"MRM"},"name":{"type":"string","description":"Name of the organization.","example":"Acme Corp"},"assumed_name":{"type":"string","description":"Alternate or assumed name of the organization.","example":"Acme"},"business_category":{"$ref":"#/components/schemas/BusinessCategory"},"city":{"type":"string","description":"City where the organization is located.","example":"Houston"},"state":{"type":"string","description":"State or province where the organization is located.","example":"Texas"},"country":{"type":"string","description":"Country where the organization is located (ISO 3166-1 alpha-2 code).","example":"US"},"street_address":{"type":"string","description":"Street address of the organization.","example":"123 Main St"},"postal_code":{"type":"string","description":"Postal code of the organization.","example":"77001"},"company_number":{"type":"string","description":"Official company registration number.","example":"C0036001"},"incorporation_city":{"type":"string","description":"City where the organization is incorporated.","example":"Houston"},"incorporation_state":{"type":"string","description":"State or province where the organization is incorporated.","example":"Texas"},"incorporation_country":{"type":"string","description":"Country where the organization is incorporated (ISO 3166-1 alpha-2 code).","example":"US"},"trademark_country":{"type":"string","description":"Country where the trademark is registered (ISO 3166-1 alpha-2 code).","example":"US"},"trademark_office":{"type":"string","description":"Name of the trademark office.","example":"United States Patent and Trademark Office (USPTO)"},"trademark_identifier":{"type":"string","description":"Trademark registration number.","example":"97123456"},"wordmark":{"type":"string","description":"The wordmark associated with the trademark.","example":"ACME"},"prior_use_mark_source_url":{"type":"string","description":"URL demonstrating prior use of the mark. The domain must match a validated domain.","example":"https://www.example.com/our-brand"},"mark_image":{"type":"string","description":"Base64-encoded SVG mark image. Must conform to the BIMI SVG Tiny Portable/Secure profile.","example":"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249..."},"expires_at":{"type":"string","description":"The expiry date and time for the endorsement.","example":"2026-08-01 00:00:00 UTC","format":"date-time"},"customer_identifier":{"type":"string","description":"The customer identifier for the organization.","example":"00000000-0000-0000-0000-000000000000"},"information_sources":{"type":"array","items":{"type":"string"},"description":"Optional list of information source IDs used to validate the organization. If provided, each ID is validated against existing information sources."}},"required":["validation_level"]}]},"examples":{"OV endorsement":{"summary":"OV Endorsement Example","value":{"validation_level":"OV","name":"Demo Organization Inc.","assumed_name":"Demo Org","city":"Houston","state":"Texas","country":"US","contact_email":"contact@demo-organization.com","expires_at":"2025-08-01 00:00:00 UTC","customer_identifier":"00000000-0000-0000-0000-000000000000","priority":1,"information_sources":["00000000-0000-0000-0000-000000000000","00000000-0000-0000-0000-000000000000"]}},"EV Endorsement":{"summary":"EV Endorsement Example","value":{"validation_level":"EV","name":"Demo Organization Inc.","business_category":"Private Organization","assumed_name":"Demo Org","city":"Houston","state":"Texas","country":"US","company_number":"0000","incorporation_city":"Houston","incorporation_state":"Texas","incorporation_country":"US","contact_email":"contact@demo-organization.com","expires_at":"2025-08-01 00:00:00 UTC","customer_identifier":"00000000-0000-0000-0000-000000000000","priority":1,"information_sources":["00000000-0000-0000-0000-000000000000","00000000-0000-0000-0000-000000000000"]}},"VMC Endorsement":{"summary":"VMC (Verified Mark Certificate) Endorsement Example","value":{"validation_level":"VMC","name":"Acme Corp","business_category":"Private Organization","city":"Houston","state":"Texas","country":"US","street_address":"123 Main St","postal_code":"77001","company_number":"C0036001","incorporation_city":"Houston","incorporation_state":"Texas","incorporation_country":"US","trademark_country":"US","trademark_office":"United States Patent and Trademark Office (USPTO)","trademark_identifier":"97123456","wordmark":"ACME","mark_image":"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249...","expires_at":"2026-08-01 00:00:00 UTC","information_sources":["00000000-0000-0000-0000-000000000000"]}},"CMC Endorsement":{"summary":"CMC (Common Mark Certificate) Endorsement Example","value":{"validation_level":"CMC","name":"Acme Corp","business_category":"Private Organization","city":"Houston","state":"Texas","country":"US","street_address":"123 Main St","company_number":"C0036001","incorporation_city":"Houston","incorporation_country":"US","prior_use_mark_source_url":"https://www.acme.com/our-brand","mark_image":"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249...","expires_at":"2026-08-01 00:00:00 UTC","information_sources":["00000000-0000-0000-0000-000000000000"]}},"GMC Endorsement":{"summary":"GMC (Government Mark Certificate) Endorsement Example","value":{"validation_level":"GMC","name":"State of California","business_category":"Government Entity","city":"Sacramento","state":"California","country":"US","street_address":"1315 10th Street","company_number":"GOV-CA-001","incorporation_city":"Sacramento","incorporation_country":"US","statute_citation":"Cal. Gov. Code § 12173","statute_url":"https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml","statute_country":"US","statute_state":"California","mark_image":"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249...","expires_at":"2026-08-01 00:00:00 UTC","information_sources":["00000000-0000-0000-0000-000000000000"]}},"MRM Endorsement":{"summary":"MRM (Mark with Registered Mark) Endorsement Example","value":{"validation_level":"MRM","name":"Acme Corp","business_category":"Private Organization","city":"Houston","state":"Texas","country":"US","street_address":"123 Main St","company_number":"C0036001","incorporation_city":"Houston","incorporation_country":"US","trademark_country":"US","trademark_office":"United States Patent and Trademark Office (USPTO)","trademark_identifier":"97123456","prior_use_mark_source_url":"https://www.acme.com/our-brand","mark_image":"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249...","expires_at":"2026-08-01 00:00:00 UTC","information_sources":["00000000-0000-0000-0000-000000000000"]}}}}}},"SubscriberAgreementSignerPatch":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Partial updates are supported. Only fields included in the request body are validated\nand updated.\n\u003cbr\u003e\u003cbr\u003e\n`agreement_type` is NOT accepted — any supplied value is ignored.\n\u003cbr\u003e\u003cbr\u003e\nChanging a contact field (`contact_name`, `contact_title`, `contact_email`) once the\nsigner is `approved` or `accepted` is a re-sign, not an in-place edit — see the endpoint\ndescription for the resulting `201` / `409` semantics.\n","properties":{"contact_name":{"type":"string","description":"Name of the signer.","example":"Jane Director"},"contact_title":{"type":"string","description":"Title of the signer.","example":"Director"},"contact_email":{"type":"string","format":"email","description":"Email address of the signer. Must be a valid email address when provided.","example":"jane.director@example.com"},"agreement_version":{"type":"string","description":"Version of the Subscriber Agreement the signer will be presented with.","example":"1.2"}}}}}},"SubscriberAgreementSignerPost":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"All properties are optional; an empty object `{}` (or no body) is accepted. Contact\nfields omitted from the request are snapshotted from the endorsement's EV contact\nfields, falling back to the organization's contact fields. Request values take priority.\n\u003cbr\u003e\u003cbr\u003e\n`agreement_type` is NOT accepted — any supplied value is ignored and the server forces\n`evsa`.\n","properties":{"contact_name":{"type":"string","description":"Name of the signer. Defaults to the endorsement (then organization) EV contact name.","example":"Jane Director"},"contact_title":{"type":"string","description":"Title of the signer. Defaults to the endorsement (then organization) EV contact title.","example":"Director"},"contact_email":{"type":"string","format":"email","description":"Email address of the signer. Defaults to the endorsement (then organization) EV\ncontact email. Must be a valid email address when provided; it is required before\nidentity verification can be started.\n","example":"jane.director@example.com"},"agreement_version":{"type":"string","description":"Version of the Subscriber Agreement the signer will be presented with.","example":"1.2"}}}}}},"TeamPost":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name of the team.","example":"Team A"},"description":{"type":"string","description":"A brief description of the team.","example":"Team A description."}},"required":["name"]}}}},"TeamPut":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name of the team.","example":"Team A"},"description":{"type":"string","description":"A brief description of the team.","example":"Team A description."}},"required":["name"]}}}},"WebhookEndpointEnroll":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url","subscriptions"],"properties":{"url":{"type":"string","format":"uri","description":"Callback URL that will receive webhook POST requests.","example":"https://example.com/callback/ssl-com"},"subscriptions":{"type":"array","minItems":1,"description":"Event names to subscribe to, or `[\"*\"]` for all events.","items":{"type":"string"},"example":["*"]},"name":{"type":"string","description":"Optional display name.","example":"Production callback"},"description":{"type":"string","description":"Optional description.","example":"Integration callback for domain validation events"}}}}}},"WebhookEndpointUpdate":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Updated callback URL."},"subscriptions":{"type":"array","minItems":1,"description":"Updated event subscriptions.","items":{"type":"string"}},"name":{"type":"string","description":"Updated display name."},"description":{"type":"string","description":"Updated description."},"status":{"type":"string","enum":["active","disabled","archived"],"description":"Updated delivery status. Disabled and archived endpoints do not receive events."},"rotate_signing_key":{"type":"boolean","description":"When `true`, generates a new signing key and returns it once in the response.\nThe previous key is invalidated immediately. Changing `url` alone does not rotate\nthe key.\n"}}}}}}},"responses":{"400":{"description":"Bad Request - The request could not be understood or was missing required parameters.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestError"},"examples":{"default":{"summary":"A default example of a 400 error response.","value":{"code":"BAD_REQUEST","message":"The request could not be understood or was missing required parameters.","details":[]}}}}}},"401":{"description":"Unauthorized - The request requires authentication or the provided authentication credentials are invalid.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestError"},"examples":{"default":{"summary":"A default example of a 401 error response.","value":{"code":"UNAUTHORIZED","message":"The request requires authentication or the provided authentication credentials are invalid.","details":[]}}}}}},"403":{"description":"Forbidden - Access is denied due to insufficient permissions.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestError"},"examples":{"default":{"summary":"A default example of a 403 error response.","value":{"code":"FORBIDDEN","message":"Access is denied due to insufficient permissions.","details":[]}}}}}},"404":{"description":"Not Found - The requested resource could not be found.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestError"},"examples":{"default":{"summary":"A default example of a 404 error response.","value":{"code":"NOT_FOUND","message":"The requested resource could not be found.","details":[]}}}}}},"422":{"description":"Unprocessable Content - The request was well-formed but was unable to be followed due to semantic errors.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestError"},"examples":{"default":{"summary":"A default example of a 422 error response.","value":{"code":"UNPROCESSABLE_CONTENT","message":"The request was well-formed but was unable to be processed due to errors.","details":[]}}}}}},"500":{"description":"Internal Server Error - An error occurred on the server.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestError"},"examples":{"default":{"summary":"A default example of a 500 error response.","value":{"code":"INTERNAL_SERVER_ERROR","message":"An error occurred on the server.","details":[]}}}}}},"503":{"description":"Service Unavailable - The server is currently unable to handle the request due to temporary overload or scheduled maintenance.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestError"},"examples":{"default":{"summary":"A default example of a 503 error response.","value":{"code":"SERVICE_UNAVAILABLE","message":"The server is currently unable to handle the request due to temporary overload or scheduled maintenance.","details":[]}}}}}}},"schemas":{"APIToken":{"description":"An API token used for authenticating API requests. Tokens have configurable scopes that control which endpoints they can access.","type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the API token.","example":"00000000-0000-0000-0000-000000000000"},"name":{"type":"string","description":"Name of the API token.","example":"CI/CD Pipeline Token"},"description":{"type":"string","description":"Description of the API token.","example":"Token used for automated certificate issuance."},"status":{"type":"string","description":"The status of the API token.","enum":["active","disabled","archived","revoked","expired"],"example":"active"},"token_id":{"type":"string","description":"Public token identifier.","example":"0192e4a1-7b3c-7d4e-8f5a-6b7c8d9e0f1a"},"scopes":{"type":"object","description":"Scope permissions that control which API endpoints the token can access. Each key is a scope path (e.g., `api.v1.certificate_manager.certificates`) and the value is an array of permissions (`read`, `write`). Use `*` as a wildcard key to grant access to all scope paths.\n","additionalProperties":{"type":"array","items":{"type":"string","enum":["read","write"]}},"example":{"api.v1.certificate_manager.certificates":["read","write"],"api.v1.certificate_manager.certificate_profiles":["read"]}},"scope_descriptions":{"type":"array","description":"Human-readable descriptions of the token's scope permissions.","items":{"type":"string"},"example":["Read Certificates","Write Certificates","Read Certificate Profiles"]},"ownable_type":{"type":"string","description":"The type of resource that owns this token.","example":"Authentication::Account"},"created_at":{"type":"string","format":"date-time","description":"Timestamp when the token was created.","example":"2025-01-15T10:30:00Z"},"updated_at":{"type":"string","format":"date-time","description":"Timestamp when the token was last updated.","example":"2025-01-15T10:30:00Z"}},"required":["id","name","token_id","scopes"]},"APITokenCreateResponse":{"description":"Response returned when a new API token is created. Includes the `token_secret` which is only shown once at creation time.","allOf":[{"$ref":"#/components/schemas/APIToken"},{"type":"object","properties":{"token_secret":{"type":"string","description":"The secret key used for Bearer token authentication. **This value is only returned once at creation time and cannot be retrieved again.** Store it securely immediately after creation.\n","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"},"message":{"type":"string","description":"A warning message reminding the user to save the token secret.","example":"This is the only time the token secret will be shown. Please save it securely."}},"required":["token_secret","message"]}]},"Account":{"description":null,"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the account.","example":"00000000-0000-0000-0000-000000000000"},"name":{"type":"string","description":"Name of the account.","example":"Account A"},"description":{"type":"string","description":"Description of the account.","example":"Account A Description"},"private_pki":{"type":"boolean","description":"Indicates whether the account uses private PKI.","example":false}},"required":["id","name"]},"BusinessCategory":{"description":"Business category for organization create and update (`POST`/`PUT .../organizations`).\nOptional on create. All four values are accepted on the organization record.\n\nThis is not the same enum used for EV validation requests. For\n`POST .../organizations/{id}/validation`, use `EndorsementBusinessCategory` instead.\n","type":"string","example":"Private Organization","enum":["Private Organization","Government Entity","Business Entity","Non-Commercial Entity"]},"Certificate":{"description":null,"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the certificate.","example":"00000000-0000-0000-0000-000000000000"},"body":{"type":"string","description":"The PEM-encoded certificate body.","example":"-----BEGIN CERTIFICATE-----\\n-----END CERTIFICATE-----\\n"},"chain":{"type":"string","description":"The PEM-encoded certificate chain.","example":"-----BEGIN CERTIFICATE-----\\n-----END CERTIFICATE-----\\n-----BEGIN CERTIFICATE-----\\n-----END CERTIFICATE-----\\n"},"status":{"$ref":"#/components/schemas/ObjectStatus"},"issued_at":{"type":"string","description":"The date and time when the certificate was issued.","example":"2025-08-22 22:45:00 -0500","format":"date-time"},"expires_at":{"type":"string","description":"The date and time when the certificate expires (certificate notAfter date).","example":"2026-08-22 22:45:00 -0500","format":"date-time"},"revoked_at":{"type":"string","description":"The date and time when the certificate was revoked.","example":"2025-08-22 22:45:00 -0500","format":"date-time"},"embedded_svg_mark":{"type":"string","description":"Base64-encoded data URI of the SVG mark image extracted from the certificate's logotype extension. Only present for mark certificates (VMC, CMC, GMC, MRM).","example":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg=="},"bimi":{"type":"object","description":"BIMI (Brand Indicators for Message Identification) configuration for the certificate. Only present for mark certificates (VMC, CMC, GMC, MRM).","properties":{"certificate_url":{"type":"string","description":"Public URL to the PEM certificate file hosted on the CDN.","format":"uri","example":"https://cdn.example.com/certificates/cert.pem"},"logo_url":{"type":"string","description":"Public URL to the SVG logo file hosted on the CDN.","format":"uri","example":"https://cdn.example.com/certificates/logo.svg"},"dns_record":{"type":"object","description":"DNS TXT record configuration for BIMI.","properties":{"type":{"type":"string","description":"DNS record type.","example":"TXT"},"host":{"type":"string","description":"DNS host for the BIMI record.","example":"default._bimi.example.com"},"value":{"type":"string","description":"DNS TXT record value containing the BIMI version, logo URL, and authority URL.","example":"v=BIMI1; l=https://cdn.example.com/logo.svg; a=https://cdn.example.com/cert.pem"}}}}}},"required":["id","body","chain","status","issued_at","expires_at","revoked_at"]},"CertificateProfile":{"description":null,"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the certificate profile.","example":"00000000-0000-0000-0000-000000000000"},"name":{"type":"string","description":"Name of the certificate profile.","example":"DV TLS - RSA"},"description":{"type":"string","description":"Description of the certificate profile.","example":"DV TLS - RSA Description"},"certificate_type":{"type":"string","description":"The type of certificate this profile issues.","example":"DVTLS","enum":["DVTLS","OVTLS","EVTLS","VMC","CMC","GMC","MRM"]},"status":{"$ref":"#/components/schemas/ObjectStatus"}},"required":["id","name","description","certificate_type"]},"CertificateRequest":{"description":null,"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the certificate request.","example":"00000000-0000-0000-0000-000000000000"},"certificate_signing_request":{"type":"string","description":"The PEM-encoded certificate signing request (CSR).","example":"-----BEGIN CERTIFICATE REQUEST-----\\n-----END CERTIFICATE REQUEST-----\\n"},"expires_at":{"type":"string","description":"The date that the certificate will expire on (certificate notAfter date)","example":"2025-08-22 22:45:00 -0500","format":"date-time"},"certificate":{"description":"The issued certificate. This is null until issuance completes — for example while the\nrequest is still pending validation, in progress, or has failed. The key is always\npresent in the response; poll the request until `status` is `active` to obtain the\ncertificate.\n","oneOf":[{"$ref":"#/components/schemas/Certificate"},{"type":"null"}]},"certificate_profile":{"$ref":"#/components/schemas/CertificateProfile"},"organization":{"description":"The validated organization for OV and EV certificates. This is null for DV certificates,\nwhich are not associated with an organization. The key is always present in the response.\n","oneOf":[{"$ref":"#/components/schemas/Organization"},{"type":"null"}]},"status":{"$ref":"#/components/schemas/ObjectStatus"},"domains":{"type":"array","description":"CertificateRequest-owned domains included in the certificate request. Perform DCV on\nteam-owned domains via `GET/PUT /teams/{team_id}/domains`.\n","items":{"$ref":"#/components/schemas/CertificateRequestDomain"}}},"required":["id","certificate_signing_request","status","expires_at","certificate","certificate_profile","organization","domains"]},"CertificateRequestDomain":{"description":"CertificateRequest-owned domain included in a certificate request response. DCV is performed\non team-owned domains via `GET/PUT /teams/{team_id}/domains`; this object reflects issuance\neligibility on the certificate request only.\n","type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the CertificateRequest-owned domain record.","example":"00000000-0000-0000-0000-000000000000"},"subject":{"type":"string","description":"The subject of the domain.","example":"www.demo.com"},"second_level_domain":{"type":"string","description":"The second-level domain.","example":"demo"},"top_level_domain":{"type":"string","description":"The top-level domain.","example":"com"},"transit_routing_domain":{"type":"string","description":"The transit routing domain.","example":"www"},"account_key_hash":{"type":"string","description":"The account key hash for ACME.","example":"2d3c96b6ea343d8b2327cfed4e4b487aa55c488cc"},"endorsed":{"type":"boolean","description":"Whether the domain is endorsed for issuance on this certificate request.","example":false},"expires_at":{"type":"string","description":"The expiry date and time for the active endorsement.","example":"","format":"date-time"},"status":{"$ref":"#/components/schemas/ObjectStatus"}},"required":["id","subject","second_level_domain","top_level_domain","transit_routing_domain","endorsed","expires_at"]},"Domain":{"description":null,"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the domain.","example":"00000000-0000-0000-0000-000000000000"},"subject":{"type":"string","description":"The subject of the domain.","example":"www.demo.com"},"second_level_domain":{"type":"string","description":"The second-level domain.","example":"demo"},"top_level_domain":{"type":"string","description":"The top-level domain.","example":"com"},"transit_routing_domain":{"type":"string","description":"The transit routing domain.","example":"www"},"account_key_hash":{"type":"string","description":"ACME account key thumbprint (JWK SHA-256). When set on domain create or create-validation,\nsubsequent validation option lists include only ACME DNS-01 (validation method 3.2.2.4.7,\nprotocol ACME_DNS_01), ACME HTTP-01 (validation method 3.2.2.4.19, protocol ACME_HTTP_01), and ACME TLS-ALPN-01\n(validation method 3.2.2.4.20, protocol ACME_TLS_ALPN_01). When omitted or\nblank, non-ACME methods are returned instead. Stored in `properties` on the domain record.\n","example":"2d3c96b6ea343d8b2327cfed4e4b487aa55c488cc"},"external_account_id":{"type":"string","description":"Caller-supplied external account identifier (e.g. RA account number) for integrator account\ncorrelation. Set on domain create or create-validation; stored in `properties` on the domain\nrecord. Returned on all Domain API responses and included in domain webhook payloads\n(`validation.domain.create`, `validation.domain.update`, `validation.domain.delete`). Does\nnot affect which validation options are offered.\n","example":"ac7-1k0df3m"},"endorsed":{"type":"boolean","description":"Whether the domain is endorsed.","example":true},"expires_at":{"type":"string","description":"The expiry date and time for the active endorsement. Empty string if the domain is not endorsed.","example":"2025-08-22 22:45:00 -0500","format":"date-time"},"status":{"$ref":"#/components/schemas/ObjectStatus"},"validation":{"$ref":"#/components/schemas/DomainValidation"},"endorsements":{"type":"array","description":"The list of endorsements for the domain.","items":{"$ref":"#/components/schemas/DomainEndorsement"}}},"required":["id","subject","second_level_domain","top_level_domain","transit_routing_domain","account_key_hash","endorsed","expires_at","status","endorsements"]},"DomainEndorsement":{"description":null,"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the domain endorsement.","example":"00000000-0000-0000-0000-000000000000"},"name":{"type":"string","description":"Name of the domain endorsement.","example":"demo.com"},"validation_method":{"$ref":"#/components/schemas/ValidationMethod"},"validation_level":{"type":"string","description":"The validation level of the endorsement.","example":"DV","enum":["DV"]},"protocol":{"$ref":"#/components/schemas/Protocol"},"expires_at":{"type":"string","description":"The expiry date and time for the endorsement. (This date is calculated by adding 198 days to the date of verification)","example":"2025-08-22 22:45:00 -0500","format":"date-time"},"created_at":{"type":"string","description":"The creation date and time of the endorsement.","example":"2024-08-22 22:45:00 -0500","format":"date-time"},"status":{"$ref":"#/components/schemas/ObjectStatus"}},"required":["id","name","validation_method","validation_level","protocol","expires_at","created_at","status"]},"DomainGroup":{"description":"A domain group links existing domains on a team. When `validation_methods` includes HTTP/HTTPS/DNS codes such as\n`3.2.2.4.18`, `3.2.2.4.19`, or `3.2.2.4.7`, members share the same `verification_value` for those methods within\nthe active batch. Creating a shared DCV group with overlapping domains archives prior active domain groups (shared\nDCV or email batch). Domains left out of the new batch are no longer in an active group until included in a future\nbatch; pending or in-progress validations on those orphan domains are cancelled. Existing domain endorsements are not\nrevoked.\n\nWhen `validation_methods` includes an email code and `validation_candidate` is set, the group is validated together\nvia `POST .../domain-groups/{id}/verify` while the group is active. Email batch create does not archive overlapping\ngroups; multiple active email batch groups may include the same domain (for example different validation candidates).\n","type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the domain group.","example":"00000000-0000-0000-0000-000000000000"},"status":{"$ref":"#/components/schemas/ObjectStatus"},"validation_methods":{"type":"array","items":{"type":"string"},"description":"Baseline Requirements DCV methods configured for this group. Shared token alignment applies only to methods in\nthis list.\n","example":["3.2.2.4.18","3.2.2.4.19","3.2.2.4.7"]},"validation_method":{"type":"string","description":"Legacy primary validation method for email batch groups. Empty string when not applicable.","example":"3.2.2.4.14"},"validation_candidate":{"type":"string","description":"Email address used for email batch validation. Empty string when not applicable.","example":"admin@demo.com"},"domains":{"type":"array","description":"Domains linked via the join table.","items":{"$ref":"#/components/schemas/Domain"}}},"required":["id","status","validation_methods","validation_method","validation_candidate","domains"]},"DomainValidation":{"description":null,"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the domain validation.","example":"00000000-0000-0000-0000-000000000000"},"manual_verification":{"type":"boolean","description":"This validation is marked for manual verification by the validation team. This should be used for verification methods not supported by the API.","example":false},"status":{"$ref":"#/components/schemas/ObjectStatus"},"verification_url":{"type":"string","description":"URL to the public domain verification page. Only present when an email-based validation option (3.2.2.4.4, 3.2.2.4.14) is selected. The verification token itself is never returned by the API — it is delivered only via the validation email — so the end user pastes the token from their email into this page to complete validation.","example":"https://api.ssl.com/verify_domain"},"verification_email_sent_at":{"type":"string","format":"date-time","description":"Timestamp of when the verification email was actually delivered. Empty string until delivery; remains empty if delivery failed. Only meaningful for email-based validation options.","example":"2024-08-22 22:45:00 -0500"},"domain_validation_option":{"description":"The validation option selected for this domain. Null until the caller selects one.","oneOf":[{"$ref":"#/components/schemas/DomainValidationOption"},{"type":"null"}]},"domain_validation_options":{"type":"array","description":"The list of domain validation options.","items":{"$ref":"#/components/schemas/DomainValidationOption"}}},"required":["id","status","manual_verification","verification_url","verification_email_sent_at","domain_validation_option","domain_validation_options"]},"DomainValidationOption":{"description":"A domain validation option. For ACME HTTP-01 (3.2.2.4.19), publish verification_value as the\nresponse body at candidate over HTTP (RFC 8555 keyAuthorization). For ACME TLS-ALPN-01\n(3.2.2.4.20), candidate is the FQDN; verification_value is the hex SHA-256 digest of\nkeyAuthorization for the id-pe-acmeIdentifier certificate extension (RFC 8737).\n","type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the domain validation option.","example":"00000000-0000-0000-0000-000000000000"},"candidate":{"type":"string","description":"The validation target. DNS methods use a record name; file/ACME HTTP methods use a URL;\nACME TLS-ALPN-01 (3.2.2.4.20) uses the FQDN. For 3.2.2.4.19 this is\nhttp://\u003cfqdn\u003e/.well-known/acme-challenge/\u003ctoken\u003e. For HTTP/HTTPS file auth this is the\nfull URL under /.well-known/pki-validation/{domain_uuid}.txt. Legacy\nin-flight options may still use verify.txt; checks use the stored\ncandidate as-is (no multi-path probing).\n","example":"_pki-validation.demo.com"},"protocol":{"$ref":"#/components/schemas/Protocol"},"expires_at":{"type":"string","description":"The expiry date and time for the validation option.","example":"2024-08-22 22:45:00 -0500","format":"date-time"},"verification_value":{"type":"string","description":"Value the requester must publish. For 3.2.2.4.19 this is the ACME keyAuthorization\n(\u003ctoken\u003e.\u003caccount_key_thumbprint\u003e) served as the response body at candidate. For 3.2.2.4.20\nthis is the hex SHA-256 digest of keyAuthorization for the TLS certificate extension.\n","example":"8cad546caaa24524b7b6607cf277a032"},"validation_method":{"$ref":"#/components/schemas/ValidationMethod"}},"required":["id","candidate","protocol","expires_at","verification_value","validation_method"],"examples":{"acme_http_01":{"summary":"ACME HTTP-01 validation option","value":{"id":"00000000-0000-0000-0000-000000000001","validation_method":"3.2.2.4.19","protocol":"ACME_HTTP_01","candidate":"http://demo.com/.well-known/acme-challenge/dpyyPXaqGjhHVUP3Ui1cg7sznvr","verification_value":"dpyyPXaqGjhHVUP3Ui1cg7sznvr.2d3c96b6ea343d8b2327cfed4e4b487aa55c488cc","expires_at":"2025-08-22T22:45:00-05:00"}},"acme_tls_alpn_01":{"summary":"ACME TLS-ALPN-01 validation option","value":{"id":"00000000-0000-0000-0000-000000000003","validation_method":"3.2.2.4.20","protocol":"ACME_TLS_ALPN_01","candidate":"demo.com","verification_value":"58675369b6a9f6b071ed90f0dba6a5a5e8d7fd9c42394bd2dd1fb11ed49921a2","expires_at":"2025-08-22T22:45:00-05:00"}}}},"DomainVerificationCandidate":{"description":null,"type":"object","properties":{"validation_method":{"$ref":"#/components/schemas/ValidationMethod"},"name":{"type":"string","description":"The name of the validation method.","example":"Validation via E-Mail"},"protocol":{"$ref":"#/components/schemas/Protocol"},"candidates":{"type":"array","items":{"type":"string","description":"The email address of the candidate.","example":"email@example.com"}}},"required":["validation_method","name","protocol","candidates"]},"EndorsementBusinessCategory":{"description":"Business category for EV organization validation (`POST .../organizations/{id}/validation`\nwith `validation_level: \"EV\"`). `\"Business Entity\"` is not accepted and returns `422`.\n\nIf an incorrect value was submitted before approval, send another validation request\nwith the same `validation_level` and the corrected `business_category`. The prior\n`pending_review` endorsement is archived and replaced by the new submission.\n\nIntegrators exposing this field to end users should use a select control constrained\nto these values, not a free-text input.\n","type":"string","example":"Private Organization","enum":["Private Organization","Government Entity","Non-Commercial Entity"]},"InformationSource":{"description":null,"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the information source.","example":"00000000-0000-0000-0000-000000000000"},"name":{"type":"string","description":"Name of the information source.","example":"Information source A"},"description":{"type":"string","description":"Description of the information source.","example":"Information source A Description"},"url":{"type":"string","description":"URL for the information source.","example":"https://www.sos.state.tx.us/corp/sosda/index.shtml"},"city":{"type":"string","description":"City for the information source.","example":"Houston"},"state":{"type":"string","description":"State for the information source.","example":"Texas"},"country":{"type":"string","description":"Country for the information source (Format ISO 3166-Alpha-2).","example":"US"},"notes":{"type":"string","description":"Additional notes for the information source.","example":"Examples notes"}},"required":["id","name","url","country"]},"Metadata":{"description":"Metadata included for collection (list fetch) operations, providing details about pagination, navigation, and applied filters or sorting.","type":"object","properties":{"page":{"type":"integer","description":"The current page number being returned in the collection.","example":1},"per_page":{"type":"integer","description":"The number of items returned per page in the collection.","example":25},"total_records":{"type":"integer","description":"The total number of records available in the collection, across all pages.","example":100},"total_pages":{"type":"integer","description":"The total number of pages available, calculated based on the total records and items per page.","example":4},"previous_page":{"type":"string","description":"The URL of the previous page in the collection, or null if there is no previous page.","example":"https://api.staging.ssl.com/api/v1/resources?page=1\u0026per_page=25"},"next_page":{"type":"string","description":"The URL of the next page in the collection, or null if there is no next page.","example":"https://api.staging.ssl.com/api/v1/resources?page=3\u0026per_page=25"},"first_page":{"type":"string","description":"The URL of the first page in the collection.","example":"https://api.staging.ssl.com/api/v1/resources?page=1\u0026per_page=25"},"last_page":{"type":"string","description":"The URL of the last page in the collection.","example":"https://api.staging.ssl.com/api/v1/resources?page=4\u0026per_page=25"},"order":{"type":"string","description":"The order in which the results are sorted. This typically reflects the sorting applied, such as ascending or descending by a specific field.","example":"created_at"},"filter":{"type":"string","description":"The filters applied to the collection, describing the criteria used to narrow down the results.","example":"status=active"}}},"ObjectStatus":{"description":"The status of the resource.","type":"string","example":"pending","enum":["pending","active","pending_review","in_progress","expired","revoked","archived","cancelled","failed","pending_highrisk_review"]},"Organization":{"description":null,"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the organization.","example":"00000000-0000-0000-0000-000000000000"},"name":{"type":"string","description":"Name of the organization. (This maps to the O field in the certificate)","example":"Organization A"},"description":{"type":"string","description":"Description of the organization.","example":"Organization A Description"},"assumed_name":{"type":"string","description":"Alternate or assumed name of the organization. (This overides the O field in the certificate, if approved)","example":"Org A"},"business_category":{"allOf":[{"$ref":"#/components/schemas/BusinessCategory"}],"description":"Optional on create and update. All four `BusinessCategory` values are accepted."},"address_1":{"type":"string","description":"Primary address of the organization.","example":"123 Main St"},"address_2":{"type":"string","description":"Secondary address of the organization (if applicable).","example":"Suite 456"},"city":{"type":"string","description":"City where the organization is located. (This maps to the L field in the certificate)","example":"San Francisco"},"state":{"type":"string","description":"State or province where the organization is located. (This maps to the ST field in the certificate)","example":"CA"},"zip":{"type":"string","description":"ZIP or postal code of the organization's location.","example":94105},"country":{"type":"string","description":"Country where the organization is located (ISO 3166-1 alpha-2 code). (This maps to the C field in the certificate)","example":"US"},"phone_number":{"type":"string","description":"Contact phone number of the organization.","example":"+1-123-456-7890"},"admin_email":{"type":"string","format":"email","description":"Organization contact email for reaching the applicant. Optional on create and update.\nWhen related organization or domain validation evidence has been verified per policy,\nthis address may be used as the Reliable Method of Communication (RMOC).\n","example":"admin@example.com"},"company_number":{"type":"string","description":"Official company registration number. (This maps to the serialNumber field in the certificate)","example":12345678},"incorporation_city":{"type":"string","description":"City where the organization is incorporated. (This maps to the 1.3.6.1.4.1.311.60.2.1.1 field in the certificate)","example":"Wilmington"},"incorporation_state":{"type":"string","description":"State or province where the organization is incorporated. (This maps to the 1.3.6.1.4.1.311.60.2.1.2 field in the certificate)","example":"DE"},"incorporation_country":{"type":"string","description":"Country where the organization is incorporated (ISO 3166-1 alpha-2 code). (This maps to the 1.3.6.1.4.1.311.60.2.1.3 field in the certificate)","example":"US"},"organization_identifier":{"type":"string","description":null,"example":null},"customer_identifier":{"type":"string","description":"The customer identifier for the organization.","example":"00000000-0000-0000-0000-000000000000"},"contact_name":{"type":"string","description":"EV contact person name."},"contact_title":{"type":"string","description":"EV contact person title."},"contact_email":{"type":"string","format":"email","description":"EV contact email."},"priority":{"type":"integer","description":"The priority of the endorsement.","example":1},"status":{"$ref":"#/components/schemas/ObjectStatus"},"endorsements":{"type":"array","description":"The list of endorsements for the organization. There will only 1 endorsement for each validation type.","items":{"$ref":"#/components/schemas/OrganizationEndorsement"}}},"required":["id","name","address_1","city","state","zip","country","phone_number","endorsements"]},"OrganizationEndorsement":{"description":"Organization validation endorsement. Profile fields may be omitted on `pending_review`\nendorsements created with only `validation_level`; they are required before approval\n(`active`) per validation level (see `POST .../validation`).\n","type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the resource.","example":"00000000-0000-0000-0000-000000000000"},"validation_level":{"$ref":"#/components/schemas/ValidationLevel"},"name":{"type":"string","description":"Name of the organization. Optional at create; required before OV/EV approval. (This maps to the O field in the certificate)","example":"Organization A"},"assumed_name":{"type":"string","description":"Alternate or assumed name of the organization. (This overides the O field in the certificate, if approved)","example":"Org A"},"business_category":{"allOf":[{"$ref":"#/components/schemas/EndorsementBusinessCategory"}],"description":"Optional at create; required before EV approval."},"city":{"type":"string","description":"City where the organization is located. Optional at create; required before OV/EV approval. (This maps to the L field in the certificate)","example":"San Francisco"},"state":{"type":"string","description":"State or province where the organization is located. (This maps to the ST field in the certificate)","example":"CA"},"country":{"type":"string","description":"Country where the organization is located (ISO 3166-1 alpha-2 code). Optional at create; required before OV/EV approval. (This maps to the C field in the certificate)"},"company_number":{"type":"string","description":"Official company registration number. Optional at create; required before EV approval. (This maps to the serialNumber field in the certificate)","example":12345678},"incorporation_city":{"type":"string","description":"City where the organization is incorporated. (This maps to the 1.3.6.1.4.1.311.60.2.1.1 field in the certificate)","example":"Wilmington"},"incorporation_state":{"type":"string","description":"State or province where the organization is incorporated. (This maps to the 1.3.6.1.4.1.311.60.2.1.2 field in the certificate)","example":"DE"},"incorporation_country":{"type":"string","description":"Country where the organization is incorporated (ISO 3166-1 alpha-2 code). Optional at create; required before EV approval. (This maps to the 1.3.6.1.4.1.311.60.2.1.3 field in the certificate)","example":"US"},"street_address":{"type":"string","description":"Street address of the organization. Present on mark certificate endorsements (VMC, CMC, GMC, MRM). Maps to the street field in the certificate.","example":"123 Main St"},"postal_code":{"type":"string","description":"Postal code of the organization. Present on mark certificate endorsements (VMC, CMC, GMC, MRM).","example":"94105"},"legal_entity_identifier":{"type":"string","description":"Legal Entity Identifier (LEI). Present on mark certificate endorsements (VMC, CMC, GMC, MRM)."},"organization_identifier":{"type":"string","description":"Organization identifier. Present on mark certificate endorsements (VMC, CMC, GMC, MRM)."},"trademark_country":{"type":"string","description":"Country where the trademark is registered (ISO 3166-1 alpha-2 code). Present on VMC and MRM endorsements. Maps to OID 1.3.6.1.4.1.53087.1.3 in the certificate.","example":"US"},"trademark_office":{"type":"string","description":"Name of the trademark office where the mark is registered. Present on VMC and MRM endorsements. Maps to OID 1.3.6.1.4.1.53087.1.2 in the certificate.","example":"United States Patent and Trademark Office (USPTO)"},"trademark_identifier":{"type":"string","description":"Trademark registration number or identifier. Present on VMC and MRM endorsements. Maps to OID 1.3.6.1.4.1.53087.1.4 in the certificate.","example":"97123456"},"wordmark":{"type":"string","description":"The wordmark associated with the trademark. Present on VMC and MRM endorsements.","example":"ACME"},"prior_use_mark_source_url":{"type":"string","description":"URL demonstrating prior use of the mark. Present on CMC and MRM endorsements.","example":"https://example.com/brand"},"statute_citation":{"type":"string","description":"Citation of the statute authorizing use of the mark. Present on GMC endorsements.","example":"15 U.S.C. § 1051"},"statute_url":{"type":"string","description":"URL to the statute text. Present on GMC endorsements.","example":"https://www.law.cornell.edu/uscode/text/15/1051"},"statute_country":{"type":"string","description":"Country of the statute (ISO 3166-1 alpha-2 code). Present on GMC endorsements.","example":"US"},"statute_state":{"type":"string","description":"State or province of the statute. Present on GMC endorsements.","example":"California"},"statute_locality":{"type":"string","description":"Locality of the statute. Present on GMC endorsements."},"mark_image":{"type":"string","description":"URL to the uploaded SVG mark image. Present on mark certificate endorsements (VMC, CMC, GMC, MRM). The SVG must conform to the BIMI SVG Tiny Portable/Secure profile.","format":"uri","example":"https://example.com/rails/active_storage/blobs/mark.svg"},"expires_at":{"type":"string","description":"The expiry date and time for the endorsement.","example":"2025-08-22 22:45:00 -0500","format":"date-time"},"created_at":{"type":"string","description":"The creation date and time of the endorsement.","example":"2024-08-22 22:45:00 -0500","format":"date-time"},"customer_identifier":{"type":"string","description":"The customer identifier for the organization.","example":"00000000-0000-0000-0000-000000000000"},"priority":{"type":"integer","description":"The priority of the endorsement.","example":1},"information_sources":{"type":"array","items":{"$ref":"#/components/schemas/InformationSource"}},"status":{"$ref":"#/components/schemas/ObjectStatus"},"contact_name":{"type":"string","description":"EV contact person name. Optional at create; required before EV approval."},"contact_title":{"type":"string","description":"EV contact person title. Optional at create; required before EV approval."},"contact_email":{"type":"string","format":"email","description":"EV contact email. Optional at create; required before EV approval."}},"required":["id","validation_level","status","expires_at","created_at","customer_identifier","priority","information_sources"]},"Protocol":{"description":"The protocol used for the object.","type":"string","example":"TXT","enum":["ACME_DNS_01","ACME_HTTP_01","ACME_TLS_ALPN_01","CNAME","EMAIL","HTTP","HTTPS","TXT"]},"RequestError":{"description":null,"type":"object","properties":{"code":{"type":"string","description":"The error code."},"message":{"type":"string","description":"The error message."},"details":{"type":"array","description":"List of specific details relating to the error.","items":{"type":"string"}}},"required":["code","message","details"]},"RevocationReason":{"description":"Revocation reason accepted by the public API revoke endpoint.","type":"string","example":"unspecified","enum":["unspecified","keycompromise","affiliationchanged","superseded","cessationofoperation"]},"RevocationSource":{"description":"Revocation source accepted by the public API revoke endpoint.","type":"string","example":"portal","enum":["portal","third_party"]},"Status":{"description":"## Status Schema\nThis schema represents the response format for the `/status` endpoint. It provides the current operational status of the system and its version.\n","type":"object","properties":{"status":{"description":"The current operational status of the system. Typically, this field will contain \"OK\" to indicate that the system is functioning normally. In other cases, it could provide different status messages if there are issues or special conditions.\n","type":"string","example":"OK"},"version":{"description":"The version of the API or system that is currently running. This helps in tracking the version of the system and ensuring that clients are aware of the version they are interacting with.\n","type":"string","example":"v1.0.0"}}},"SubscriberAgreementSigner":{"description":"A Subscriber Agreement signer attached to an EV organization endorsement. The signer is the\nindividual at the subscriber organization who accepts the EV Subscriber Agreement (EVSA) after\ncompleting identity verification. Multiple signer records can exist for one endorsement across\ntime (rejected / superseded signers are archived and remain readable via the history endpoint),\nbut only one live signer exists at a time.\n","type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the resource.","example":"00000000-0000-0000-0000-000000000000"},"signer_state":{"type":"string","description":"EVSA acceptance workflow state, distinct from `status`.\n\u003cbr\u003e\u003cbr\u003e\n`pending` → `veriff_open` ⇄ `veriff_returned` → `approved` → `accepted`.\n\u003cbr\u003e\n`evidence_uploaded` is the manual-evidence path (validation team skips Veriff);\nit is reachable from `pending`, `veriff_open` and `veriff_returned` and leads to\n`approved` / `rejected`. `rejected` is terminal — the record is archived\n(`status` becomes `archived`) and a replacement signer can be created.\n","enum":["pending","veriff_open","veriff_returned","evidence_uploaded","approved","rejected","accepted"],"example":"pending"},"agreement_type":{"type":"string","description":"The agreement being signed. Signers created through this API always sign the EVSA —\na caller-supplied `agreement_type` is ignored on create/update and the server forces `evsa`.\n`msa` is reserved for future use.\n","enum":["evsa","msa"],"example":"evsa"},"agreement_version":{"type":"string","description":"Version of the Subscriber Agreement presented to the signer. Empty string when not yet set.\n","example":"1.2"},"contact_name":{"type":"string","description":"Name of the signer. Empty string when unset.","example":"Jane Director"},"contact_title":{"type":"string","description":"Title of the signer at the subscriber organization. Empty string when unset.","example":"Director"},"contact_email":{"type":"string","format":"email","description":"Email address of the signer. Identity-verification and acceptance links are sent to this\naddress. Empty string when unset.\n","example":"jane.director@example.com"},"status":{"allOf":[{"$ref":"#/components/schemas/ObjectStatus"}],"description":"Lifecycle status of the signer record: `pending_review` while the acceptance workflow is in\nprogress, `active` once the agreement is accepted, `archived` once the signer is rejected or\nsuperseded.\n"},"accepted_at":{"type":"string","description":"The date and time the signer accepted the Subscriber Agreement (ISO 8601). Empty string\nuntil the agreement is accepted.\n","example":"2026-07-01 12:00:00 UTC","format":"date-time"},"created_at":{"type":"string","description":"The creation date and time of the signer record.","example":"2026-07-01 12:00:00 UTC","format":"date-time"},"veriff_status":{"type":"string","description":"Raw provider status of the signer's current Veriff identity-verification session\n(for example `created`, `started`, `submitted`, `approved`, `declined`,\n`resubmission_requested`, `expired`, `abandoned`). Empty string until a\nverification session exists.\n","example":"started"}},"required":["id","signer_state","agreement_type","agreement_version","contact_name","contact_title","contact_email","status","accepted_at","created_at","veriff_status"]},"Team":{"description":null,"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the team.","example":"00000000-0000-0000-0000-000000000000"},"name":{"type":"string","description":"Name of the team.","example":"Team A"},"description":{"type":"string","description":"Description of the team.","example":"Team A Description"},"status":{"$ref":"#/components/schemas/ObjectStatus"},"private_pki":{"type":"boolean","description":"Indicates whether the team uses private PKI. This flag can be set directly on the team.","example":false},"optional_organization_create_payload":{"type":"boolean","description":"When enabled, `POST /teams/{team_id}/organizations` accepts an empty request body. The flag may be\nset on the team or inherited from the account.\n","example":false}},"required":["id","name"]},"ValidationLevel":{"description":"The validation level used for the object.","type":"string","example":"OV","enum":["OV","EV","VMC","CMC","GMC","MRM"]},"ValidationMethod":{"description":"The validation method used for the object.","type":"string","example":"3.2.2.4.7","enum":["3.2.2.4.4","3.2.2.4.7","3.2.2.4.14","3.2.2.4.18","3.2.2.4.19","3.2.2.4.20","3.2.2.5.1"]},"WebhookEndpoint":{"description":"An account webhook endpoint that receives API event notifications.","type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the webhook endpoint.","example":"00000000-0000-0000-0000-000000000000"},"name":{"type":"string","description":"Display name for the webhook endpoint.","example":"Production callback"},"description":{"type":"string","description":"Optional description of the webhook endpoint.","example":"Namecheap staging integration"},"url":{"type":"string","format":"uri","description":"HTTPS (or HTTP) URL that receives webhook POST requests.","example":"https://example.com/callback/ssl-com"},"subscriptions":{"type":"array","description":"Event names to receive, or `[\"*\"]` for all events. Event names use underscored\nmodule paths, for example `validation.domain.create` and\n`certificate_manager.certificate_request.update`.\n","items":{"type":"string"},"example":["validation.domain.create","validation.domain.update","validation.domain.destroy"]},"status":{"type":"string","description":"Delivery status of the endpoint.","enum":["active","disabled","archived"],"example":"active"},"created_at":{"type":"string","format":"date-time","description":"Timestamp when the endpoint was created.","example":"2025-01-15T10:30:00Z"},"updated_at":{"type":"string","format":"date-time","description":"Timestamp when the endpoint was last updated.","example":"2025-01-15T10:30:00Z"}},"required":["id","url","subscriptions","status"]},"WebhookEndpointEnrollResponse":{"description":"Response returned when a webhook endpoint is enrolled. Includes `signing_key`, which is\nonly returned once at enrollment time.\n","allOf":[{"$ref":"#/components/schemas/WebhookEndpoint"},{"type":"object","properties":{"signing_key":{"type":"string","description":"Key used to verify the `X-Signature` header on delivered webhooks. **Shown only once\nat enrollment (or after explicit rotation).** Store it securely.\n","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2"},"message":{"type":"string","description":"Reminder to store the signing key securely.","example":"This is the only time the signing key will be shown. Store it securely."}},"required":["signing_key","message"]}]},"WebhookEndpointRotateResponse":{"description":"Response returned when `rotate_signing_key` is true on update.","allOf":[{"$ref":"#/components/schemas/WebhookEndpoint"},{"type":"object","properties":{"signing_key":{"type":"string","description":"New signing key. The previous key is invalidated immediately."},"message":{"type":"string","description":"Reminder to store the signing key securely."}},"required":["signing_key","message"]}]},"WebhookEvent":{"description":null,"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the webhook event."},"event":{"type":"string","description":"The event type."},"payload":{"type":"string","description":"The payload of the webhook event."}},"required":["id","event","payload"]},"WebhookSignatureVerification":{"description":"## Webhook signature verification\n\nWebhook deliveries use `POST` requests with a JSON body:\n\n```json\n{\n  \"id\": \"event-uuid\",\n  \"event\": \"validation.domain.update\",\n  \"payload\": { }\n}\n```\n\nThe `X-Signature` header is `HMAC-SHA256` of the **raw request body** (the JSON string), using\nyour endpoint's `signing_key` from enrollment or rotation, rendered as lowercase hex.\n\nLegacy endpoints enrolled via console (without a per-endpoint key) are signed with a global\nplatform key; new API enrollments always receive a dedicated `signing_key`.\n\nVerify with constant-time comparison:\n\n```\nexpected = HMAC-SHA256(signing_key, raw_body).hexdigest()\nsecure_compare(expected, request.headers[\"X-Signature\"])\n```\n","type":"object"}},"securitySchemes":{"token":{"type":"http","scheme":"bearer"}}},"paths":{"/accounts/current":{"get":{"operationId":"fetch_current_account","summary":"( fetch_current_account )\n","description":"## Purpose\nThis endpoint retrieves the account information associated with the bearer token used for authentication. The account is determined from the API token's ownable relationship.\n","tags":["Authentication / Accounts (fetch_current_account)"],"responses":{"200":{"description":"Account details successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/certificate-profiles":{"get":{"operationId":"fetch_certificate_profiles","summary":"( fetch_certificate_profiles )\n","description":"## Purpose\nThis endpoint retrieves a list of certificate profiles with support for pagination to handle large datasets efficiently.\n","tags":["Certificate Manager / Certificate Profiles"],"parameters":[{"$ref":"#/components/parameters/page_param"},{"$ref":"#/components/parameters/per_page_param"},{"$ref":"#/components/parameters/filters_param"},{"$ref":"#/components/parameters/order_param"}],"responses":{"200":{"description":"A list of certificate profiles was successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"},"X-Pagination":{"$ref":"#/components/headers/X-Pagination"}},"content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"$ref":"#/components/schemas/CertificateProfile"}},"metadata":{"$ref":"#/components/schemas/Metadata"}}}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/certificate-profiles/{id}":{"get":{"operationId":"fetch_certificate_profile_by_id","summary":"( fetch_certificate_profile_by_id )\n","description":"## Purpose\nThis endpoint retrieves the details of a specific certificate profile by its unique identifier.\n","tags":["Certificate Manager / Certificate Profiles"],"parameters":[{"$ref":"#/components/parameters/id_param"}],"responses":{"200":{"description":"Successfully retrieved the certificate profile details.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateProfile"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/information-sources":{"get":{"operationId":"fetch_information_sources","summary":"( fetch_information_sources )\n","description":"## Purpose\nThis endpoint retrieves a list of information sources, supporting pagination, to handle large datasets efficiently. This endpoint also support filtering and ordering data for complex queries.\n","tags":["Validation / Utility"],"parameters":[{"$ref":"#/components/parameters/page_param"},{"$ref":"#/components/parameters/per_page_param"},{"$ref":"#/components/parameters/filters_param"},{"$ref":"#/components/parameters/order_param"}],"responses":{"200":{"description":"A list of information sources was successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"},"X-Pagination":{"$ref":"#/components/headers/X-Pagination"}},"content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"$ref":"#/components/schemas/InformationSource"}},"metadata":{"$ref":"#/components/schemas/Metadata"}}}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/information-sources/{id}":{"get":{"operationId":"fetch_information_source_by_id","summary":"( fetch_information_source_by_id )\n","description":"## Purpose\nThis endpoint retrieves the details of a specific information source identified by its unique ID.\n","tags":["Validation / Utility"],"parameters":[{"$ref":"#/components/parameters/id_param"}],"responses":{"200":{"description":"Successfully retrieved the information source details.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InformationSource"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/status":{"get":{"operationId":"fetch_status","summary":"( fetch_status )\n","description":"## Purpose\nThis endpoint retrieves the current operational status of the API.\n","tags":["Status"],"responses":{"200":{"description":"Status successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams":{"get":{"operationId":"fetch_teams","summary":"( fetch_teams )\n","description":"## Purpose\nThis endpoint retrieves a list of teams, with support for pagination to handle large datasets efficiently. It also supports filtering and ordering by fields such as `created_at` and `updated_at` for more refined queries.\n","tags":["Authentication / Teams"],"parameters":[{"$ref":"#/components/parameters/page_param"},{"$ref":"#/components/parameters/per_page_param"},{"$ref":"#/components/parameters/filters_param"},{"$ref":"#/components/parameters/order_param"}],"responses":{"200":{"description":"A list of teams was successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"},"X-Pagination":{"$ref":"#/components/headers/X-Pagination"}},"content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"$ref":"#/components/schemas/Team"}},"metadata":{"$ref":"#/components/schemas/Metadata"}}}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"post":{"operationId":"create_team","summary":"( create_team )\n","description":"## Purpose\nThis endpoint creates a new team within the system.\n","tags":["Authentication / Teams"],"requestBody":{"$ref":"#/components/requestBodies/TeamPost"},"responses":{"201":{"description":"Team successfully created.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{id}":{"get":{"operationId":"fetch_team_by_id","summary":"( fetch_team_by_id )\n","description":"## Purpose\nThis endpoint retrieves the details of a specific team by its unique identifier.\n","tags":["Authentication / Teams"],"parameters":[{"$ref":"#/components/parameters/id_param"}],"responses":{"200":{"description":"Team details successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"put":{"operationId":"update_team_by_id","summary":"( update_team_by_id )\n","description":"## Purpose\nThis endpoint updates the details of a specific team identified by its unique ID.\n","tags":["Authentication / Teams"],"parameters":[{"$ref":"#/components/parameters/id_param"}],"requestBody":{"$ref":"#/components/requestBodies/TeamPut"},"responses":{"200":{"description":"Team successfully updated.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"delete":{"operationId":"delete_team_by_id","summary":"( delete_team_by_id )\n","description":"## Purpose\nThis endpoint deletes a specific team identified by its unique ID.\n","tags":["Authentication / Teams"],"parameters":[{"$ref":"#/components/parameters/id_param"}],"responses":{"204":{"description":"Team successfully deleted. No content returned.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/certificate-requests":{"get":{"operationId":"fetch_certificate_requests","summary":"( fetch_certificate_requests )\n","description":"## Purpose\nThis endpoint retrieves a list of certificate requests associated with a specific team, supporting pagination.\n","tags":["Certificate Manager / Certificate Requests"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/page_param"},{"$ref":"#/components/parameters/per_page_param"},{"$ref":"#/components/parameters/filters_param"},{"$ref":"#/components/parameters/order_param"}],"responses":{"200":{"description":"Successfully retrieved a list of certificate requests for the specified team.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"},"X-Pagination":{"$ref":"#/components/headers/X-Pagination"}},"content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"$ref":"#/components/schemas/CertificateRequest"}},"metadata":{"$ref":"#/components/schemas/Metadata"}}}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"post":{"operationId":"create_certificate_request","summary":"( create_certificate_request )\n","description":"## Purpose\nCreate a certificate request and queue (or synchronously perform) issuance.\n\n**Flow by profile type**\n\n**DV (DVTLS):** DCV on every FQDN in `domains` must be complete (`endorsed: true`).\n\n**OV (OVTLS):** DCV on every FQDN plus an active OV organization endorsement.\n\n**EV (EVTLS):** DCV on every FQDN plus an active EV organization endorsement.\n\nUse `GET /api/v1/certificate-profiles` to choose a profile. Set query param `synchronous=true`\nto issue immediately.\n\nAsynchronous issuance is the default (`CertificatePreflightJob`). Poll\n`GET .../certificate-requests/{id}` or subscribe to webhook events\n`certificate_manager.certificate_request.update` and `certificate_manager.certificate.create`.\nBackground CA failures are not returned as HTTP 503 on create; create remains 201 when accepted.\n","tags":["Certificate Manager / Certificate Requests"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/synchronous_param"}],"requestBody":{"$ref":"#/components/requestBodies/CertificateRequestPost"},"responses":{"201":{"description":"Certificate request successfully created.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateRequest"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"description":"Client or policy rejection. Includes missing endorsements, CAA deny, invalid CSR/create payload,\nand duration/profile policy failures. On synchronous issuance failure of this class the message is\ntypically `Certificate could not be issued`.\n","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestError"}}}},"500":{"$ref":"#/components/responses/500"},"503":{"description":"Certificate authority or infrastructure temporarily unavailable during synchronous issuance\n(EJBCA SOAP faults, CT/SCT failures, unreachable CA). Code is `SERVICE_UNAVAILABLE`. Retry the request.\n","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestError"},"examples":{"ca_unavailable":{"summary":"Synchronous issuance failed due to CA/infrastructure error","value":{"code":"SERVICE_UNAVAILABLE","message":"Certificate authority temporarily unavailable","details":["org.cesecore.certificates.certificate.CertificateCreateException: Insufficient SCTs, minimum is 3, but got 2"]}}}}}}}}},"/teams/{team_id}/certificate-requests/{id}":{"get":{"operationId":"fetch_certificate_request_by_id","summary":"( fetch_certificate_request_by_id )\n","description":"## Purpose\nThis endpoint retrieves the details of a specific certificate request associated with a team.\n","tags":["Certificate Manager / Certificate Requests"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"responses":{"200":{"description":"Certificate request details successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateRequest"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"delete":{"operationId":"delete_certificate_request_by_id","summary":"( delete_certificate_request_by_id )\n","description":"## Purpose\nThis endpoint deletes a specific certificate request associated with a team.\n","tags":["Certificate Manager / Certificate Requests"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"responses":{"204":{"description":"Certificate request successfully deleted. No content returned.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/certificates":{"get":{"operationId":"fetch_certificates","summary":"( fetch_certificates )\n","description":"## Purpose\nThis endpoint retrieves a list of certificates associated with a specific team, with support for pagination.\n","tags":["Certificate Manager / Certificates"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/page_param"},{"$ref":"#/components/parameters/per_page_param"},{"$ref":"#/components/parameters/filters_param"},{"$ref":"#/components/parameters/order_param"}],"responses":{"200":{"description":"Successfully retrieved a list of certificates associated with the specified team.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"},"X-Pagination":{"$ref":"#/components/headers/X-Pagination"}},"content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"$ref":"#/components/schemas/Certificate"}},"metadata":{"$ref":"#/components/schemas/Metadata"}}}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/certificates/{id}":{"get":{"operationId":"fetch_certificate_by_id","summary":"( fetch_certificate_by_id )\n","description":"## Purpose\nThis endpoint retrieves the details of a specific certificate associated with a team.\n","tags":["Certificate Manager / Certificates"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"responses":{"200":{"description":"Successfully retrieved the details of the specified certificate.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Certificate"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/certificates/{id}/revoke":{"put":{"operationId":"delete_certificate_by_id","summary":"( delete_certificate_by_id )\n","description":"## Purpose\nThis endpoint revokes a specific certificate associated with a team.\n","tags":["Certificate Manager / Certificates"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"requestBody":{"$ref":"#/components/requestBodies/CertificateRevocation"},"responses":{"200":{"description":"Certificate successfully revoked.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Certificate"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/domain-groups":{"get":{"operationId":"fetch_domain_groups","summary":"( fetch_domain_groups )\n","description":"## Purpose\nThis endpoint will return a list of domain groups associated with the specified team. Pagination, filtering and ordering is supported for this endpoint.\n","tags":["Validation / Domain Groups"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/page_param"},{"$ref":"#/components/parameters/per_page_param"},{"$ref":"#/components/parameters/filters_param"},{"$ref":"#/components/parameters/order_param"}],"responses":{"200":{"description":"## A list of domain groups successfully retrieved.\n","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"},"X-Pagination":{"$ref":"#/components/headers/X-Pagination"}},"content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"$ref":"#/components/schemas/DomainGroup"}},"metadata":{"$ref":"#/components/schemas/Metadata"}}}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"post":{"operationId":"create_domain_group","summary":"( create_domain_group )\n","description":"## Purpose\nCreates a domain group linking existing team domains.\n\nFor shared DCV, provide `domains` and `validation_methods` with HTTP, HTTPS, or DNS method codes such as 3.2.2.4.18,\n3.2.2.4.19, and 3.2.2.4.7. Do not send `validation_candidate`. A new shared `verification_value` and domain validation\nare created for every domain in the batch. Pending or in-progress validations on domains dropped from an overlapping\ngroup are cancelled. Existing domain endorsements are not revoked. Creating a shared DCV group archives any active\ndomain group (shared DCV or email batch) that shares at least one domain with the request; non-overlapping groups\nremain active. Domains left out of the new batch are no longer in any active group until added to a future batch.\nAfter batch create, use `PUT .../domains/{id}` to select a validation option and `GET .../domains/{id}/retry` to run\nDCV. `POST .../domains/{id}/validation` returns 422 for domains in an active shared DCV group; start a new shared\nDCV batch with `POST .../domain-groups` instead.\n\nFor email batch validation, provide `domains`, `validation_candidate`, and an email method in `validation_methods`\nor the legacy `validation_method` field. Email batch create does not archive overlapping groups; a domain may belong\nto multiple active email batch groups (for example different validation candidates). Complete validation via\n`POST .../domain-groups/{id}/verify` while the group is active.\n","tags":["Validation / Domain Groups"],"parameters":[{"$ref":"#/components/parameters/team_id_param"}],"requestBody":{"$ref":"#/components/requestBodies/DomainGroupPost"},"responses":{"201":{"description":"Domain Group successfully created.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainGroup"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/domain-groups/{id}":{"get":{"operationId":"fetch_domain_group_by_id","summary":"( fetch_domain_group_by_id )\n","description":"## Purpose\nReturns a domain group and its linked domains.\n","tags":["Validation / Domain Groups"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"responses":{"200":{"description":"Domain group details successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainGroup"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"put":{"operationId":"update_domain_group_by_id","summary":"( update_domain_group_by_id )\n","description":"## Purpose\nUpdates a domain group's validation settings.\n\nYou may change `validation_methods`, legacy `validation_method`, and `validation_candidate`. Linked domains are\nset when the group is created and cannot be changed through this endpoint.\n","tags":["Validation / Domain Groups"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"requestBody":{"$ref":"#/components/requestBodies/DomainGroupPut"},"responses":{"200":{"description":"Domain group successfully updated.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainGroup"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"delete":{"operationId":"delete_domain_group_by_id","summary":"( delete_domain_group_by_id )\n","description":"## Purpose\nRemoves a domain group from the specified team. This soft-deletes the group record; linked domains are not deleted.\nPending or in-progress domain validations for domains in the group are cancelled. Existing domain endorsements are\nnot revoked.\n","tags":["Validation / Domain Groups"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"responses":{"204":{"description":"Domain group successfully deleted. No content returned.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/domain-groups/{id}/verify":{"post":{"operationId":"verify_domain_group_by_random_number","summary":"( verify_domain_group_by_random_number )\n","description":"## Purpose\nVerifies an **email batch** domain group using the token from the batch verification email. The group must be\nactive; archived or deleted groups reject the token. Shared DCV groups use per-domain HTTP/DNS validation instead.\n","tags":["Validation / Domain Groups"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"requestBody":{"$ref":"#/components/requestBodies/DomainGroupVerifyPost"},"responses":{"200":{"description":"Domain group successfully verified.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainGroup"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/domains":{"get":{"operationId":"fetch_domains","summary":"( fetch_domains )\n","description":"## Purpose\nThis endpoint will return a list of domains associated with the specified team. Pagination, filtering and ordering is supported for this endpoint.\n","tags":["Validation / Domains"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/page_param"},{"$ref":"#/components/parameters/per_page_param"},{"$ref":"#/components/parameters/filters_param"},{"$ref":"#/components/parameters/order_param"}],"responses":{"200":{"description":"## A list of domains successfully retrieved.\n","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"},"X-Pagination":{"$ref":"#/components/headers/X-Pagination"}},"content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"metadata":{"$ref":"#/components/schemas/Metadata"}}}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"post":{"operationId":"create_domain","summary":"( create_domain )\n","description":"## Purpose\nCreate a new domain and start domain control validation (DCV).\n\nRequired: `subject` (FQDN). A domain validation is created automatically unless an active\nteam endorsement already covers the FQDN.\n\n**Typical DCV flow (all certificate types):**\n\n1. `POST .../domains` — create domain\n2. `PUT .../domains/{id}` — select `domain_validation_option_id` (DNS, HTTP, email, etc.)\n3. Complete the challenge (DNS/HTTP record, or `POST .../verify` for email)\n4. `GET .../domains/{id}/retry` — re-check validation status if needed\n5. Confirm `endorsed: true` before submitting a certificate request\n","tags":["Validation / Domains"],"parameters":[{"$ref":"#/components/parameters/team_id_param"}],"requestBody":{"$ref":"#/components/requestBodies/DomainPost"},"responses":{"201":{"description":"Domain successfully created.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"},"examples":{"standard":{"summary":"Standard domain with external account correlation","description":"Returned after creating a domain with `external_account_id`. Non-ACME validation\noptions are offered when `account_key_hash` is omitted. Webhook payloads include\n`external_account_id` for integrator account lookup.\n","value":{"id":"00000000-0000-0000-0000-000000000010","subject":"demo.com","second_level_domain":"demo","top_level_domain":"com","transit_routing_domain":null,"external_account_id":"ac7-1k0df3m","account_key_hash":"","endorsed":false,"expires_at":null,"status":"active","endorsements":[],"validation":{"id":"00000000-0000-0000-0000-000000000011","validation_method":null,"candidate":null,"protocol":null,"manual_verification":false,"status":"pending","domain_validation_option":null,"domain_validation_options":[{"id":"00000000-0000-0000-0000-000000000003","validation_method":"3.2.2.4.4","protocol":"EMAIL","candidate":"admin@demo.com","verification_value":"","expires_at":"2025-08-22T22:45:00-05:00"}]}}},"acme":{"summary":"Domain with ACME-only validation options","description":"Returned after creating a domain with `account_key_hash`. Non-wildcard domains receive\nACME DNS-01 (3.2.2.4.7 / ACME_DNS_01), ACME HTTP-01 (3.2.2.4.19 / ACME_HTTP_01), and\nACME TLS-ALPN-01 (3.2.2.4.20 / ACME_TLS_ALPN_01). Select an option id and update the\ndomain to begin validation.\n","value":{"id":"00000000-0000-0000-0000-000000000010","subject":"demo.com","second_level_domain":"demo","top_level_domain":"com","transit_routing_domain":null,"external_account_id":"ac7-1k0df3m","account_key_hash":"2d3c96b6ea343d8b2327cfed4e4b487aa55c488cc","endorsed":false,"expires_at":null,"status":"active","endorsements":[],"validation":{"id":"00000000-0000-0000-0000-000000000011","validation_method":null,"candidate":null,"protocol":null,"manual_verification":false,"status":"pending","domain_validation_option":null,"domain_validation_options":[{"id":"00000000-0000-0000-0000-000000000001","validation_method":"3.2.2.4.7","protocol":"ACME_DNS_01","candidate":"_acme-challenge.demo.com","verification_value":"dpyyPXaqGjhHVUP3Ui1cg7sznvr","expires_at":"2025-08-22T22:45:00-05:00"},{"id":"00000000-0000-0000-0000-000000000002","validation_method":"3.2.2.4.19","protocol":"ACME_HTTP_01","candidate":"http://demo.com/.well-known/acme-challenge/dpyyPXaqGjhHVUP3Ui1cg7sznvr","verification_value":"dpyyPXaqGjhHVUP3Ui1cg7sznvr.2d3c96b6ea343d8b2327cfed4e4b487aa55c488cc","expires_at":"2025-08-22T22:45:00-05:00"},{"id":"00000000-0000-0000-0000-000000000003","validation_method":"3.2.2.4.20","protocol":"ACME_TLS_ALPN_01","candidate":"demo.com","verification_value":"58675369b6a9f6b071ed90f0dba6a5a5e8d7fd9c42394bd2dd1fb11ed49921a2","expires_at":"2025-08-22T22:45:00-05:00"}]}}}}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/domains/{id}":{"get":{"operationId":"fetch_domain_by_id","summary":"( fetch_domain_by_id )\n","description":"## Purpose\nThis endpoint will return the domain associated with the specified team.\n","tags":["Validation / Domains"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"responses":{"200":{"description":"Domain details successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"put":{"operationId":"update_domain_by_id","summary":"( update_domain_by_id )\n","description":"## Purpose\nSelect a domain validation method or update domain settings.\n\nSend `domain_validation_option_id` to choose a DCV method (DNS, HTTP, email, etc.).\nWhen the option changes while validation is `pending` or `in_progress`, validation restarts.\n","tags":["Validation / Domains"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"requestBody":{"$ref":"#/components/requestBodies/DomainPut"},"responses":{"200":{"description":"Domain successfully updated.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"delete":{"operationId":"delete_domain_by_id","summary":"( delete_domain_by_id )\n","description":"## Purpose\nThis endpoint will permanently remove a domain associated with the specified team.\n","tags":["Validation / Domains"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"responses":{"204":{"description":"Domain successfully deleted. No content returned.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/domains/{id}/retry":{"get":{"operationId":"retry_domain_verification_by_id","summary":"( retry_domain_verification_by_id )\n","description":"## Purpose\nThis endpoint will trigger a manual retry operation for the domain.\n","tags":["Validation / Domains"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"responses":{"200":{"description":"Domain successfully retried.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/domains/{id}/validation":{"post":{"operationId":"create_domain_validation_by_id","summary":"( create_domain_validation_by_id )\n","description":"## Purpose\nThis endpoint will cancel a domain validation that is currently in progress or pending.\nAfter cancellation a new domain validation WILL be created. Keep in mind this action will\nnullify any random values associated with the cancelled domain validation.\n\n## Forcing re-validation with `use_endorsements: false`\n\nPassing `use_endorsements: false` invalidates the existing domain control validation\n(DCV) for this subject and starts the domain over. Use it when a previously completed\nDCV must not be reused — for example, when protecting against DCV reuse across\ndifferent end users of your platform.\n\nWhen (and only when) the request body contains the explicit boolean `false`, the\nendpoint additionally does ALL of the following, atomically, before creating the new\nvalidation:\n\n1. Archives every ACTIVE domain endorsement on the team whose subject pattern covers\n   this domain's subject. Archived endorsements are permanent: they can never again\n   satisfy validation for any domain or certificate request.\n2. Clears the endorsement pointer on the domain. The response (and all subsequent\n   reads) reports `endorsed: false`.\n3. The effect applies team-wide, not just to this domain record: certificate requests\n   — both existing pending ones and any created afterwards — can no longer satisfy\n   domain validation for this subject through the archived endorsements. New\n   certificates for the subject cannot be issued until DCV completes again.\n\nOmitting `use_endorsements`, or sending `true`, does none of the above — existing\nendorsements remain active and reusable, matching the endpoint's historical behavior.\n\n**Wildcard coverage warning:** an endorsement obtained through a wildcard-capable DCV\nmethod covers the base domain and every subdomain (e.g. one endorsement covers\n`example.com`, `www.example.com`, and `api.example.com`). Archiving is per-endorsement,\nso calling this endpoint with `use_endorsements: false` for ANY covered name — including\na single subdomain — archives the whole endorsement, and every name it covered requires\na new DCV before its next certificate issuance.\n\n**Not affected:** certificates that were already issued (they remain valid and are not\nrevoked), endorsements for other subjects, other teams, and organization (OV/EV)\nendorsements.\n\n**This action cannot be undone.** There is no API to re-activate an archived\nendorsement; the only way forward is to complete a new DCV.\n\nReturns `422` when the domain belongs to an active shared DCV domain group. Use the domain group flow instead:\nPOST `.../domain-groups` with this domain in `domains` and the shared `validation_methods` to start a new validation\nbatch. After the batch is created, use `PUT .../domains/{id}` and `GET .../domains/{id}/retry` for per-domain DCV.\n","tags":["Validation / Domains"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"requestBody":{"$ref":"#/components/requestBodies/DomainValidationPut"},"responses":{"200":{"description":"Domain validation successfully created.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"delete":{"operationId":"cancel_domain_validation_by_id","summary":"( cancel_domain_validation_by_id )\n","description":"## Purpose\nThis endpoint will cancel a domain validation that is currently in progress or pending. \nAfter cancellation a new domain validation WILL NOT be created. Keep in mind this action will \nnullify and random values associated with the cancelled domain validation.\n","tags":["Validation / Domains"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"responses":{"200":{"description":"Domain validation successfully cancelled.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/domains/{id}/verify":{"post":{"operationId":"verify_domain_by_random_number","summary":"( verify_domain_by_random_number )\n","description":"## Purpose\nThis endpoint will verify a domain via the random token.\n","tags":["Validation / Domains"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"requestBody":{"$ref":"#/components/requestBodies/DomainVerifyPost"},"responses":{"200":{"description":"Domain successfully verified.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/organizations":{"get":{"operationId":"fetch_organizations","summary":"( fetch_organizations )\n","description":"## Purpose\nRetrieve a list of organizations associated with a specific team, with support for pagination.\n","tags":["Validation / Organizations"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/page_param"},{"$ref":"#/components/parameters/per_page_param"},{"$ref":"#/components/parameters/filters_param"},{"$ref":"#/components/parameters/order_param"}],"responses":{"200":{"description":"A list of organizations successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"},"X-Pagination":{"$ref":"#/components/headers/X-Pagination"}},"content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"$ref":"#/components/schemas/Organization"}},"metadata":{"$ref":"#/components/schemas/Metadata"}}}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"post":{"operationId":"create_organization","summary":"( create_organization )\n","description":"## Purpose\nCreate a new organization associated with a specific team.\n\nWhen the account flag `optional_organization_create_payload` is enabled, the request body may be\nomitted or sent as `{}`. Otherwise `name`, `city`, and `country` are required.\n","tags":["Validation / Organizations"],"parameters":[{"$ref":"#/components/parameters/team_id_param"}],"requestBody":{"$ref":"#/components/requestBodies/OrganizationPost"},"responses":{"201":{"description":"Organization successfully created.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/organizations/{id}":{"get":{"operationId":"fetch_organization_by_id","summary":"( fetch_organization_by_id )\n","description":"## Purpose\nRetrieve details of a specific organization associated with a team.\n","tags":["Validation / Organizations"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"responses":{"200":{"description":"Organization details successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"put":{"operationId":"update_organization_by_id","summary":"( update_organization_by_id )\n","description":"## Purpose\nUpdate details of a specific organization associated with a team.\n\nPartial updates are supported. Only fields included in the request body are validated and updated.\n","tags":["Validation / Organizations"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"requestBody":{"$ref":"#/components/requestBodies/OrganizationPut"},"responses":{"200":{"description":"Organization successfully updated.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"delete":{"operationId":"delete_organization_by_id","summary":"( delete_organization_by_id )\n","description":"## Purpose\nDelete a specific organization associated with a team.\n","tags":["Validation / Organizations"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"responses":{"204":{"description":"Organization successfully deleted. No content returned.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/organizations/{id}/evidence":{"post":{"operationId":"create_organization_validation_evidence","summary":"( create_organization_validation_evidence )\n","description":"## Purpose\nUpload validation evidence via API.\n","tags":["Validation / Organizations"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"string","format":"binary"}}}}}}},"responses":{"204":{"description":"Organization evidence successfully uploaded. No content returned.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/organizations/{id}/validation":{"post":{"operationId":"create_organization_validation_by_id","summary":"( create_organization_validation_by_id ) Only Available to SSL.com Enterprise Customers\n","description":"## Purpose\nValidate an organization.\n\nThis endpoint is only available for specific use cases and must be explicitly enabled by SSL.com prior to use.\n\nWhen `optional_organization_create_payload` is `true` on the team (see `GET /teams/{team_id}`),\nan organization may be created without a payload via `POST /teams/{team_id}/organizations`.\n\nAt create (`POST .../validation`), `validation_level` (`\"OV\"` or `\"EV\"`) and `contact_email`\nare required for both levels — `contact_email` gives the Order Authorization a valid recipient.\nWhen the request omits `contact_email`, it is copied from the organization record before\nvalidation, so the request still succeeds if the organization already carries a contact email.\nAll other endorsement fields are optional at create. Format validations still apply when a value\nis provided. Omitted endorsement fields are copied from the organization record when present;\nrequest body values take priority.\n\nBefore approval (when the endorsement becomes `active`), a full profile is required.\nFor OV endorsements, `name`, `city`, `country`, and `contact_email` must be present.\nFor EV endorsements, `name`, `city`, `country`, `contact_email`, `business_category`,\n`company_number`, `incorporation_country`, `contact_name`, and `contact_title` are required,\nalong with existing EV rules such as `information_sources` and jurisdiction matching.\nFields other than `contact_email` (which is required at create) may be omitted at create and\nsupplied later, but the endorsement cannot be approved until they are all present.\n\nOptional fields at create include `information_sources`, an array of information source IDs\n(each ID is validated when provided; an omitted or empty array creates the endorsement without\nlinked sources), and `expires_at`, which defaults to 396 days from submission when omitted.\n\nFor VMC Endorsements (Verified Mark Certificate) the following fields are required before approval:\n\n- All EV fields listed above\n- street_address\n- trademark_country\n- trademark_office (must match a recognized trademark office for the country)\n- trademark_identifier\n- mark_image (base64-encoded SVG conforming to BIMI SVG Tiny PS profile)\n\nFor CMC Endorsements (Common Mark Certificate) the following fields are required before approval:\n\n- All EV fields listed above\n- street_address\n- prior_use_mark_source_url (domain must match a validated domain on the certificate request)\n- mark_image (base64-encoded SVG)\n\nFor GMC Endorsements (Government Mark Certificate) the following fields are required before approval:\n\n- All EV fields listed above\n- street_address\n- statute_citation\n- statute_country\n- mark_image (base64-encoded SVG)\n\nFor MRM Endorsements (Mark with Registered Mark) the following fields are required before approval:\n\n- All EV fields listed above\n- street_address\n- trademark_country\n- trademark_office\n- trademark_identifier\n- prior_use_mark_source_url\n- mark_image (base64-encoded SVG)\n\n### SVG Requirements (BIMI SVG Tiny Portable/Secure)\n\nThe `mark_image` SVG must conform to the following requirements:\n- SVG version 1.2 with `baseProfile=\"tiny-ps\"`\n- Square `viewBox` with dimensions \u003e= 96x96\n- Maximum file size of 32KB\n- LF line endings only (no CRLF)\n- No scripts, styles, CDATA sections, comments, or processing instructions\n- Must contain at least two distinct colors\n- `\u003ctitle\u003e` must be the first child element of `\u003csvg\u003e`\n\nFor EV validation, `business_category` must be one of `Private Organization`, `Government Entity`,\nor `Non-Commercial Entity`. `\"Business Entity\"` is accepted on organization create but returns\n`422` when provided on EV validation. To update a pending endorsement, submit another\n`POST .../validation` request with the same `validation_level` and the updated values.\nAny existing `pending_review` endorsement for that level is archived and replaced.\nIf the organization's `business_category` is `Private Organization`, `incorporation_*` must\nmatch the first entry in `information_sources` before approval (see `GET /api/v1/information-sources`).\n","tags":["Validation / Organizations"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"}],"requestBody":{"$ref":"#/components/requestBodies/OrganizationValidationPost"},"responses":{"200":{"description":"Organization successfully endorsed.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"delete":{"operationId":"cancel_organization_validation_by_id","summary":"( cancel_organization_validation_by_id ) Only Available to SSL.com Enterprise Customers\n","description":"## Purpose\nCancel an organization validation.\n\nThis endpoint is only available for specific use cases and must be explicitly enabled by SSL.com prior to use.\n","tags":["Validation / Organizations"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/id_param"},{"$ref":"#/components/parameters/validation_level_param"}],"responses":{"204":{"description":"Organization validation successfully cancelled.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/organizations/{organization_id}/endorsements/{endorsement_id}/evidence":{"post":{"operationId":"create_endorsement_evidence","summary":"( create_endorsement_evidence ) Upload Evidence to a Specific Endorsement\n","description":"## Purpose\nUpload validation evidence files to a specific endorsement.\n\n**Important Notes:**\n\nThis endpoint attaches evidence files directly to a specific endorsement, unlike the organization-level evidence endpoint which fans out to all pending_review endorsements.\n\n### Behavior\n\n- **Delegated RA accounts:** If the endorsement's validation level is on the auto-activation allowlist and all approval requirements are met, the endorsement will automatically transition to active status after evidence upload.\n- **Non-Delegated RA accounts:** Evidence is attached but the endorsement remains in pending_review for admin approval.\n\n### Response\n\n- **204 No Content:** Evidence uploaded successfully (and auto-activation succeeded, if applicable).\n- **200 OK:** Evidence uploaded but auto-activation encountered warnings (e.g., missing fields). The response body contains `warnings` detailing what is missing.\n\n### File Requirements\n\n- Allowed file types: JPEG, JPG, PNG, GIF, PDF\n- Maximum 10 files per request\n","tags":["Validation / Organizations"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"name":"organization_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"The UUID of the organization."},{"name":"endorsement_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"The UUID of the endorsement."}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"string","format":"binary"}}}}}}},"responses":{"204":{"description":"Evidence uploaded successfully. No content returned.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"200":{"description":"Evidence uploaded with warnings.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"warnings":{"type":"array","items":{"type":"string"}}}}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/organizations/{organization_id}/endorsements/{id}/subscriber-agreement-signer":{"get":{"operationId":"fetch_subscriber_agreement_signer","summary":"( fetch_subscriber_agreement_signer )\n","description":"## Purpose\nReturn the current (live) Subscriber Agreement signer for the EV organization endorsement.\n\nReads work against an endorsement in ANY status — including terminal statuses\n(`archived`, `cancelled`, `expired`, `revoked`) — because signer rows are historical\naudit records.\n\nReturns `404` when no live signer exists on the endorsement (for example after a signer\nis rejected and archived — use `GET .../subscriber-agreement-signers` for the full\nhistory), or when the team, organization, or endorsement cannot be found under the\nrequesting token.\n\nReturns `422` when the endorsement is not an EV organization endorsement.\n","tags":["Validation / Subscriber Agreement Signers"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/organization_id_param"},{"$ref":"#/components/parameters/id_param"}],"responses":{"200":{"description":"Subscriber agreement signer successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriberAgreementSigner"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"post":{"operationId":"create_subscriber_agreement_signer","summary":"( create_subscriber_agreement_signer )\n","description":"## Purpose\nCreate the Subscriber Agreement signer for the EV organization endorsement.\n\nAll body properties are optional. Contact fields omitted from the request are snapshotted\nfrom the endorsement's EV contact fields, falling back to the organization's contact\nfields (request values take priority).\n\n`agreement_type` is NOT accepted — every signer created through this endpoint signs the\nEVSA; any supplied value is ignored and the server forces `evsa`.\n\nNote that a signer is auto-created when an EV endorsement is saved with a contact email,\nso one may already exist without an explicit `POST` — fetch first\n(`GET .../subscriber-agreement-signer`) before creating.\n\nReturns `404` when the endorsement is in a terminal status (`archived`, `cancelled`,\n`expired`, `revoked`) — signers can only be created while the endorsement is `active`,\n`pending`, or `pending_review`.\n\nReturns `422` when a live signer already exists for the endorsement, when the endorsement\nis not an EV organization endorsement, or when a supplied field fails validation (for\nexample a malformed `contact_email`).\n","tags":["Validation / Subscriber Agreement Signers"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/organization_id_param"},{"$ref":"#/components/parameters/id_param"}],"requestBody":{"$ref":"#/components/requestBodies/SubscriberAgreementSignerPost"},"responses":{"201":{"description":"Subscriber agreement signer successfully created.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriberAgreementSigner"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"patch":{"operationId":"update_subscriber_agreement_signer","summary":"( update_subscriber_agreement_signer )\n","description":"## Purpose\nUpdate the current Subscriber Agreement signer. Partial updates are supported.\n\n**Before approval** (`signer_state` of `pending`, `veriff_open`, `veriff_returned`, or\n`evidence_uploaded`), fields are edited in place and the updated signer is returned\nwith `200`.\n\n**After identity has been established** (`signer_state` of `approved` or `accepted`),\nchanging a contact field (`contact_name`, `contact_title`, `contact_email`) is a re-sign,\nnot an in-place edit — the identity was verified against the old contact:\n\n- When the endorsement is `pending` or `pending_review`: the existing signer is archived\n  and a fresh `pending` signer carrying the new contacts is created; identity\n  verification restarts automatically (a new Veriff email is sent). Returns `201` with\n  the FRESH signer.\n- When the endorsement is `active`, the contact change is DESTRUCTIVE — the EV grant was\n  issued against the old signer. Without `confirm=true` the request is refused with\n  `409` (`application/problem+json`). With `confirm=true` the signer AND the endorsement\n  are both archived (no fresh signer is minted; the customer must re-request EV\n  validation) and the archived signer (`signer_state` `rejected`, `status` `archived`)\n  is returned with `200`.\n- Non-contact edits on an `accepted` signer return `422` — an accepted agreement is a\n  frozen consent record.\n\n`agreement_type` is NOT accepted — any supplied value is ignored.\n\nReturns `404` when the endorsement is in a terminal status (`archived`, `cancelled`,\n`expired`, `revoked`) or when no live signer exists.\n","tags":["Validation / Subscriber Agreement Signers"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/organization_id_param"},{"$ref":"#/components/parameters/id_param"},{"name":"confirm","in":"query","description":"Required (as `confirm=true`) to apply a contact change to an `approved`/`accepted`\nsigner while the endorsement is `active`, confirming the destructive\nsigner-and-endorsement archival described above. May alternatively be supplied as a\n`confirm` property in the JSON request body.\n","required":false,"schema":{"type":"boolean","default":false}}],"requestBody":{"$ref":"#/components/requestBodies/SubscriberAgreementSignerPatch"},"responses":{"200":{"description":"Subscriber agreement signer successfully updated in place — or, for a confirmed\ncontact change on an `active` endorsement, the archived signer is returned\n(`signer_state` `rejected`, `status` `archived`).\n","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriberAgreementSigner"}}}},"201":{"description":"Contact change applied to an `approved`/`accepted` signer via re-sign — the previous\nsigner was archived and the FRESH replacement signer (`signer_state` `pending`) is\nreturned. Identity verification restarts automatically.\n","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriberAgreementSigner"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"409":{"description":"Conflict — the requested contact change would archive the `active` endorsement.\nRetry with `confirm=true` to proceed. Neither the signer nor the endorsement is\nmodified.\n","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 7807 problem details.","properties":{"type":{"type":"string","description":"Problem type URI.","example":"about:blank"},"title":{"type":"string","description":"Short, human-readable summary of the problem.","example":"Endorsement archival required"},"status":{"type":"integer","description":"HTTP status code, mirrored in the body per RFC 7807.","example":409},"detail":{"type":"string","description":"Human-readable explanation specific to this occurrence.","example":"This endorsement is active. Applying this contact change will archive the endorsement. Retry with confirm=true to proceed."}},"required":["type","title","status","detail"]}}}},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/organizations/{organization_id}/endorsements/{id}/subscriber-agreement-signer/verification":{"post":{"operationId":"start_subscriber_agreement_signer_verification","summary":"( start_subscriber_agreement_signer_verification )\n","description":"## Purpose\nStart (or restart) the signer's Veriff identity verification. A verification session is\ncreated asynchronously and the verification email is sent to the signer's\n`contact_email`. Re-invoking supersedes any open session and re-sends the link.\n\n**This call is optional.** SSL.com validation admins can trigger verification from the\nadmin console, and accounts/teams with the `auto_trigger_veriff_on_signer_save`\nconfiguration flag enabled have verification triggered automatically when the signer is\nauto-created.\n\nReturns `202` with the current signer; the session is created and the email sent in the\nbackground (poll `veriff_status` / `signer_state` for progress).\n\nReturns `422` when the signer has no `contact_email`, when verification cannot be\nstarted from the signer's current state (`signer_state` must be `pending`, `veriff_open`,\nor `veriff_returned`), or when the current verification session has already been\napproved (approve the signer instead of restarting).\n\nReturns `404` when the endorsement is in a terminal status (`archived`, `cancelled`,\n`expired`, `revoked`) or when no live signer exists.\n","tags":["Validation / Subscriber Agreement Signers"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/organization_id_param"},{"$ref":"#/components/parameters/id_param"}],"responses":{"202":{"description":"Identity verification successfully requested. The current signer is returned.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriberAgreementSigner"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/teams/{team_id}/organizations/{organization_id}/endorsements/{id}/subscriber-agreement-signers":{"get":{"operationId":"fetch_subscriber_agreement_signers","summary":"( fetch_subscriber_agreement_signers )\n","description":"## Purpose\nReturn the full signer history for the EV organization endorsement — every signer that has\never been attached to it, including archived (rejected / superseded) signers — ordered\nnewest first.\n\nReads work against an endorsement in ANY status, including terminal statuses (`archived`,\n`cancelled`, `expired`, `revoked`) — signer rows are historical audit records.\n\nThis endpoint does NOT support pagination, ordering or filtering; the complete history is\nalways returned.\n\nReturns `422` when the endorsement is not an EV organization endorsement.\n","tags":["Validation / Subscriber Agreement Signers"],"parameters":[{"$ref":"#/components/parameters/team_id_param"},{"$ref":"#/components/parameters/organization_id_param"},{"$ref":"#/components/parameters/id_param"}],"responses":{"200":{"description":"## Subscriber agreement signer history successfully retrieved.\n","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"$ref":"#/components/schemas/SubscriberAgreementSigner"}}},"required":["resources"]}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/tokens":{"get":{"operationId":"fetch_tokens","summary":"( fetch_tokens )\n","description":"## Purpose\nThis endpoint retrieves a list of API tokens belonging to the authenticated account, with support for pagination and filtering. Only master tokens (tokens with full `*` wildcard access) can access this endpoint.\n\n## Authorization\nRequires a **master token** — a token with scope `{\"*\": [\"read\", \"write\"]}`. Non-master tokens will receive a `403 Forbidden` response.\n\n## Scope Presets\nWhen creating tokens, you can use one of the following scope configurations:\n\n| Preset | Scopes | Description |\n|--------|--------|-------------|\n| Full Access | `{\"*\": [\"read\", \"write\"]}` | Unrestricted access to all endpoints |\n| Read Only | `{\"*\": [\"read\"]}` | Read-only access to all endpoints |\n| Certificate Reader | Certificates, requests, profiles (read) | View certificates and profiles |\n| Certificate Manager | Certificates, requests (read+write), profiles (read) | Full certificate lifecycle management |\n| Certificate Issuer | Certificate requests (write), profiles (read) | Issue certificates only |\n| Domain Validator | Domains, domain groups (read+write), information sources (read) | Manage domain validation |\n| Organization Manager | Organizations (read+write), information sources (read) | Manage organization validation |\n","tags":["Authentication / Tokens"],"parameters":[{"$ref":"#/components/parameters/page_param"},{"$ref":"#/components/parameters/per_page_param"},{"$ref":"#/components/parameters/filters_param"},{"$ref":"#/components/parameters/order_param"}],"responses":{"200":{"description":"A list of API tokens was successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"},"X-Pagination":{"$ref":"#/components/headers/X-Pagination"}},"content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"$ref":"#/components/schemas/APIToken"}},"metadata":{"allOf":[{"$ref":"#/components/schemas/Metadata"},{"type":"object","properties":{"available_scopes":{"type":"object","description":"Available scope paths grouped by module. Each group contains an array of scope entries with the scope path, available permissions, and a description. Use these values when constructing the `scopes` parameter for token creation or updates.\n","additionalProperties":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string","description":"The scope path to use in token scopes.","example":"api.v1.certificate_manager.certificates"},"permissions":{"type":"array","description":"Available permissions for this scope path.","items":{"type":"string","enum":["read","write"]},"example":["read","write"]},"description":{"type":"string","description":"Human-readable description of the scope.","example":"Certificates"}}}}},"presets":{"type":"array","description":"Pre-configured scope templates that can be used as-is or as a starting point when creating tokens. The `scopes` value from a preset can be passed directly to the token create endpoint.\n","items":{"type":"object","properties":{"name":{"type":"string","description":"Preset identifier.","example":"certificate_reader"},"description":{"type":"string","description":"Human-readable description of the preset.","example":"Read-only access to certificates, certificate requests, and certificate profiles"},"scopes":{"type":"object","description":"The scope configuration for this preset.","additionalProperties":{"type":"array","items":{"type":"string","enum":["read","write"]}}}}}}}}]}}}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"post":{"operationId":"create_token","summary":"( create_token )\n","description":"## Purpose\nThis endpoint creates a new API sub-token with the specified scopes. Only master tokens can create new tokens.\n\n## Important\nThe `token_secret` in the response is **only shown once** at creation time. It cannot be retrieved again. Store it securely immediately after receiving the response.\n\n## Authorization\nRequires a **master token** — a token with scope `{\"*\": [\"read\", \"write\"]}`. Non-master tokens will receive a `403 Forbidden` response.\n","tags":["Authentication / Tokens"],"requestBody":{"$ref":"#/components/requestBodies/APITokenPost"},"responses":{"201":{"description":"API token successfully created. The response includes the `token_secret` which is only shown once.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APITokenCreateResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/tokens/{id}":{"get":{"operationId":"fetch_token_by_id","summary":"( fetch_token_by_id )\n","description":"## Purpose\nThis endpoint retrieves the details of a specific API token by its unique identifier. The `token_secret` is never included in the response — it is only returned once at creation time.\n\n## Authorization\nRequires a **master token** — a token with scope `{\"*\": [\"read\", \"write\"]}`.\n","tags":["Authentication / Tokens"],"parameters":[{"$ref":"#/components/parameters/id_param"}],"responses":{"200":{"description":"API token details successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIToken"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"put":{"operationId":"update_token_by_id","summary":"( update_token_by_id )\n","description":"## Purpose\nThis endpoint updates the details of a specific API token identified by its unique ID. You can update the token's name, description, scopes, or status. The `token_secret` is never included in the response.\n\n## Authorization\nRequires a **master token** — a token with scope `{\"*\": [\"read\", \"write\"]}`.\n","tags":["Authentication / Tokens"],"parameters":[{"$ref":"#/components/parameters/id_param"}],"requestBody":{"$ref":"#/components/requestBodies/APITokenPut"},"responses":{"200":{"description":"API token successfully updated.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIToken"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"delete":{"operationId":"delete_token_by_id","summary":"( delete_token_by_id )\n","description":"## Purpose\nThis endpoint deletes a specific API token identified by its unique ID. Master tokens (tokens with full `*` wildcard access) cannot be deleted via the API to prevent accidental lockout.\n\n## Authorization\nRequires a **master token** — a token with scope `{\"*\": [\"read\", \"write\"]}`.\n","tags":["Authentication / Tokens"],"parameters":[{"$ref":"#/components/parameters/id_param"}],"responses":{"204":{"description":"API token successfully deleted. No content returned.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/validate-svg-logo":{"post":{"operationId":"validate_svg_logo","summary":"( validate_svg_logo ) Validate a BIMI SVG Logo\n","description":"## Purpose\nValidate an SVG logo for BIMI / VMC compliance before submitting a mark certificate order.\n\n**No authentication required.**\n\nThis endpoint accepts a base64-encoded SVG (plain or as a `data:image/svg+xml;base64,...` data URI)\nand validates it against the BIMI SVG Tiny Portable/Secure (tiny-ps) profile requirements.\n\n### SVG Requirements (BIMI SVG Tiny Portable/Secure)\n\n- SVG version 1.2 with `baseProfile=\"tiny-ps\"`\n- Square `viewBox` with dimensions \u003e= 96x96\n- Maximum file size of 32KB (64KB base64 input limit)\n- LF line endings only (no CRLF)\n- No scripts, styles, CDATA sections, comments, or processing instructions\n- Must contain at least two distinct colors\n- `\u003ctitle\u003e` must be the first child element of `\u003csvg\u003e`\n- Only allowed SVG Tiny PS elements (no `\u003cimage\u003e`, `\u003cuse\u003e`, `\u003canimate\u003e`, etc.)\n\n### Parameter\n\n- `verifiable_mark` (required): Base64-encoded SVG string, or a data URI (`data:image/svg+xml;base64,...`).\n","tags":["Utility"],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["verifiable_mark"],"properties":{"verifiable_mark":{"type":"string","description":"Base64-encoded SVG content or a data URI (data:image/svg+xml;base64,...)."}}}}}},"responses":{"200":{"description":"SVG is valid and BIMI-compliant.","content":{"application/json":{"schema":{"type":"object","properties":{"valid":{"type":"boolean","example":true},"errors":{"type":"array","items":{"type":"string"},"example":[]}}}}}},"400":{"description":"SVG is invalid or the request is malformed.","content":{"application/json":{"schema":{"type":"object","properties":{"valid":{"type":"boolean","example":false},"errors":{"type":"array","items":{"type":"string"},"example":["baseProfile must be 'tiny-ps'"]}}}}}}}}},"/validation-candidates":{"get":{"operationId":"fetch_domain_validation_candidates","summary":"( fetch_domain_validation_candidates )\n","description":"## Purpose\nThis endpoint will return a list of validation candidate email addresses for the specified FQDN. These addresses can be used to update a domains validation. This endpoint does NOT support pagination, ordering or filtering.\n","tags":["Validation / Domains"],"parameters":[{"$ref":"#/components/parameters/domain_param"}],"responses":{"200":{"description":"Candidates successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DomainVerificationCandidate"}}}}},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/webhook-endpoints":{"get":{"operationId":"fetch_webhook_endpoints","summary":"( fetch_webhook_endpoints )\n","description":"## Purpose\nLists webhook endpoints enrolled for the authenticated account. Signing secrets are never\nincluded in list responses.\n\nSee `#/components/schemas/WebhookSignatureVerification` for `X-Signature` verification.\n","tags":["Utility / Webhook Endpoints"],"parameters":[{"$ref":"#/components/parameters/page_param"},{"$ref":"#/components/parameters/per_page_param"},{"$ref":"#/components/parameters/filters_param"},{"$ref":"#/components/parameters/order_param"}],"responses":{"200":{"description":"A list of webhook endpoints was successfully retrieved.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"},"X-Pagination":{"$ref":"#/components/headers/X-Pagination"}},"content":{"application/json":{"schema":{"type":"object","properties":{"resources":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}},"metadata":{"$ref":"#/components/schemas/Metadata"}}}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/webhook-endpoints/enroll":{"post":{"operationId":"enroll_webhook_endpoint","summary":"( enroll_webhook_endpoint )\n","description":"## Purpose\nEnrolls a new webhook endpoint for the authenticated account. The endpoint receives events\nfor all teams under that account (subject to `subscriptions`).\n\nReturns `signing_key` **once** in the response. Use it to verify the `X-Signature`\nheader on delivered webhooks.\n\nSee `#/components/schemas/WebhookSignatureVerification`.\n","tags":["Utility / Webhook Endpoints"],"requestBody":{"$ref":"#/components/requestBodies/WebhookEndpointEnroll"},"responses":{"201":{"description":"Webhook endpoint successfully enrolled.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointEnrollResponse"}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}},"/webhook-endpoints/{id}":{"put":{"operationId":"update_webhook_endpoint","summary":"( update_webhook_endpoint )\n","description":"## Purpose\nUpdates a webhook endpoint for the authenticated account.\n\nSet `rotate_signing_key` to `true` to receive a new `signing_key` once in the\nresponse. Changing `url` alone does not rotate the key.\n","tags":["Utility / Webhook Endpoints"],"parameters":[{"$ref":"#/components/parameters/id_param"}],"requestBody":{"$ref":"#/components/requestBodies/WebhookEndpointUpdate"},"responses":{"200":{"description":"Webhook endpoint successfully updated.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/WebhookEndpoint"},{"$ref":"#/components/schemas/WebhookEndpointRotateResponse"}]}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"patch":{"operationId":"patch_webhook_endpoint","summary":"( patch_webhook_endpoint )\n","description":"Partial update for a webhook endpoint. Same behavior as PUT.\n","tags":["Utility / Webhook Endpoints"],"parameters":[{"$ref":"#/components/parameters/id_param"}],"requestBody":{"$ref":"#/components/requestBodies/WebhookEndpointUpdate"},"responses":{"200":{"description":"Webhook endpoint successfully updated.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}},"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/WebhookEndpoint"},{"$ref":"#/components/schemas/WebhookEndpointRotateResponse"}]}}}},"400":{"$ref":"#/components/responses/400"},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"422":{"$ref":"#/components/responses/422"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}},"delete":{"operationId":"delete_webhook_endpoint","summary":"( delete_webhook_endpoint )\n","description":"## Purpose\nDeletes (soft-deletes) a webhook endpoint for the authenticated account.\n","tags":["Utility / Webhook Endpoints"],"parameters":[{"$ref":"#/components/parameters/id_param"}],"responses":{"204":{"description":"Webhook endpoint successfully deleted.","headers":{"X-Request-ID":{"$ref":"#/components/headers/X-Request-ID"}}},"401":{"$ref":"#/components/responses/401"},"403":{"$ref":"#/components/responses/403"},"404":{"$ref":"#/components/responses/404"},"500":{"$ref":"#/components/responses/500"},"503":{"$ref":"#/components/responses/503"}}}}},"security":[{"token":[]}],"servers":[{"url":"https://api.staging.ssl.com/api/v1","description":"Staging Server"},{"url":"https://api.ssl.com/api/v1","description":"Production Server"}],"tags":[{"name":"Status","description":null},{"name":"Authentication / Accounts (fetch_current_account)","description":null},{"name":"Authentication / Teams","description":null},{"name":"Authentication / Tokens","description":null},{"name":"Certificate Manager / Certificates","description":null},{"name":"Certificate Manager / Certificate Profiles","description":null},{"name":"Certificate Manager / Certificate Requests","description":null},{"name":"Validation / Domains","description":null},{"name":"Validation / Organizations","description":null},{"name":"Validation / Subscriber Agreement Signers","description":"EV Subscriber Agreement (EVSA) signer management, scoped to the EV organization endorsement."},{"name":"Utility / Webhook Endpoints","description":"Account webhook enrollment and delivery configuration."}],"webhooks":{"certificate_manager.certificate.create":{"post":{"description":"Sent when a new certificate is created.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Certificate"}}}},"responses":{"200":{"description":"Successfully received the certificate creation event."}}}},"certificate_manager.certificate.destroy":{"post":{"description":"Sent when a certificate is deleted.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Certificate"}}}},"responses":{"200":{"description":"Successfully received the certificate deletion event."}}}},"certificate_manager.certificate.update":{"post":{"description":"Sent when an existing certificate is updated.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Certificate"}}}},"responses":{"200":{"description":"Successfully received the certificate update event."}}}},"certificate_manager.certificate_request.create":{"post":{"description":"Sent when a new certificate request is created.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateRequest"}}}},"responses":{"200":{"description":"Successfully received the certificate request creation event."}}}},"certificate_manager.certificate_request.destroy":{"post":{"description":"Sent when a certificate request is deleted.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateRequest"}}}},"responses":{"200":{"description":"Successfully received the certificate request deletion event."}}}},"certificate_manager.certificate_request.update":{"post":{"description":"Sent when an existing certificate request is updated.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateRequest"}}}},"responses":{"200":{"description":"Successfully received the certificate request update event."}}}},"validation.domain.create":{"post":{"description":"Sent when a new domain is created. The payload is a serialized Domain resource, including\n`external_account_id` when provided at create time. Integrators may use `external_account_id`\nto correlate the event with their account (e.g. RA account number lookup).\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"responses":{"200":{"description":"Successfully received the domain creation event."}}}},"validation.domain.destroy":{"post":{"description":"Sent when a domain is deleted. The payload is a serialized Domain resource, including\n`external_account_id` when stored on the domain.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"responses":{"200":{"description":"Successfully received the domain deletion event."}}}},"validation.domain.update":{"post":{"description":"Sent when an existing domain is updated (e.g. validation progress, endorsement). The payload\nis a serialized Domain resource, including `external_account_id` when stored on the domain.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"responses":{"200":{"description":"Successfully received the domain update event."}}}},"validation.endorsements.domain.create":{"post":{"description":"Sent when a new domain endorsement is created.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainEndorsement"}}}},"responses":{"200":{"description":"Successfully received the domain endorsement creation event."}}}},"validation.endorsements.domain.destroy":{"post":{"description":"Sent when a domain endorsement is deleted.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainEndorsement"}}}},"responses":{"200":{"description":"Successfully received the domain endorsement deletion event."}}}},"validation.endorsements.domain.update":{"post":{"description":"Sent when an existing domain endorsement is updated.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainEndorsement"}}}},"responses":{"200":{"description":"Successfully received the domain endorsement update event."}}}},"validation.endorsements.organization.create":{"post":{"description":"Sent when a new organization endorsement is created.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationEndorsement"}}}},"responses":{"200":{"description":"Successfully received the organization endorsement creation event."}}}},"validation.endorsements.organization.destroy":{"post":{"description":"Sent when an organization endorsement is deleted.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationEndorsement"}}}},"responses":{"200":{"description":"Successfully received the organization endorsement deletion event."}}}},"validation.endorsements.organization.update":{"post":{"description":"Sent when an existing organization endorsement is updated.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationEndorsement"}}}},"responses":{"200":{"description":"Successfully received the organization endorsement update event."}}}},"validation.endorsements.subscriber_agreement_signer.create":{"post":{"description":"Sent when a new subscriber agreement signer is created.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriberAgreementSigner"}}}},"responses":{"200":{"description":"Successfully received the subscriber agreement signer creation event."}}}},"validation.endorsements.subscriber_agreement_signer.destroy":{"post":{"description":"Sent when a subscriber agreement signer is deleted.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriberAgreementSigner"}}}},"responses":{"200":{"description":"Successfully received the subscriber agreement signer deletion event."}}}},"validation.endorsements.subscriber_agreement_signer.update":{"post":{"description":"Sent when an existing subscriber agreement signer is updated. This includes workflow\ntransitions (`signer_state` changes such as `veriff_open`, `approved`, `accepted`,\n`rejected`) as well as contact edits.\n","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriberAgreementSigner"}}}},"responses":{"200":{"description":"Successfully received the subscriber agreement signer update event."}}}},"validation.organization.create":{"post":{"description":"Sent when a new organization is created.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}}},"responses":{"200":{"description":"Successfully received the organization creation event."}}}},"validation.organization.destroy":{"post":{"description":"Sent when an organization is deleted.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}}},"responses":{"200":{"description":"Successfully received the organization deletion event."}}}},"validation.organization.update":{"post":{"description":"Sent when an existing organization is updated.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Organization"}}}},"responses":{"200":{"description":"Successfully received the organization update event."}}}}}}