{
  "openapi": "3.1.0",
  "info": {
    "title": "BondMako Embedded Engines API",
    "version": "1.0.0",
    "description": "BondMako engines externalised as one API — credentials, scopes, idempotent mutations, signed webhooks, metered usage."
  },
  "servers": [
    {
      "url": "https://app.bondmako.com/api"
    }
  ],
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "bm_test_… (sandbox) or bm_live_… (production) credential, or OAuth access token"
      }
    }
  },
  "paths": {
    "/v1/invoices": {
      "post": {
        "operationId": "invoices-create",
        "summary": "Creates a draft invoice with line items for a customer.",
        "tags": [
          "invoices"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "Unique key; safe retries return the stored response.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "invoices",
        "x-bondmako-scopes": [
          "invoices:write"
        ],
        "x-idempotency": "required",
        "x-webhook-events": [
          "invoice.created"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "customerName": {
                    "type": "string"
                  },
                  "customerEmail": {
                    "type": "string"
                  },
                  "lineItems": {
                    "type": "array",
                    "description": "At least one line item."
                  }
                },
                "required": [
                  "customerName",
                  "customerEmail",
                  "lineItems"
                ]
              },
              "example": {
                "customerName": "Hotel Nordlicht GmbH",
                "customerEmail": "ap@hotel-nordlicht.de",
                "lineItems": [
                  {
                    "description": "Platform subscription",
                    "quantity": 1,
                    "unitPriceCents": 4900,
                    "currency": "EUR"
                  }
                ]
              }
            }
          }
        }
      }
    },
    "/v1/invoices/{invoiceId}": {
      "get": {
        "operationId": "invoices-get",
        "summary": "Returns the external invoice shape.",
        "tags": [
          "invoices"
        ],
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "invoices",
        "x-bondmako-scopes": [
          "invoices:read"
        ]
      },
      "patch": {
        "operationId": "invoices-update",
        "summary": "Updates mutable fields on a draft invoice.",
        "tags": [
          "invoices"
        ],
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "invoices",
        "x-bondmako-scopes": [
          "invoices:write"
        ],
        "x-idempotency": "optional"
      }
    },
    "/v1/invoices/{invoiceId}/issue": {
      "post": {
        "operationId": "invoices-issue",
        "summary": "Moves a draft invoice to issued — locks the legal fields.",
        "tags": [
          "invoices"
        ],
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "invoices",
        "x-bondmako-scopes": [
          "invoices:issue"
        ],
        "x-idempotency": "required",
        "x-webhook-events": [
          "invoice.issued"
        ]
      }
    },
    "/v1/invoices/{invoiceId}/send": {
      "post": {
        "operationId": "invoices-send",
        "summary": "Sends the issued invoice to the customer.",
        "tags": [
          "invoices"
        ],
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "invoices",
        "x-bondmako-scopes": [
          "invoices:send"
        ],
        "x-idempotency": "required",
        "x-webhook-events": [
          "invoice.sent"
        ]
      }
    },
    "/v1/invoices/{invoiceId}/void": {
      "post": {
        "operationId": "invoices-void",
        "summary": "Voids a draft or issued invoice.",
        "tags": [
          "invoices"
        ],
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "invoices",
        "x-bondmako-scopes": [
          "invoices:write"
        ],
        "x-idempotency": "required"
      }
    },
    "/v1/invoices/{invoiceId}/payments": {
      "get": {
        "operationId": "invoices-payments",
        "summary": "Payments recorded against an invoice.",
        "tags": [
          "invoices"
        ],
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "invoices",
        "x-bondmako-scopes": [
          "invoices:read"
        ]
      }
    },
    "/v1/invoices/{invoiceId}/payment-links": {
      "post": {
        "operationId": "invoices-payment-links",
        "summary": "Attaches a hosted payment link to an invoice.",
        "tags": [
          "invoices"
        ],
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "invoices",
        "x-bondmako-scopes": [
          "invoices:write"
        ],
        "x-idempotency": "optional",
        "x-webhook-events": [
          "payment.link_created"
        ]
      }
    },
    "/v1/invoices/{invoiceId}/audit": {
      "get": {
        "operationId": "invoices-audit",
        "summary": "Actor + workspace-scoped evidence events for an invoice.",
        "tags": [
          "invoices"
        ],
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "invoices",
        "x-bondmako-scopes": [
          "invoices:read"
        ]
      }
    },
    "/v1/invoices/{invoiceId}/document": {
      "get": {
        "operationId": "invoices-document",
        "summary": "The rendered document backing an invoice.",
        "tags": [
          "invoices"
        ],
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "invoices",
        "x-bondmako-scopes": [
          "invoices:read"
        ]
      }
    },
    "/v1/invoices/{invoiceId}/preview": {
      "post": {
        "operationId": "invoices-preview",
        "summary": "Renders a preview without mutating invoice state.",
        "tags": [
          "invoices"
        ],
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "invoices",
        "x-bondmako-scopes": [
          "invoices:read"
        ]
      }
    },
    "/v1/payments": {
      "get": {
        "operationId": "payments-list",
        "summary": "Payments for the environment, newest first.",
        "tags": [
          "payments"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "payments",
        "x-bondmako-scopes": [
          "payments:read"
        ]
      },
      "post": {
        "operationId": "payments-create",
        "summary": "Creates a payment / payment link.",
        "tags": [
          "payments"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "payments",
        "x-bondmako-scopes": [
          "payments:read"
        ],
        "x-idempotency": "optional",
        "x-webhook-events": [
          "payment.link_created"
        ]
      }
    },
    "/v1/payments/{paymentId}": {
      "get": {
        "operationId": "payments-get",
        "summary": "Returns a single payment.",
        "tags": [
          "payments"
        ],
        "parameters": [
          {
            "name": "paymentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "payments",
        "x-bondmako-scopes": [
          "payments:read"
        ]
      }
    },
    "/v1/collections/cases": {
      "get": {
        "operationId": "collections-cases",
        "summary": "Overdue-debt cases in the collection ledger.",
        "tags": [
          "collections"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "collections",
        "x-bondmako-scopes": [
          "collections:manage"
        ]
      }
    },
    "/v1/collections/actions": {
      "get": {
        "operationId": "collections-actions",
        "summary": "Dunning and recovery actions.",
        "tags": [
          "collections"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "collections",
        "x-bondmako-scopes": [
          "collections:manage"
        ]
      },
      "post": {
        "operationId": "collections-actions-create",
        "summary": "Creates a recovery action against a case.",
        "tags": [
          "collections"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "collections",
        "x-bondmako-scopes": [
          "collections:manage"
        ],
        "x-idempotency": "optional",
        "x-webhook-events": [
          "collection.action_created"
        ]
      }
    },
    "/v1/collections/actions/{actionId}": {
      "get": {
        "operationId": "collections-action-get",
        "summary": "A single collection action with state.",
        "tags": [
          "collections"
        ],
        "parameters": [
          {
            "name": "actionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "collections",
        "x-bondmako-scopes": [
          "collections:manage"
        ]
      }
    },
    "/v1/sign/envelopes": {
      "get": {
        "operationId": "sign-envelopes-list",
        "summary": "Signature envelopes, newest first.",
        "tags": [
          "sign"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "sign",
        "x-bondmako-scopes": [
          "sign:envelopes:read"
        ]
      },
      "post": {
        "operationId": "sign-envelopes-create",
        "summary": "Creates an envelope for signing.",
        "tags": [
          "sign"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "sign",
        "x-bondmako-scopes": [
          "sign:envelopes:create"
        ],
        "x-idempotency": "required",
        "x-webhook-events": [
          "sign.envelope_created"
        ]
      }
    },
    "/v1/sign/envelopes/{envelopeId}": {
      "get": {
        "operationId": "sign-envelopes-get",
        "summary": "Envelope status and recipients.",
        "tags": [
          "sign"
        ],
        "parameters": [
          {
            "name": "envelopeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "sign",
        "x-bondmako-scopes": [
          "sign:envelopes:read"
        ]
      }
    },
    "/v1/sign/envelopes/{envelopeId}/complete": {
      "post": {
        "operationId": "sign-envelopes-complete",
        "summary": "Completes an envelope after recipients sign.",
        "tags": [
          "sign"
        ],
        "parameters": [
          {
            "name": "envelopeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "sign",
        "x-bondmako-scopes": [
          "sign:envelopes:create"
        ],
        "x-idempotency": "optional",
        "x-webhook-events": [
          "sign.completed"
        ]
      }
    },
    "/v1/documents": {
      "post": {
        "operationId": "documents-create",
        "summary": "Creates a document from structured content.",
        "tags": [
          "paper"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "paper",
        "x-bondmako-scopes": [
          "documents:generate"
        ],
        "x-idempotency": "required",
        "x-webhook-events": [
          "document.created"
        ]
      }
    },
    "/v1/documents/{documentId}": {
      "get": {
        "operationId": "documents-get",
        "summary": "Document metadata and render state.",
        "tags": [
          "paper"
        ],
        "parameters": [
          {
            "name": "documentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "paper",
        "x-bondmako-scopes": [
          "documents:read"
        ]
      }
    },
    "/v1/documents/{documentId}/render": {
      "post": {
        "operationId": "documents-render",
        "summary": "Queues a document render (PDF).",
        "tags": [
          "paper"
        ],
        "parameters": [
          {
            "name": "documentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "paper",
        "x-bondmako-scopes": [
          "documents:generate"
        ],
        "x-idempotency": "optional",
        "x-webhook-events": [
          "document.render_queued"
        ]
      }
    },
    "/v1/documents/{documentId}/versions": {
      "get": {
        "operationId": "documents-versions",
        "summary": "Version history for a document.",
        "tags": [
          "paper"
        ],
        "parameters": [
          {
            "name": "documentId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "paper",
        "x-bondmako-scopes": [
          "documents:read"
        ]
      }
    },
    "/v1/templates": {
      "post": {
        "operationId": "templates-create",
        "summary": "Creates a reusable document template.",
        "tags": [
          "paper"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "paper",
        "x-bondmako-scopes": [
          "documents:generate"
        ],
        "x-idempotency": "optional"
      }
    },
    "/v1/templates/{templateId}": {
      "get": {
        "operationId": "templates-get",
        "summary": "Template metadata and variables.",
        "tags": [
          "paper"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "paper",
        "x-bondmako-scopes": [
          "documents:read"
        ]
      }
    },
    "/v1/proposals": {
      "post": {
        "operationId": "proposals-create",
        "summary": "Creates a commercial proposal.",
        "tags": [
          "proposals"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "proposals",
        "x-bondmako-scopes": [
          "proposals:write"
        ],
        "x-idempotency": "required",
        "x-webhook-events": [
          "proposal.created"
        ]
      }
    },
    "/v1/proposals/{proposalId}": {
      "get": {
        "operationId": "proposals-get",
        "summary": "Proposal with sections and status.",
        "tags": [
          "proposals"
        ],
        "parameters": [
          {
            "name": "proposalId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "proposals",
        "x-bondmako-scopes": [
          "proposals:read"
        ]
      }
    },
    "/v1/proposals/{proposalId}/send": {
      "post": {
        "operationId": "proposals-send",
        "summary": "Sends a proposal to the recipient.",
        "tags": [
          "proposals"
        ],
        "parameters": [
          {
            "name": "proposalId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "proposals",
        "x-bondmako-scopes": [
          "proposals:send"
        ],
        "x-idempotency": "required",
        "x-webhook-events": [
          "proposal.sent"
        ]
      }
    },
    "/v1/proposals/{proposalId}/accept": {
      "post": {
        "operationId": "proposals-accept",
        "summary": "Marks a proposal accepted (public accept flow).",
        "tags": [
          "proposals"
        ],
        "parameters": [
          {
            "name": "proposalId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "proposals",
        "x-bondmako-scopes": [
          "proposals:write"
        ],
        "x-idempotency": "optional",
        "x-webhook-events": [
          "proposal.accepted"
        ]
      }
    },
    "/v1/pact/contracts": {
      "post": {
        "operationId": "pact-contracts-create",
        "summary": "Creates a Pact contract.",
        "tags": [
          "pact"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "pact",
        "x-bondmako-scopes": [
          "pact:contracts:create"
        ],
        "x-idempotency": "required",
        "x-webhook-events": [
          "contract.created"
        ]
      }
    },
    "/v1/pact/contracts/{contractId}": {
      "get": {
        "operationId": "pact-contracts-get",
        "summary": "Contract with parties and clauses.",
        "tags": [
          "pact"
        ],
        "parameters": [
          {
            "name": "contractId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "pact",
        "x-bondmako-scopes": [
          "pact:contracts:read"
        ]
      }
    },
    "/v1/pact/contracts/{contractId}/send": {
      "post": {
        "operationId": "pact-contracts-send",
        "summary": "Sends a contract to counterparties.",
        "tags": [
          "pact"
        ],
        "parameters": [
          {
            "name": "contractId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "pact",
        "x-bondmako-scopes": [
          "pact:contracts:send"
        ],
        "x-idempotency": "required",
        "x-webhook-events": [
          "contract.sent"
        ]
      }
    },
    "/v1/pact/contracts/{contractId}/sign": {
      "post": {
        "operationId": "pact-contracts-sign",
        "summary": "Records a signature on a contract.",
        "tags": [
          "pact"
        ],
        "parameters": [
          {
            "name": "contractId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "pact",
        "x-bondmako-scopes": [
          "pact:contracts:send"
        ],
        "x-idempotency": "optional",
        "x-webhook-events": [
          "contract.signed"
        ]
      }
    },
    "/v1/pricing/catalog": {
      "get": {
        "operationId": "pricing-catalog",
        "summary": "Public-safe meter rates and module pricing.",
        "tags": [
          "pricing-oracle"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "pricing-oracle",
        "x-bondmako-scopes": [
          "pricing:read"
        ]
      }
    },
    "/v1/pricing/quotes": {
      "post": {
        "operationId": "pricing-quotes",
        "summary": "Quotes a module/usage combination from the Oracle.",
        "tags": [
          "pricing-oracle"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "pricing-oracle",
        "x-bondmako-scopes": [
          "pricing:read"
        ],
        "x-idempotency": "optional",
        "x-webhook-events": [
          "pricing.quote_created"
        ]
      }
    },
    "/v1/payroll/calculate": {
      "post": {
        "operationId": "payroll-calculate",
        "summary": "Calculates a payroll run preview.",
        "tags": [
          "payroll"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "payroll",
        "x-bondmako-scopes": [
          "payroll:calculate"
        ],
        "x-idempotency": "optional"
      }
    },
    "/v1/payroll/runs": {
      "post": {
        "operationId": "payroll-runs-create",
        "summary": "Creates a payroll run.",
        "tags": [
          "payroll"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "payroll",
        "x-bondmako-scopes": [
          "payroll:runs:create"
        ],
        "x-idempotency": "required",
        "x-webhook-events": [
          "payroll.run_created"
        ]
      }
    },
    "/v1/payroll/runs/{runId}": {
      "get": {
        "operationId": "payroll-runs-get",
        "summary": "Payroll run status and line items.",
        "tags": [
          "payroll"
        ],
        "parameters": [
          {
            "name": "runId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "payroll",
        "x-bondmako-scopes": [
          "payroll:runs:read"
        ]
      }
    },
    "/v1/tax/calculate": {
      "post": {
        "operationId": "tax-calculate",
        "summary": "Calculates tax for a transaction.",
        "tags": [
          "tax"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "tax",
        "x-bondmako-scopes": [
          "tax:calculate"
        ],
        "x-idempotency": "optional",
        "x-webhook-events": [
          "tax.calculated"
        ]
      }
    },
    "/v1/tax/jurisdictions": {
      "get": {
        "operationId": "tax-jurisdictions",
        "summary": "Supported jurisdictions for calculations.",
        "tags": [
          "tax"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "tax",
        "x-bondmako-scopes": [
          "tax:read"
        ]
      }
    },
    "/v1/hosted/sessions": {
      "post": {
        "operationId": "hosted-sessions-create",
        "summary": "Hosted checkout / billing session.",
        "tags": [
          "hosted"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "hosted",
        "x-bondmako-scopes": [
          "hosted:sessions:create"
        ],
        "x-idempotency": "required",
        "x-webhook-events": [
          "hosted.session_created"
        ]
      },
      "get": {
        "operationId": "hosted-sessions-list",
        "summary": "Sessions created in this environment.",
        "tags": [
          "hosted"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "hosted",
        "x-bondmako-scopes": [
          "hosted:sessions:create"
        ]
      }
    },
    "/v1/embed/sessions": {
      "post": {
        "operationId": "embed-sessions-create",
        "summary": "Embedded component session token.",
        "tags": [
          "embed"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "embed",
        "x-bondmako-scopes": [
          "embed:sessions:create"
        ],
        "x-idempotency": "required",
        "x-webhook-events": [
          "embed.session_created"
        ]
      },
      "get": {
        "operationId": "embed-sessions-list",
        "summary": "Sessions created in this environment.",
        "tags": [
          "embed"
        ],
        "parameters": [],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Validation error — structured error.code/message/requestId"
          },
          "401": {
            "description": "Missing or invalid credential"
          },
          "403": {
            "description": "Scope or engine entitlement denied"
          },
          "429": {
            "description": "Rate limited (120 req/min/IP)"
          }
        },
        "x-bondmako-engine": "embed",
        "x-bondmako-scopes": [
          "embed:sessions:create"
        ]
      }
    }
  }
}