{
  "openapi": "3.1.0",
  "info": {
    "title": "Verdacert v1 API",
    "description": "Certified-translation API for AI agents and partner platforms.\nSeven tools mirrored across REST + MCP transports, plus public\nverification endpoints. Auth is a single Bearer token; sandbox\ntokens exercise the full state machine without billing.\n\nFull developer docs: https://www.verdacert.com/docs\nQuickstart: https://www.verdacert.com/docs/quickstart\nErrors reference: https://www.verdacert.com/docs/errors\nJWKS for offline cert verification: https://www.verdacert.com/.well-known/jwks.json\n",
    "version": "1.0.0",
    "termsOfService": "https://www.verdacert.com/terms-of-service",
    "contact": {
      "name": "Verdacert",
      "email": "hello@verdacert.com",
      "url": "https://www.verdacert.com/developers"
    }
  },
  "externalDocs": {
    "description": "Verdacert API documentation",
    "url": "https://www.verdacert.com/docs"
  },
  "tags": [
    {
      "name": "Discovery",
      "description": "Live languages, document types, speed tiers and add-ons."
    },
    {
      "name": "Orders",
      "description": "Price, place and refund certified or business translation orders."
    },
    {
      "name": "Jobs",
      "description": "Poll an order and fetch its certified PDFs and signed receipts."
    },
    {
      "name": "Verification",
      "description": "Public certificate verification. No API key needed."
    }
  ],
  "servers": [
    {
      "url": "https://www.verdacert.com/api/v1",
      "description": "Production / sandbox (env determined by token prefix)"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "vc_(live|sandbox)_<base32>"
      }
    },
    "responses": {
      "Unauthorized": {
        "description": "Missing or unrecognised API key (MISSING_AUTH / INVALID_AUTH).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "RateLimited": {
        "description": "Request budget exceeded (RATE_LIMITED). Retry after the Retry-After header.",
        "headers": {
          "Retry-After": {
            "description": "Seconds to wait before retrying.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      }
    },
    "schemas": {
      "ApiError": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message",
              "recoveryHint",
              "retryable"
            ],
            "properties": {
              "code": {
                "type": "string",
                "description": "Stable machine-readable error code."
              },
              "message": {
                "type": "string"
              },
              "recoveryHint": {
                "type": "string",
                "description": "LLM-targeted hint for how to recover."
              },
              "retryable": {
                "type": "boolean"
              },
              "retryAfterSeconds": {
                "type": "integer"
              },
              "field": {
                "type": "string"
              }
            }
          }
        }
      },
      "SpeedTier": {
        "type": "string",
        "description": "same_day is best-effort: quote() returns slaGuaranteed false for it, and a missed window is refunded in full.\n",
        "enum": [
          "standard",
          "express",
          "rush",
          "same_day"
        ]
      },
      "UseCase": {
        "type": "string",
        "enum": [
          "uscis",
          "court",
          "university",
          "medical",
          "employer",
          "embassy",
          "apostille_outbound",
          "other"
        ]
      },
      "ProductLine": {
        "type": "string",
        "enum": [
          "full_translation",
          "review_and_certify",
          "business_ai",
          "business_mtpe",
          "business_human"
        ]
      },
      "JobStatus": {
        "type": "string",
        "enum": [
          "created",
          "paid",
          "processing",
          "reviewing_draft",
          "in_review",
          "ready",
          "delivered",
          "refunded",
          "failed",
          "cancelled"
        ]
      },
      "Capabilities": {
        "type": "object",
        "properties": {
          "supportedSourceLanguages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "supportedUseCases": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UseCase"
            }
          },
          "speedTiers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "tier": {
                  "$ref": "#/components/schemas/SpeedTier"
                },
                "slaHours": {
                  "type": "integer"
                },
                "slaGuaranteed": {
                  "type": "boolean",
                  "description": "False when slaHours is a best-effort target rather than a commitment (same_day)."
                },
                "specialtyLanguageMultiplier": {
                  "type": "number"
                }
              }
            }
          },
          "documentTypes": {
            "type": "array",
            "description": "Document types with a pricing complexity. Any other documentType is accepted by quote() and priced as \"other\".\n",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "complexity": {
                  "type": "string",
                  "enum": [
                    "common",
                    "complex"
                  ]
                }
              }
            }
          },
          "productLines": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductLine"
            }
          },
          "addons": {
            "type": "array",
            "description": "Add-on keys accepted by addons on QuoteInput. For \"hardcopy\", priceCents is the flat handling fee ONLY - postage is a function of the destination and is listed per service in shippingServices.\n",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string"
                },
                "priceCents": {
                  "type": "integer"
                },
                "available": {
                  "type": "boolean"
                }
              }
            }
          },
          "shippingServices": {
            "type": "array",
            "description": "The hardcopy shipping rate card. sampleCents is postage to a median destination in that scope, NOT a quote - a nearby ZIP costs less and Hawaii costs more. Call POST /v1/quote with shipTo for a figure you can bill.\n",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/ShippingService"
                },
                "label": {
                  "type": "string"
                },
                "carrier": {
                  "type": "string",
                  "enum": [
                    "usps",
                    "fedex"
                  ]
                },
                "scope": {
                  "type": "string",
                  "enum": [
                    "domestic",
                    "international"
                  ]
                },
                "sampleCents": {
                  "type": "integer"
                },
                "transitDaysMin": {
                  "type": "integer"
                },
                "transitDaysMax": {
                  "type": "integer"
                },
                "transitLabel": {
                  "type": "string"
                },
                "guaranteed": {
                  "type": "boolean",
                  "description": "True only when the carrier attaches a money-back delivery guarantee."
                },
                "caveat": {
                  "type": "string"
                }
              }
            }
          },
          "acceptanceGuarantee": {
            "type": "object",
            "properties": {
              "uscis": {
                "type": "boolean"
              },
              "refundPolicyUrl": {
                "type": "string"
              }
            }
          },
          "billing": {
            "type": "object",
            "description": "The calling key's billing posture. Present on authenticated calls only.",
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "per_order",
                  "invoice"
                ]
              },
              "netTermsDays": {
                "type": "integer",
                "description": "Invoice mode only."
              },
              "creditLimitCents": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Invoice mode only. null means no ceiling is enforced."
              },
              "paymentMethodOnFile": {
                "type": "boolean",
                "description": "Per-order mode only - whether a card is on file to charge."
              }
            }
          }
        }
      },
      "QuoteInput": {
        "type": "object",
        "required": [
          "sourceLanguage",
          "speedTier"
        ],
        "description": "Certified product lines require useCase + pageCount. Business product lines (business_ai / business_mtpe / business_human) require wordCount instead of pageCount, and useCase is ignored.\n",
        "properties": {
          "sourceLanguage": {
            "type": "string",
            "description": "ISO 639-1 code, or ISO 639-3 where a language has none (see capabilities.supportedSourceLanguages)."
          },
          "targetLanguage": {
            "type": "string",
            "default": "en"
          },
          "useCase": {
            "$ref": "#/components/schemas/UseCase"
          },
          "documentType": {
            "type": "string",
            "description": "See capabilities.documentTypes - affects complexity pricing. Any other value is accepted and quoted as \"other\"."
          },
          "pageCount": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500,
            "description": "Required for certified product lines."
          },
          "wordCount": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500000,
            "description": "Required for business product lines."
          },
          "speedTier": {
            "$ref": "#/components/schemas/SpeedTier"
          },
          "productLine": {
            "$ref": "#/components/schemas/ProductLine"
          },
          "addons": {
            "type": "object",
            "properties": {
              "notarization": {
                "type": "boolean"
              },
              "hardcopy": {
                "type": "object",
                "description": "Mail a signed hardcopy. Priced as a flat handling fee plus postage from our Pennsylvania origin to shipTo - it is NOT a flat add-on, so the total varies with the destination and the service. GET /v1/capabilities lists every service with its transit window and a sample price.\n",
                "required": [
                  "service"
                ],
                "properties": {
                  "service": {
                    "$ref": "#/components/schemas/ShippingService"
                  }
                }
              },
              "hardcopyDomestic": {
                "type": "boolean",
                "deprecated": true,
                "description": "Deprecated - use addons.hardcopy.service. Resolves to usps_priority. Still accepted, but no longer a flat fee: postage is priced from shipTo.\n"
              },
              "hardcopyInternational": {
                "type": "boolean",
                "deprecated": true,
                "description": "Deprecated - use addons.hardcopy.service. Resolves to usps_priority_intl.\n"
              },
              "apostille": {
                "type": "boolean"
              },
              "additionalCopies": {
                "type": "integer",
                "minimum": 0,
                "maximum": 20
              }
            }
          },
          "shipTo": {
            "type": "object",
            "description": "Where a hardcopy would ship. Narrower than the full shippingAddress that submit() requires, but send city and state for US destinations or the quote returns USPS tiers only. Optional: omit shipTo entirely and postage is quoted against a median band with breakdown.hardcopyShippingEstimated true; send it and the quoted figure is what you will be billed.\n",
            "required": [
              "country"
            ],
            "properties": {
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "description": "ISO 3166-1 alpha-2."
              },
              "postal_code": {
                "type": "string",
                "maxLength": 32
              },
              "city": {
                "type": "string",
                "maxLength": 120,
                "description": "Send for US destinations. USPS rates from a ZIP alone but FedEx does not, so a quote without city and state comes back with no FedEx tier - which reads as \"overnight is not offered\" rather than \"a field is missing\".\n"
              },
              "state": {
                "type": "string",
                "maxLength": 120
              }
            }
          }
        }
      },
      "ShippingService": {
        "type": "string",
        "description": "A hardcopy shipping service. Domestic services carry US addresses only and international services carry everything else; submit() returns VALIDATION_ERROR on a mismatch rather than mailing the wrong thing.\n",
        "enum": [
          "usps_ground",
          "usps_priority",
          "usps_priority_express",
          "fedex_overnight",
          "usps_intl_economy",
          "usps_priority_intl",
          "usps_priority_express_intl",
          "fedex_intl_priority"
        ]
      },
      "QuoteOutput": {
        "type": "object",
        "properties": {
          "quoteId": {
            "type": "string"
          },
          "totalCents": {
            "type": "integer"
          },
          "currency": {
            "type": "string",
            "enum": [
              "USD"
            ]
          },
          "promisedDeliveryAt": {
            "type": "string",
            "format": "date-time"
          },
          "slaGuaranteed": {
            "type": "boolean",
            "description": "False when promisedDeliveryAt is a best-effort target (same_day): do not present it to a user as a guaranteed deadline.\n"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "breakdown": {
            "type": "object",
            "properties": {
              "unit": {
                "type": "string",
                "enum": [
                  "page",
                  "word"
                ],
                "description": "page for certified product lines, word for business tiers."
              },
              "unitCount": {
                "type": "integer"
              },
              "pages": {
                "type": "integer",
                "description": "Legacy field - equals unitCount for certified, 0 for business."
              },
              "perPageBaseCents": {
                "type": "integer"
              },
              "perPageComplexitySurchargeCents": {
                "type": "integer"
              },
              "perWordCents": {
                "type": "integer",
                "description": "Per-word rate in cents for business tiers; 0 for certified."
              },
              "languageMultiplier": {
                "type": "number"
              },
              "translationSubtotalCents": {
                "type": "integer"
              },
              "minimumChargeApplied": {
                "type": "boolean",
                "description": "True if the $5 business-tier minimum-charge floor was applied."
              },
              "addonsCents": {
                "type": "integer"
              },
              "addonsBreakdown": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "label": {
                      "type": "string"
                    },
                    "cents": {
                      "type": "integer"
                    }
                  }
                }
              },
              "hardcopyHandlingCents": {
                "type": "integer",
                "description": "Flat hardcopy handling - printing, wet-ink signing, the seal, packing. 0 when no hardcopy was quoted.\n"
              },
              "hardcopyShippingCents": {
                "type": "integer",
                "description": "Postage for the chosen service to the destination. 0 when no hardcopy was quoted."
              },
              "hardcopyService": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/ShippingService"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "hardcopyShippingEstimated": {
                "type": "boolean",
                "description": "True when postage was quoted against a median reference band because the request carried no shipTo. Do not present an estimated figure to an end user as a final shipping charge.\n"
              },
              "subtotalCents": {
                "type": "integer"
              },
              "promisedDeliveryHours": {
                "type": "integer"
              },
              "complexity": {
                "type": "string",
                "enum": [
                  "common",
                  "complex",
                  "specialty"
                ]
              },
              "speedTier": {
                "$ref": "#/components/schemas/SpeedTier"
              },
              "productLine": {
                "$ref": "#/components/schemas/ProductLine"
              }
            }
          },
          "echoedInput": {
            "$ref": "#/components/schemas/QuoteInput"
          }
        }
      },
      "SubmitInput": {
        "type": "object",
        "required": [
          "quoteId",
          "idempotencyKey",
          "echoedInput"
        ],
        "description": "Certified product lines require documents. Business product lines accept either sourceText (required for business_ai) or documents (allowed for business_mtpe / business_human).\n",
        "properties": {
          "quoteId": {
            "type": "string"
          },
          "idempotencyKey": {
            "type": "string",
            "minLength": 8,
            "maxLength": 128,
            "description": "Retry-safe key - reusing returns the original job."
          },
          "echoedInput": {
            "$ref": "#/components/schemas/QuoteInput",
            "description": "Exact input from the matching quote() call."
          },
          "documents": {
            "type": "array",
            "minItems": 1,
            "maxItems": 50,
            "description": "Required for certified product lines. Optional for business tiers.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Publicly reachable URL of the source document, < 25MB."
                },
                "sha256": {
                  "type": "string"
                },
                "pageHint": {
                  "type": "integer"
                }
              }
            }
          },
          "sourceText": {
            "type": "string",
            "maxLength": 500000,
            "description": "Business tiers only. business_ai requires this; business_mtpe / business_human accept either sourceText or documents. Capped at 120k chars for business_ai, 400k chars for human tiers.\n"
          },
          "draftTranslation": {
            "type": "object",
            "required": [
              "url"
            ],
            "description": "Required when productLine='review_and_certify'.",
            "properties": {
              "url": {
                "type": "string",
                "format": "uri"
              },
              "sha256": {
                "type": "string"
              }
            }
          },
          "endUser": {
            "type": "object",
            "description": "Opaque identifier for your end-user, used for refund routing and per-user attribution. We deliberately do not accept end-user contact details - delivery notices go to your webhook, never to your end-user.\n",
            "required": [
              "externalId"
            ],
            "properties": {
              "externalId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 128
              }
            }
          },
          "applicantName": {
            "type": "string",
            "maxLength": 200,
            "description": "End-client (applicant) display name for certified product lines. Printed in the certified PDF's Applicant row and Title/Subject metadata, and bound into the signed certificate, instead of the submitting account's name. Name only - never send the end-client's email or phone; contact details are deliberately not collected.\n"
          },
          "shippingAddress": {
            "type": "object",
            "description": "Mailing address for a hardcopy add-on. REQUIRED when any hardcopy add-on is set - an API order has no checkout page, so this is the only way to supply one, and submit() returns VALIDATION_ERROR without it rather than billing for a shipment we cannot address. This address, not anything echoed in echoedInput, is what postage is priced from. A domestic service with a non-US country (or an international service with a US one) is rejected. city is required everywhere; state and postal_code are required for US addresses and optional elsewhere.\n",
            "required": [
              "line1",
              "city",
              "country"
            ],
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 200
              },
              "line1": {
                "type": "string",
                "maxLength": 200
              },
              "line2": {
                "type": "string",
                "maxLength": 200
              },
              "city": {
                "type": "string",
                "maxLength": 120
              },
              "state": {
                "type": "string",
                "maxLength": 120
              },
              "postal_code": {
                "type": "string",
                "maxLength": 32
              },
              "country": {
                "type": "string",
                "minLength": 2,
                "maxLength": 2,
                "description": "ISO 3166-1 alpha-2, e.g. \"US\"."
              },
              "phone": {
                "type": "string",
                "maxLength": 40
              }
            }
          },
          "webhookUrl": {
            "type": "string",
            "format": "uri",
            "description": "Per-call override of the API-key's stored webhook URL."
          },
          "metadata": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "SubmitOutput": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string"
          },
          "orderNumber": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/JobStatus"
          },
          "estimatedCompletionAt": {
            "type": "string",
            "format": "date-time"
          },
          "checkoutUrl": {
            "type": "string",
            "format": "uri",
            "description": "Present for some live submissions during v1 beta."
          }
        }
      },
      "StatusOutput": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string"
          },
          "orderNumber": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/JobStatus"
          },
          "statusDescription": {
            "type": "string"
          },
          "progressPercent": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "estimatedCompletionAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "events": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "at": {
                  "type": "string",
                  "format": "date-time"
                },
                "type": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "ResultOutput": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string"
          },
          "orderNumber": {
            "type": "string"
          },
          "text": {
            "type": [
              "string",
              "null"
            ],
            "description": "For business-tier orders, the translated text is returned inline here. Null for certified orders (those use the PDF artifact in the artifacts array).\n"
          },
          "artifacts": {
            "type": "array",
            "description": "Certified orders return one certified_pdf per document of the order, in upload order, each with its own certificate. Review-and-certify orders render no PDF and return one certificate_only artifact instead.\n",
            "items": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "certified_pdf",
                    "raw_translation",
                    "certificate_only",
                    "business_text"
                  ]
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "certified_pdf: short-lived signed HTTPS URL that serves the PDF itself (application/pdf); valid until expiresAt. certificate_only: the certificate's public verify page (HTML). business_text: data: URI (self-contained, base64-encoded UTF-8).\n"
                },
                "sha256": {
                  "type": "string"
                },
                "pageCount": {
                  "type": "integer",
                  "description": "The document's own page count; for a certified document whose count was never recorded (submitted without pageHint), the order's.\n"
                },
                "expiresAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "certificateId": {
                  "type": "string",
                  "description": "The certificate this document's PDF carries (certified outputs only)."
                }
              }
            }
          },
          "certification": {
            "type": [
              "object",
              "null"
            ],
            "description": "The first document's certificate, kept for single-document clients. On an order with several documents, use certifications.\n",
            "properties": {
              "certificateId": {
                "type": "string"
              },
              "translatorName": {
                "type": "string"
              },
              "translatorCredentials": {
                "type": "string"
              },
              "issuedAt": {
                "type": "string",
                "format": "date-time"
              },
              "publicVerifyUrl": {
                "type": "string",
                "format": "uri"
              },
              "jws": {
                "type": "string",
                "description": "Compact JWS Ed25519 receipt. Verify against /.well-known/jwks.json."
              }
            }
          },
          "certifications": {
            "type": "array",
            "description": "Every document's certificate, in the same order as artifacts. Each document is certified, and can be re-certified, on its own. Empty for business-tier jobs.\n",
            "items": {
              "type": "object",
              "properties": {
                "certificateId": {
                  "type": "string"
                },
                "translatorName": {
                  "type": "string"
                },
                "translatorCredentials": {
                  "type": "string"
                },
                "issuedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "publicVerifyUrl": {
                  "type": "string",
                  "format": "uri"
                },
                "jws": {
                  "type": "string"
                }
              }
            }
          },
          "acceptanceGuarantee": {
            "type": "object",
            "properties": {
              "uscis": {
                "type": "boolean"
              },
              "refundIfRejectedUrl": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "referral": {
            "type": "object",
            "description": "Present when this order earned referral rev-share.",
            "properties": {
              "revShareBps": {
                "type": "integer"
              },
              "payoutCents": {
                "type": "integer"
              },
              "availableAt": {
                "type": "string",
                "format": "date-time"
              }
            }
          }
        }
      },
      "RefundInput": {
        "type": "object",
        "properties": {
          "amountCents": {
            "type": "integer",
            "minimum": 1,
            "description": "Partial refund in cents. Omit for full refund."
          },
          "reason": {
            "type": "string",
            "enum": [
              "duplicate",
              "fraudulent",
              "requested_by_customer",
              "other"
            ],
            "default": "requested_by_customer"
          }
        }
      },
      "RefundOutput": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string"
          },
          "orderNumber": {
            "type": "string"
          },
          "refundedCents": {
            "type": "integer"
          },
          "status": {
            "$ref": "#/components/schemas/JobStatus"
          },
          "refundId": {
            "type": [
              "string",
              "null"
            ],
            "description": "Stripe refund id; null for sandbox refunds."
          }
        }
      },
      "VerifyOutput": {
        "type": "object",
        "properties": {
          "valid": {
            "type": "boolean"
          },
          "certificateId": {
            "type": "string"
          },
          "issuedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "revokedAt": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "revokedReason": {
            "type": [
              "string",
              "null"
            ]
          },
          "translator": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "name": {
                "type": "string"
              },
              "credentials": {
                "type": "string"
              }
            }
          },
          "applicant": {
            "type": "object",
            "description": "End-client the translation was certified for. Present only when the order carried an explicit applicant name AND the signature verifies (the value is read from the signed payload, never the database row).\n",
            "properties": {
              "name": {
                "type": "string"
              }
            }
          },
          "document": {
            "type": "object",
            "description": "The one document of the order this certificate covers, from the signed payload. Absent on order-level certificates (sandbox, review-and-certify) and on those issued before certificates were per document.\n",
            "properties": {
              "type": {
                "type": "string"
              },
              "pageCount": {
                "type": "integer"
              },
              "documentsInOrder": {
                "type": "integer"
              }
            }
          },
          "documentHash": {
            "type": [
              "string",
              "null"
            ],
            "description": "SHA-256 of the certified PDF this certificate is printed on, as recorded when it was rendered (not part of the signed payload).\n"
          },
          "isSandbox": {
            "type": "boolean"
          },
          "acceptanceGuarantee": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "uscis": {
                "type": "boolean"
              }
            }
          },
          "jws": {
            "type": "string",
            "description": "Compact JWS Ed25519 receipt."
          }
        }
      }
    }
  },
  "paths": {
    "/capabilities": {
      "get": {
        "summary": "Get live API capabilities",
        "description": "Live enums for supported languages, document types, speed tiers, add-ons, product lines. Call once at session start to ground tool use.",
        "operationId": "getCapabilities",
        "tags": [
          "Discovery"
        ],
        "responses": {
          "200": {
            "description": "ok",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Capabilities"
                }
              }
            }
          },
          "401": {
            "description": "missing or invalid auth",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/quote": {
      "post": {
        "summary": "Get a price + ETA quote",
        "operationId": "quote",
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "ok",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteOutput"
                }
              }
            }
          },
          "400": {
            "description": "validation error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/submit": {
      "post": {
        "summary": "Submit a translation job",
        "operationId": "submit",
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubmitInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "job created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubmitOutput"
                }
              }
            }
          },
          "400": {
            "description": "validation error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "description": "payment failed / no payment method / spend cap exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/status/{jobId}": {
      "get": {
        "summary": "Poll a job's status",
        "operationId": "getStatus",
        "tags": [
          "Jobs"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ok",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusOutput"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "description": "jobId not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/result/{jobId}": {
      "get": {
        "summary": "Get certified artifacts + JWS receipt",
        "operationId": "getResult",
        "tags": [
          "Jobs"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ok",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResultOutput"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "description": "jobId not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "409": {
            "description": "job not yet ready",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/refund/{jobId}": {
      "post": {
        "summary": "Refund an order",
        "description": "Refunds an order placed by the calling key. Full refund by default;\npass amountCents for partial. Refund window is 30 days from order\ncreation. Idempotency-keyed Stripe-side so retries don't double-refund.\n",
        "operationId": "refund",
        "tags": [
          "Orders"
        ],
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RefundInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "refunded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RefundOutput"
                }
              }
            }
          },
          "400": {
            "description": "validation error (e.g. amount exceeds remaining refundable)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "description": "jobId not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/verify/{certificateId}": {
      "get": {
        "summary": "Verify a certificate (public, no auth)",
        "operationId": "verifyCertificate",
        "tags": [
          "Verification"
        ],
        "security": [],
        "parameters": [
          {
            "name": "certificateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "ok",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VerifyOutput"
                }
              }
            }
          },
          "404": {
            "description": "certificate not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiError"
                }
              }
            }
          }
        }
      }
    }
  }
}