Hilt API (Pay API + Workspace)

The Hilt REST contract: Hilt Pay API /v1/access routes (agent bootstrap, apps, products, x402 V2 payment sessions and settlement, durable and metered entitlements, MPP metered payment channels, native Solana USDC subscriptions, sandbox sessions, webhooks), Workspace merchant routes (products, hosted checkout, payments, memberships, receipts, support, webhooks, API keys, testing scenarios), PayMe routes and the agent-commerce offer/catalog/pricing and plan-activation routes. OpenAPI 3.1.0, 154 paths / 165 operations, FastAPI-generated; declares no securitySchemes (auth documented in prose: X-Hilt-Key hk_live_/hk_sandbox_, dashboard bearer, PayMe OAuth PKCE, x402 PAYMENT-SIGNATURE, MPP Authorization: Payment).

Operations 165

GET /health Health #
GET /v1/health Health V1 #
POST /v1/auth/register Register #
POST /v1/auth/login Login #
POST /v1/auth/wallet Wallet Auth #
GET /v1/auth/oauth/providers Oauth Provider Status #
GET /v1/auth/oauth/{provider}/start Oauth Start #
GET /v1/auth/oauth/{provider}/callback Oauth Callback #
POST /v1/auth/logout Logout #
POST /v1/auth/refresh Refresh Token #
GET /v1/account/me Get Me #
PATCH /v1/account/me Update Me #
GET /v1/account/summary Get Account Summary #
GET /v1/account/analytics Get Account Analytics #
PATCH /v1/account/me/security Update Account Security #
GET /v1/account/delivery/readiness Get Delivery Readiness #
POST /v1/account/delivery/test Run Delivery Test #
DELETE /v1/account/account Delete Account #
GET /v1/keys List Keys #
POST /v1/keys Create Key #
DELETE /v1/keys/{key_id} Revoke Key #
GET /v1/billing/summary Get Billing Summary #
POST /v1/billing/checkout/stripe Create Stripe Checkout #
POST /v1/billing/portal/stripe Create Stripe Portal #
POST /v1/billing/refresh/stripe Refresh Stripe Billing #
POST /v1/billing/webhooks/stripe Stripe Webhook #
POST /v1/receipt Generate a signed Hilt receipt #
GET /v1/receipt/{receipt_id} Retrieve a receipt by ID #
GET /v1/receipt/{receipt_id}/public Public receipt proof detail #
GET /v1/receipt/{receipt_id}/verify Publicly verify a receipt's cryptographic signature #
GET /v1/receipt/{receipt_id}/pdf Public PDF receipt proof #
GET /v1/receipt/{receipt_id}/pdf/private Authenticated PDF receipt export #
GET /v1/receipts List receipts #
GET /v1/receipts/export.csv Export authenticated receipt ledger CSV #
PATCH /v1/receipt/{receipt_id}/invoice-metadata Save merchant invoice metadata for a receipt #
POST /v1/receipt/{receipt_id}/send-proof Email the public proof link for a receipt #
POST /v1/support/tickets Create support ticket #
GET /v1/support/tickets List user's tickets #
GET /v1/support/tickets/{ticket_id} Ticket thread #
POST /v1/support/tickets/{ticket_id}/message Add message to ticket #
GET /v1/webhooks/endpoints List webhook endpoints #
POST /v1/webhooks/endpoints Create webhook endpoint #
PATCH /v1/webhooks/endpoints/{endpoint_id} Update webhook endpoint #
DELETE /v1/webhooks/endpoints/{endpoint_id} Disable webhook endpoint #
POST /v1/webhooks/endpoints/{endpoint_id}/test Send a signed test webhook event #
GET /v1/webhooks/deliveries List webhook deliveries #
POST /v1/webhooks/deliveries/{delivery_id}/replay Replay a webhook delivery #
GET /v1/webhooks/timeline View webhook event timeline for a payment or membership #
GET /v1/webhooks/events List emitted webhook events #
GET /v1/integrations/health Check integration connection health #
GET /v1/integrations/events List emitted events for integrations #
POST /v1/integrations/zapier/hooks Subscribe a Zapier REST Hook #
DELETE /v1/integrations/zapier/hooks/{endpoint_id} Unsubscribe a Zapier REST Hook #
GET /v1/testing/scenarios List supported sandbox scenarios #
POST /v1/testing/sessions Create a simulated Hilt sandbox session #
GET /v1/testing/sessions List recent simulated sandbox sessions #
GET /v1/testing/sessions/{session_id} Get a simulated sandbox session #
POST /v1/access/agent-bootstrap Create a sandbox Hilt Pay API setup intent for an agent #
POST /v1/access/agent-bootstrap/{setup_intent_id}/status Check a Hilt Pay API agent setup intent #
POST /v1/access/agent-bootstrap/{setup_intent_id}/manifest Attach and evaluate an agent setup manifest #
POST /v1/access/agent-bootstrap/{setup_intent_id}/approve Approve an agent setup intent and optionally issue a live Hilt Pay API key #
GET /v1/access/rails List Hilt Pay API rails #
GET /v1/access/rail-settings List merchant Hilt Pay API rail settings #
PUT /v1/access/rail-settings/{rail_id} Configure a merchant Hilt Pay API rail #
GET /v1/access/native-subscriptions/{authorization_id} Read a Solana native subscription authorization #
POST /v1/access/native-subscriptions/{authorization_id}/cancel-intent Create a buyer cancellation intent #
POST /v1/access/native-subscriptions/{authorization_id}/cancel-confirm Confirm native subscription cancellation proof #
POST /v1/access/apps Create a Hilt Pay API app #
POST /v1/access/products Create a Hilt Pay API product #
GET /v1/access/setup/readiness Inspect agent setup readiness for Hilt Pay API #
GET /v1/access/products/available-rails List available rails for a Hilt Pay API product by lookup #
GET /v1/access/products/{product_id}/available-rails List available rails for a Hilt Pay API product #
POST /v1/access/payment-sessions Create an access payment session #
POST /v1/access/metered-sessions Create an MPP metered payment session #
POST /v1/access/metered-sessions/{session_id}/authorize Open, update, commit, or close an MPP metered session #
POST /v1/access/metered-sessions/{session_id}/deliveries Reserve metered delivery against an open MPP session #
POST /v1/access/metered-sessions/{session_id}/commits Commit a reserved delivery with its cumulative MPP voucher #
POST /v1/access/metered-sessions/{session_id}/settle Settle an open MPP session at its highest verified voucher #
GET /v1/access/metered-sessions/{session_id} Read an MPP metered session and its delivery evidence #
POST /v1/access/sandbox/payment-sessions Create a sandbox Hilt Pay API payment session #
POST /v1/access/sandbox/payment-sessions/{sandbox_session_id}/confirm Confirm a sandbox Hilt Pay API payment proof #
POST /v1/access/payment-proofs Submit a Hilt Pay API rail payment proof #
POST /v1/access/x402/settle Verify and settle an x402 V2 payment #
POST /v1/access/entitlements/check Check access entitlement #
POST /v1/access/entitlements/consume Atomically consume metered entitlement usage #
GET /v1/access/entitlements/{entitlement_id} Get an access entitlement #
GET /v1/access/billing/entitlement Get current Hilt Pay API billing entitlement #
POST /v1/access/billing/checkout/stripe Retired Hilt Pay API subscription checkout #
POST /v1/access/webhooks Create a webhook endpoint for Hilt Pay API #
POST /v1/pay/broadcast Record Payment Broadcast #
POST /v1/pay/automatic-renew/setup Automatic Renew Setup #
POST /v1/pay/identity/start Start Checkout Identity Handshake #
POST /v1/pay/identity/complete Complete Checkout Identity Handshake #
POST /v1/pay/phantom/connect/callback Phantom Connect Callback #
POST /v1/pay/phantom/message-url Phantom Message Url #
POST /v1/pay/phantom/renewal-message-url Phantom Renewal Message Url #
POST /v1/pay/phantom/message/callback Phantom Message Callback #
POST /v1/pay/phantom/renewal-message/callback Phantom Renewal Message Callback #
POST /v1/pay/phantom/transaction-url Phantom Transaction Url #
POST /v1/pay/phantom/transaction/callback Phantom Transaction Callback #
POST /v1/pay/confirm Confirm Payment #
GET /v1/connectors/grok/authorization Read Grok Authorization #
POST /v1/connectors/grok/authorization Approve Grok Authorization #
GET /v1/pay-me/connector-connections Read Pay Me Connector Connections #
DELETE /v1/pay-me/connector-connections/{connection_id} Disconnect Pay Me Connector #
POST /v1/pay-me/payment-requests Create Pay Me Payment Request #
GET /v1/pay-me/payment-requests/{public_id} Read Pay Me Payment Request #
GET /v1/pay-me/payment-intents/{public_id} Read Pay Me Payment Intent #
GET /v1/pay-me/session Read the authenticated X identity and Hilt PayMe profile #
GET /v1/pay-me/security Read PayMe receiving-wallet security status #
POST /v1/pay-me/security/authenticator/setup Start PayMe authenticator enrollment #
GET /v1/pay-me/security/authenticator/enrollments/{enrollment_id} Read a short-lived PayMe authenticator wallet approval #
POST /v1/pay-me/security/authenticator/enrollments/{enrollment_id}/signature Approve PayMe authenticator setup with the current wallet #
GET /v1/pay-me/security/authenticator/enrollments/{enrollment_id}/status Read current-wallet approval status for PayMe authenticator setup #
POST /v1/pay-me/security/authenticator/confirm Confirm PayMe authenticator enrollment #
POST /v1/pay-me/profile Create or update a verified Hilt PayMe profile #
POST /v1/pay-me/wallet-links Create a short-lived receiving-wallet verification link #
POST /v1/pay-me/wallet-links/{wallet_link_id}/prepare Prepare the exact receiving-wallet verification message #
POST /v1/pay-me/wallet-links/{wallet_link_id}/signature Submit a receiving-wallet signature #
POST /v1/pay-me/wallet-links/{wallet_link_id}/complete Confirm a verified receiving wallet and publish the PayMe profile #
POST /v1/pay-me/orders Create an atomic PayMe payment order #
GET /v1/pay-me/orders/{public_id} Read a PayMe payment order #
POST /v1/pay-me/orders/{public_id}/confirm Confirm an atomic PayMe payment order #
POST /v1/pay-me/payments Pay a verified Hilt PayMe recipient through MPP #
GET /v1/pay-me/payments/{public_id} Read a PayMe MPP payment and receipt #
GET /v1/pay-me/{x_handle} Resolve a verified Hilt PayMe profile #
POST /v1/pay-me/{x_handle}/checkouts Create a payer-authorized checkout from a Hilt PayMe profile #
POST /v1/products Create a B2C payment product #
GET /v1/products List my products #
GET /v1/products/p/{slug} View product (public) #
POST /v1/products/p/{slug}/connect Initiate a checkout session (public) #
POST /v1/products/p/{slug}/resolve-handoff Resolve a signed buyer handoff (public) #
GET /v1/products/{product_id}/payments List payments for a product #
GET /v1/products/{product_id}/analytics Payment analytics for a product #
GET /v1/products/{product_id} Get product by ID #
PATCH /v1/products/{product_id} Update a product #
DELETE /v1/products/{product_id} Archive a product #
POST /v1/products/{product_id}/handoff-link Create a signed buyer checkout link #
GET /v1/payments/{payment_id} Poll payment status (public) #
GET /v1/memberships List memberships #
GET /v1/memberships/lookup Lookup memberships by wallet, identity, or transaction #
GET /v1/memberships/renewal-intelligence Renewal cohorts, reminders, and reporting #
GET /v1/memberships/{membership_id} Get membership by ID #
PATCH /v1/memberships/{membership_id}/notes Save merchant notes for a membership #
PATCH /v1/memberships/{membership_id}/profile Update member display details #
POST /v1/memberships/{membership_id}/gift Gift extra access time to a member #
POST /v1/memberships/{membership_id}/retry-delivery Retry membership access delivery #
GET /v1/memberships/{membership_id}/delivery-diagnostics Inspect Telegram or Discord automation for a membership #
POST /v1/memberships/{membership_id}/delivery-support-ticket Open or reuse a support ticket for a delivery issue #
GET /v1/memberships/{membership_id}/reactivation Get renewal and reactivation links for a membership #
GET /v1/checkout-domains List merchant checkout domain requests #
POST /v1/checkout-domains Request a merchant checkout domain #
GET /v1/agent-commerce/offer Get the Hilt Pay API marketplace catalog #
GET /v1/agent-commerce/catalog Get the canonical Hilt agent-commerce catalog #
GET /v1/agent-commerce/pricing Get canonical Hilt agent-commerce pricing #
POST /v1/agent-commerce/plans/starter/activate Activate Hilt Pay API Starter #
POST /v1/agent-commerce/plans/growth/activate Activate Hilt Pay API Growth #
POST /v1/agent-commerce/plans/scale/activate Activate Hilt Pay API Scale #
POST /v1/agent-commerce/plans/claim Claim a live Hilt Pay API key after marketplace activation #
POST /mcp Call the Hilt Agent Gateway over MCP Streamable HTTP #
GET /.well-known/agent-card.json Get the Hilt Pay A2A Agent Card #
GET /.well-known/agent.json Get the Hilt Pay A2A Agent Card from the legacy discovery path #
POST /a2a/jsonrpc Call the Hilt Pay agent over A2A JSON-RPC #

Documentation

Specifications

Other Resources

🔗
Overlay
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/overlays/hilt-so-openapi-overlay.yaml
🔗
OAuthScopes
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/scopes/hilt-so-scopes.yml
🔗
Conventions
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/conventions/hilt-so-conventions.yml
🔗
Idempotency
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/conventions/hilt-so-conventions.yml
🔗
ErrorCatalog
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/errors/hilt-so-problem-types.yml
🔗
Conformance
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/conformance/hilt-so-conformance.yml
🔗
Lifecycle
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/lifecycle/hilt-so-lifecycle.yml
🔗
Sandbox
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/sandbox/hilt-so-sandbox.yml
🔗
DataModel
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/data-model/hilt-so-data-model.yml
🔗
Webhooks
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/asyncapi/hilt-so-webhooks-asyncapi.yml
🔗
Webhooks
https://docs.hilt.so/developers/webhooks
🔗
Plans
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/plans/hilt-so-plans-pricing.yml
🔗
ChangeLog
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/changelog/hilt-so-changelog.yml
🔗
Postman
https://www.hilt.so/downloads/hilt-postman-collection-latest.json
🔗
Postman
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/postman/hilt-so-postman-collection.json
🔗
Packages
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/packages/hilt-so-packages.yml
🔗
SDKs
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/packages/hilt-so-packages.yml
🔗
CLI
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/cli/hilt-so-cli.yml
🔗
Components
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/components/hilt-so-components.yml
🔗
AgentSkill
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/skills/_index.yml
🔗
ToolCrosswalk
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/mcp/hilt-so-tool-crosswalk.yml
🔗
APIsJSON
https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/apis.yml

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/hilt-pay-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

hilt-so-openapi.yml Raw ↑
# Faithful YAML rendering of the provider-published spec saved verbatim at openapi/_original/hilt-so-api-openapi.json
# fetched 2026-09-19 from the URL in info.x-source-url of that file's sibling manifest; content unchanged.
openapi: 3.1.0
info:
  title: Hilt API
  description: Hilt Pay Workspace and Hilt Pay API routes for zero-custody Solana checkout, MPP metered payment channels, receipts, memberships, entitlements, native subscriptions, webhooks, and support context.
  version: 1.0.0
  contact:
    name: Hilt
    url: https://www.hilt.so
    email: hello@hilt.so
  x-guidance: Start with POST /v1/access/agent-bootstrap. An agent can purchase 30 days of Starter, Growth, or Scale through the matching x402 V2 activation endpoint paid in Solana USDC. For metered integrations, settle PAYMENT-SIGNATURE through POST /v1/access/x402/settle and atomically consume through POST /v1/access/entitlements/consume before serving. Never send private keys, seed phrases, or wallet secrets.
paths:
  /health:
    get:
      tags:
      - system
      summary: Health
      operationId: health_health_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HealthResponse'
  /v1/health:
    get:
      tags:
      - system
      summary: Health V1
      operationId: health_v1_v1_health_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HealthResponse'
  /v1/auth/register:
    post:
      tags:
      - auth
      summary: Register
      description: Creates a new Hilt merchant account on the free plan.
      operationId: register_v1_auth_register_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterRequest'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/auth/login:
    post:
      tags:
      - auth
      summary: Login
      description: Password-based login. Returns JWT on success with full entitlement claims.
      operationId: login_v1_auth_login_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/auth/wallet:
    post:
      tags:
      - auth
      summary: Wallet Auth
      description: 'Phantom wallet-based authentication.

        Verifies the signed nonce, creates or retrieves the user account.

        Wallet-only accounts have no email so is_staff is always False.'
      operationId: wallet_auth_v1_auth_wallet_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WalletAuthRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/auth/oauth/providers:
    get:
      tags:
      - auth
      summary: Oauth Provider Status
      operationId: oauth_provider_status_v1_auth_oauth_providers_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OAuthProviderStatusResponse'
  /v1/auth/oauth/{provider}/start:
    get:
      tags:
      - auth
      summary: Oauth Start
      operationId: oauth_start_v1_auth_oauth__provider__start_get
      parameters:
      - name: provider
        in: path
        required: true
        schema:
          type: string
          title: Provider
      - name: mode
        in: query
        required: false
        schema:
          type: string
          default: login
          title: Mode
      - name: next
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Next
      - name: surface
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Surface
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OAuthStartResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/auth/oauth/{provider}/callback:
    get:
      tags:
      - auth
      summary: Oauth Callback
      operationId: oauth_callback_v1_auth_oauth__provider__callback_get
      parameters:
      - name: provider
        in: path
        required: true
        schema:
          type: string
          title: Provider
      - name: code
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Code
      - name: state
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: State
      - name: error
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Error
      - name: error_description
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Error Description
      responses:
        '302':
          description: Redirect to the Hilt application after OAuth.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/auth/logout:
    post:
      tags:
      - auth
      summary: Logout
      description: 'Logs out the current session.

        For stateless JWTs this is a no-op server-side.

        Clients should discard the token locally.'
      operationId: logout_v1_auth_logout_post
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DetailResponse'
  /v1/auth/refresh:
    post:
      tags:
      - auth
      summary: Refresh Token
      description: 'Refreshes a JWT that is still valid.

        Issues a new token with a fresh TTL and re-derives entitlement claims

        from the database so subscription changes are reflected immediately.'
      operationId: refresh_token_v1_auth_refresh_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RefreshRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/account/me:
    get:
      tags:
      - account
      summary: Get Me
      description: 'Returns the authenticated user''s full profile for dashboard bootstrap.

        This is the primary endpoint for dashboard bootstrap.'
      operationId: get_me_v1_account_me_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountResponse'
    patch:
      tags:
      - account
      summary: Update Me
      description: Updates mutable fields on the user profile.
      operationId: update_me_v1_account_me_patch
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccountUpdateRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdatedFieldsResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/account/summary:
    get:
      tags:
      - account
      summary: Get Account Summary
      description: 'Returns the merchant-facing dashboard summary used by the sidebar and overview.

        Figures are grouped by asset so we do not collapse USDC and SOL into one fake number.'
      operationId: get_account_summary_v1_account_summary_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountSummaryResponse'
  /v1/account/analytics:
    get:
      tags:
      - account
      summary: Get Account Analytics
      operationId: get_account_analytics_v1_account_analytics_get
      parameters:
      - name: window_days
        in: query
        required: false
        schema:
          type: integer
          maximum: 90
          minimum: 3
          default: 30
          title: Window Days
      - name: daily_days
        in: query
        required: false
        schema:
          type: integer
          maximum: 30
          minimum: 3
          default: 14
          title: Daily Days
      - name: start_date
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          title: Start Date
      - name: end_date
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          title: End Date
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceAnalyticsResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/account/me/security:
    patch:
      tags:
      - account
      summary: Update Account Security
      description: Updates merchant email and password details for hilt.so sign-in.
      operationId: update_account_security_v1_account_me_security_patch
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccountSecurityUpdateRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdatedFieldsResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/account/delivery/readiness:
    get:
      tags:
      - account
      summary: Get Delivery Readiness
      operationId: get_delivery_readiness_v1_account_delivery_readiness_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeliveryReadinessResponse'
  /v1/account/delivery/test:
    post:
      tags:
      - account
      summary: Run Delivery Test
      operationId: run_delivery_test_v1_account_delivery_test_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeliveryTestRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeliveryTestResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/account/account:
    delete:
      tags:
      - account
      summary: Delete Account
      description: 'Soft-deletes the account. Sets deleted_at timestamp and status = ''deleted''.

        GDPR-compliant: user data is pseudonymised, not hard-deleted.'
      operationId: delete_account_v1_account_account_delete
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DetailResponse'
  /v1/keys:
    get:
      tags:
      - api-keys
      summary: List Keys
      description: Lists all API keys for the authenticated user (excludes raw values).
      operationId: list_keys_v1_keys_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/KeySummary'
                type: array
                title: Response List Keys V1 Keys Get
    post:
      tags:
      - api-keys
      summary: Create Key
      description: 'Creates a new API key.

        The raw key value is returned ONCE and cannot be retrieved again.

        Store it in a secrets manager immediately.'
      operationId: create_key_v1_keys_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateKeyRequest'
        required: true
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateKeyResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/keys/{key_id}:
    delete:
      tags:
      - api-keys
      summary: Revoke Key
      description: 'Revokes an API key. Revocation is immediate and permanent.

        Requests using this key will receive HTTP 401 from the next request onwards.'
      operationId: revoke_key_v1_keys__key_id__delete
      parameters:
      - name: key_id
        in: path
        required: true
        schema:
          type: string
          title: Key Id
      responses:
        '204':
          description: Successful Response
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/billing/summary:
    get:
      tags:
      - billing
      summary: Get Billing Summary
      operationId: get_billing_summary_v1_billing_summary_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingSummaryResponse'
  /v1/billing/checkout/stripe:
    post:
      tags:
      - billing
      summary: Create Stripe Checkout
      operationId: create_stripe_checkout_v1_billing_checkout_stripe_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StripeCheckoutRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StripeCheckoutResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/billing/portal/stripe:
    post:
      tags:
      - billing
      summary: Create Stripe Portal
      operationId: create_stripe_portal_v1_billing_portal_stripe_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StripePortalRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StripePortalResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/billing/refresh/stripe:
    post:
      tags:
      - billing
      summary: Refresh Stripe Billing
      operationId: refresh_stripe_billing_v1_billing_refresh_stripe_post
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StripeRefreshResponse'
  /v1/billing/webhooks/stripe:
    post:
      tags:
      - billing
      summary: Stripe Webhook
      operationId: stripe_webhook_v1_billing_webhooks_stripe_post
      parameters:
      - name: Stripe-Signature
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Stripe-Signature
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StripeWebhookResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/receipt:
    post:
      tags:
      - Receipt
      summary: Generate a signed Hilt receipt
      description: 'Generate a cryptographically signed Hilt receipt for a Solana transaction.


        **Idempotent:** The same `tx_sig` always returns the same receipt.

        Stored immutably in Postgres + Cloudflare R2. Ed25519 signed by the Hilt server key.'
      operationId: post_receipt_v1_receipt_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReceiptRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReceiptResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/receipt/{receipt_id}:
    get:
      tags:
      - Receipt
      summary: Retrieve a receipt by ID
      description: Retrieve the full signed receipt JSON. Auth required.
      operationId: get_receipt_v1_receipt__receipt_id__get
      parameters:
      - name: receipt_id
        in: path
        required: true
        schema:
          type: string
          title: Receipt Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReceiptResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/receipt/{receipt_id}/public:
    get:
      tags:
      - Receipt
      summary: Public receipt proof detail
      operationId: get_public_receipt_v1_receipt__receipt_id__public_get
      parameters:
      - name: receipt_id
        in: path
        required: true
        schema:
          type: string
          title: Receipt Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicReceiptResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/receipt/{receipt_id}/verify:
    get:
      tags:
      - Receipt
      summary: Publicly verify a receipt's cryptographic signature
      description: '**Public endpoint — no authentication required.**


        Re-computes the SHA-256 hash of the receipt JSON and verifies the Ed25519 signature.

        Returns verification result usable by auditors and third parties.'
      operationId: verify_receipt_v1_receipt__receipt_id__verify_get
      parameters:
      - name: receipt_id
        in: path
        required: true
        schema:
          type: string
          title: Receipt Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VerifyReceiptResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/receipt/{receipt_id}/pdf:
    get:
      tags:
      - Receipt
      summary: Public PDF receipt proof
      operationId: get_receipt_pdf_v1_receipt__receipt_id__pdf_get
      parameters:
      - name: receipt_id
        in: path
        required: true
        schema:
          type: string
          title: Receipt Id
      responses:
        '200':
          description: Rendered receipt proof.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/receipt/{receipt_id}/pdf/private:
    get:
      tags:
      - Receipt
      summary: Authenticated PDF receipt export
      operationId: get_authenticated_receipt_pdf_v1_receipt__receipt_id__pdf_private_get
      parameters:
      - name: receipt_id
        in: path
        required: true
        schema:
          type: string
          title: Receipt Id
      responses:
        '200':
          description: Rendered authenticated receipt.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/receipts:
    get:
      tags:
      - Receipt
      summary: List receipts
      description: Paginated list of receipts for the authenticated user.
      operationId: list_receipts_v1_receipts_get
      parameters:
      - name: page
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          description: Page number
          default: 1
          title: Page
        description: Page number
      - name: per_page
        in: query
        required: false
        schema:
          type: integer
          maximum: 100
          minimum: 1
          description: Results per page
          default: 20
          title: Per Page
        description: Results per page
      - name: wallet
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Filter by wallet address
          title: Wallet
        description: Filter by wallet address
      - name: q
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Search by tx, receipt id, product, or invoice metadata
          title: Q
        description: Search by tx, receipt id, product, or invoice metadata
      - name: product_id
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Filter by product
          title: Product Id
        description: Filter by product
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReceiptListResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/receipts/export.csv:
    get:
      tags:
      - Receipt
      summary: Export authenticated receipt ledger CSV
      description: Authenticated CSV export for merchant-owned receipt and invoice records.
      operationId: export_receipts_csv_v1_receipts_export_csv_get
      parameters:
      - name: wallet
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Filter by wallet address
          title: Wallet
        description: Filter by wallet address
      - name: q
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Search by tx, receipt id, product, or invoice metadata
          title: Q
        description: Search by tx, receipt id, product, or invoice metadata
      - name: product_id
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Filter by product
          title: Product Id
        description: Filter by product
      responses:
        '200':
          description: Receipt ledger export.
          content:
            text/csv:
              schema:
                type: string
                format: binary
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/receipt/{receipt_id}/invoice-metadata:
    patch:
      tags:
      - Receipt
      summary: Save merchant invoice metadata for a receipt
      operationId: update_receipt_invoice_metadata_v1_receipt__receipt_id__invoice_metadata_patch
      parameters:
      - name: receipt_id
        in: path
        required: true
        schema:
          type: string
          title: Receipt Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReceiptInvoiceMetadataRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReceiptUpdateResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/receipt/{receipt_id}/send-proof:
    post:
      tags:
      - Receipt
      summary: Email the public proof link for a receipt
      operationId: send_receipt_proof_v1_receipt__receipt_id__send_proof_post
      parameters:
      - name: receipt_id
        in: path
        required: true
        schema:
          type: string
          title: Receipt Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReceiptSendProofRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReceiptProofEmailResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/support/tickets:
    post:
      tags:
      - Support
      - Support
      summary: Create support ticket
      operationId: create_ticket_v1_support_tickets_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTicketRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupportTicketCreateResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    get:
      tags:
      - Support
      - Support
      summary: List user's tickets
      operationId: list_tickets_v1_support_tickets_get
      parameters:
      - name: status
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: Status
      - name: page
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          default: 1
          title: Page
      - name: per_page
        in: query
        required: false
        schema:
          type: integer
          maximum: 50
          minimum: 1
          default: 20
          title: Per Page
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupportTicketListResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/support/tickets/{ticket_id}:
    get:
      tags:
      - Support
      - Support
      summary: Ticket thread
      operationId: get_ticket_v1_support_tickets__ticket_id__get
      parameters:
      - name: ticket_id
        in: path
        required: true
        schema:
          type: string
          title: Ticket Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupportTicketThreadResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/support/tickets/{ticket_id}/message:
    post:
      tags:
      - Support
      - Support
      summary: Add message to ticket
      operationId: add_message_v1_support_tickets__ticket_id__message_post
      parameters:
      - name: ticket_id
        in: path
        required: true
        schema:
          type: string
          title: Ticket Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddMessageRequest'
      responses:
        '200':
          desc

# --- truncated at 32 KB (407 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/hilt-so/refs/heads/main/openapi/hilt-so-openapi.yml