openapi: 3.1.0
info:
  description: OpenAPI-first public contract for tenant-facing B2B2X API surfaces. Terminology and resource semantics are sourced from b2b2x-mono.
  summary: Tenant-facing public API for the B2B2X platform.
  title: B2B2X Public API
  version: 0.1.0
servers:
  - description: Sandbox
    url: https://b2b2x-sandbox.youhodler.com/api
  - description: Production
    url: https://b2b2x-sandbox.youhodler.com/api
tags:
  - name: Activation
    description: Enterprise onboarding and initial tenant topology.
  - name: Setup
    description: Identity, access, policy, and approval setup.
  - name: Distribution
    description: Client onboarding, funding setup, and integration readiness.
  - name: Live Operations
    description: Deposits, withdrawals, conversions, and ramp flows.
  - name: Settlement
    description: Balance visibility, review, and operational settlement support.
  - name: Suspension
    description: Controlled deactivation, revocation, and closure flows.
  - name: Auth
    description: Token issuance for public API access.
  - name: Approvals
    description: Approval cases and decision operations.
  - name: Balances
    description: Composite owner balance views for financial accounts.
  - name: Capabilities
    description: Capability listing and client capability overrides.
  - name: Clients
    description: Downstream client resources scoped under an enterprise.
  - name: Client Accounts
    description: Financial operating accounts attached to clients.
  - name: Conversions
    description: Asset-to-asset conversion previews and execution.
  - name: Deposits
    description: Inbound transactions crediting tenant accounts.
  - name: Deposit Instructions
    description: Resolved deposit-side wiring published to senders.
  - name: Enterprises
    description: Enterprise resources and lifecycle.
  - name: Events
    description: Tenant-visible platform event log and webhook replay operations.
  - name: Fee Previews
    description: Indicative, non-binding fee calculations.
  - name: Funding Endpoints
    description: Provisioned deposit-side endpoints for supported rails.
  - name: Identity Providers
    description: Federated identity provider registration and lookup.
  - name: Internal Transfers
    description: Money movement between tenant financial accounts.
  - name: Master Accounts
    description: Enterprise and platform-operator financial operating accounts.
  - name: Prices
    description: Indicative price discovery for asset pairs.
  - name: Roles
    description: Role definitions and access control assignment.
  - name: Role Assignments
    description: Role grants bound to principals and topology scope.
  - name: Service Accounts
    description: Non-human integration actors for backend API use.
  - name: Users
    description: Human actors operating within tenant boundaries.
  - name: Webhook Subscriptions
    description: Webhook subscription configuration and delivery recovery.
  - name: Withdrawals
    description: Outbound transactions debiting tenant accounts.
  - name: Withdrawal Destinations
    description: Persistent destinations referenced when initiating a withdrawal.
  - name: User Invitations
    description: E-mail invitation flows for onboarding new users into a tenant.
  - name: On-ramp Sessions
    description: Fiat-in or crypto-in flows that convert external funds into an account balance.
  - name: Me
    description: Current-caller introspection endpoints for capabilities and navigation.
  - name: Action Tokens
    description: Short-lived action tokens for delegated approval and governed follow-up actions.
  - name: Commercial Agreements
    description: Enterprise commercial agreement lifecycle and supersession.
  - name: Conversion Pairs
    description: Supported conversion pair discovery and lookup.
  - name: Crypto Networks
    description: Crypto network listing and eligibility surfaces.
  - name: Payment Methods
    description: Payment method registration and lifecycle management.
  - name: Payout Methods
    description: Payout method registration and lifecycle management.
  - name: Policies
    description: Policy rule creation, activation, and retirement.
  - name: Operations Activity Exports
    description: Asynchronous export of operations activity data.
  - name: User Action Audit Entries
    description: Search and inspect user action audit trail entries.
  - name: User Action Audit Exports
    description: Asynchronous export of user action audit data.
  - name: Audit
    description: Cross-cutting audit trail surfaces.
  - name: Reporting
    description: Cross-cutting reporting and analytics surfaces.
  - name: Off-ramp Sessions
    description: Crypto-out or fiat-out flows that convert an account balance into external funds.
paths:
  /action-tokens:
    $ref: ./paths/action-tokens.yaml
  /approvals:
    $ref: ./paths/approvals.yaml
  /approvals/{approval_id}:
    $ref: ./paths/approval-by-id.yaml
  /approvals/{approval_id}/approve:
    $ref: ./paths/approval-approve.yaml
  /approvals/{approval_id}/cancel:
    $ref: ./paths/approval-cancel.yaml
  /approvals/{approval_id}/eligible-approvers:
    $ref: ./paths/approval-eligible-approvers.yaml
  /approvals/{approval_id}/reject:
    $ref: ./paths/approval-reject.yaml
  /available-crypto-networks:
    $ref: ./paths/available-crypto-networks.yaml
  /available-payment-methods:
    $ref: ./paths/available-payment-methods.yaml
  /capabilities:
    $ref: ./paths/capabilities.yaml
  /client-accounts:
    $ref: ./paths/client-accounts.yaml
  /client-accounts/{client_account_id}:
    $ref: ./paths/client-account-by-id.yaml
  /client-accounts/{client_account_id}/balances:
    $ref: ./paths/client-account-balances.yaml
  /client-accounts/{client_account_id}/close:
    $ref: ./paths/client-account-close.yaml
  /client-accounts/{client_account_id}/reactivate:
    $ref: ./paths/client-account-reactivate.yaml
  /client-accounts/{client_account_id}/suspend:
    $ref: ./paths/client-account-suspend.yaml
  /clients:
    $ref: ./paths/clients.yaml
  /clients/{client_id}:
    $ref: ./paths/client-by-id.yaml
  /clients/{client_id}/capabilities/{capability_name}:
    $ref: ./paths/client-capability-by-id.yaml
  /clients/{client_id}/close:
    $ref: ./paths/client-close.yaml
  /clients/{client_id}/reactivate:
    $ref: ./paths/client-reactivate.yaml
  /clients/{client_id}/suspend:
    $ref: ./paths/client-suspend.yaml
  /conversion-pairs:
    $ref: ./paths/conversion-pairs.yaml
  /conversion-pairs/{conversion_pair_id}:
    $ref: ./paths/conversion-pair-by-id.yaml
  /conversions:
    $ref: ./paths/conversions.yaml
  /conversions/{conversion_id}:
    $ref: ./paths/conversion-by-id.yaml
  /conversions/{conversion_id}/cancel:
    $ref: ./paths/conversion-cancel.yaml
  /conversions/preview:
    $ref: ./paths/conversions-preview.yaml
  /crypto-networks:
    $ref: ./paths/crypto-networks.yaml
  /deposit-instructions:
    $ref: ./paths/deposit-instructions.yaml
  /deposit-instructions/{deposit_instruction_id}:
    $ref: ./paths/deposit-instruction-by-id.yaml
  /deposits:
    $ref: ./paths/deposits.yaml
  /deposits/{deposit_id}:
    $ref: ./paths/deposit-by-id.yaml
  /eligible-crypto-networks:
    $ref: ./paths/eligible-crypto-networks.yaml
  /eligible-payout-methods:
    $ref: ./paths/eligible-payout-methods.yaml
  /enterprise-commercial-agreements:
    $ref: ./paths/enterprise-commercial-agreements.yaml
  /enterprise-commercial-agreements/{agreement_id}:
    $ref: ./paths/enterprise-commercial-agreement-by-id.yaml
  /enterprise-commercial-agreements/{agreement_id}/supersede:
    $ref: ./paths/enterprise-commercial-agreement-supersede.yaml
  /enterprises:
    $ref: ./paths/enterprises.yaml
  /enterprises/{enterprise_id}:
    $ref: ./paths/enterprise-by-id.yaml
  /enterprises/{enterprise_id}/close:
    $ref: ./paths/enterprise-close.yaml
  /enterprises/{enterprise_id}/reactivate:
    $ref: ./paths/enterprise-reactivate.yaml
  /enterprises/{enterprise_id}/suspend:
    $ref: ./paths/enterprise-suspend.yaml
  /events:
    $ref: ./paths/events.yaml
  /events/{event_id}:
    $ref: ./paths/event-by-id.yaml
  /events/{event_id}/replay:
    $ref: ./paths/event-replay.yaml
  /events/types:
    $ref: ./paths/events-types.yaml
  /fee-previews:
    $ref: ./paths/fee-previews.yaml
  /funding-endpoints:
    $ref: ./paths/funding-endpoints.yaml
  /funding-endpoints/{funding_endpoint_id}:
    $ref: ./paths/funding-endpoint-by-id.yaml
  /identity-providers:
    $ref: ./paths/identity-providers.yaml
  /identity-providers/{identity_provider_id}:
    $ref: ./paths/identity-provider-by-id.yaml
  /internal-transfers:
    $ref: ./paths/internal-transfers.yaml
  /internal-transfers/{internal_transfer_id}:
    $ref: ./paths/internal-transfer-by-id.yaml
  /internal-transfers/{internal_transfer_id}/cancel:
    $ref: ./paths/internal-transfer-cancel.yaml
  /master-accounts:
    $ref: ./paths/master-accounts.yaml
  /master-accounts/{master_account_id}:
    $ref: ./paths/master-account-by-id.yaml
  /master-accounts/{master_account_id}/balances:
    $ref: ./paths/master-account-balances.yaml
  /me/capabilities:
    $ref: ./paths/me-capabilities.yaml
  /me/navigation:
    $ref: ./paths/me-navigation.yaml
  /oauth/token:
    $ref: ./paths/oauth-token.yaml
  /off-ramp-sessions:
    $ref: ./paths/off-ramp-sessions.yaml
  /off-ramp-sessions/{session_id}:
    $ref: ./paths/off-ramp-session-by-id.yaml
  /off-ramp-sessions/{session_id}/cancel:
    $ref: ./paths/off-ramp-session-cancel.yaml
  /on-ramp-sessions:
    $ref: ./paths/on-ramp-sessions.yaml
  /on-ramp-sessions/{session_id}:
    $ref: ./paths/on-ramp-session-by-id.yaml
  /on-ramp-sessions/{session_id}/cancel:
    $ref: ./paths/on-ramp-session-cancel.yaml
  /operations-activity-exports:
    $ref: ./paths/operations-activity-exports.yaml
  /operations-activity-exports/{export_id}:
    $ref: ./paths/operations-activity-export-by-id.yaml
  /operations-activity-exports/{export_id}/download:
    $ref: ./paths/operations-activity-export-download.yaml
  /payment-methods:
    $ref: ./paths/payment-methods.yaml
  /payment-methods/{payment_method_id}:
    $ref: ./paths/payment-method-by-id.yaml
  /payout-methods:
    $ref: ./paths/payout-methods.yaml
  /payout-methods/{payout_method_id}:
    $ref: ./paths/payout-method-by-id.yaml
  /policy-rules:
    $ref: ./paths/policy-rules.yaml
  /policy-rules/{rule_id}:
    $ref: ./paths/policy-rule-by-id.yaml
  /policy-rules/{rule_id}/activate:
    $ref: ./paths/policy-rule-activate.yaml
  /policy-rules/{rule_id}/retire:
    $ref: ./paths/policy-rule-retire.yaml
  /prices/indicative:
    $ref: ./paths/prices-indicative.yaml
  /role-assignments:
    $ref: ./paths/role-assignments.yaml
  /role-assignments/{role_assignment_id}:
    $ref: ./paths/role-assignment-by-id.yaml
  /role-assignments/{role_assignment_id}/revoke:
    $ref: ./paths/role-assignment-revoke.yaml
  /roles:
    $ref: ./paths/roles.yaml
  /roles/{role_id}:
    $ref: ./paths/role-by-id.yaml
  /roles/{role_id}/retire:
    $ref: ./paths/role-retire.yaml
  /service-accounts:
    $ref: ./paths/service-accounts.yaml
  /service-accounts/{service_account_id}:
    $ref: ./paths/service-account-by-id.yaml
  /service-accounts/{service_account_id}/revoke:
    $ref: ./paths/service-account-revoke.yaml
  /service-accounts/{service_account_id}/rotate-secret:
    $ref: ./paths/service-account-rotate-secret.yaml
  /service-accounts/provision:
    $ref: ./paths/service-accounts-provision.yaml
  /user-action-audit-entries/{entry_id}:
    $ref: ./paths/user-action-audit-entry-by-id.yaml
  /user-action-audit-entries/search:
    $ref: ./paths/user-action-audit-entries-search.yaml
  /user-action-audit-exports:
    $ref: ./paths/user-action-audit-exports.yaml
  /user-action-audit-exports/{export_id}:
    $ref: ./paths/user-action-audit-export-by-id.yaml
  /user-action-audit-exports/{export_id}/download:
    $ref: ./paths/user-action-audit-export-download.yaml
  /user-invitations:
    $ref: ./paths/user-invitations.yaml
  /user-invitations/{invitation_id}:
    $ref: ./paths/user-invitation-by-id.yaml
  /user-invitations/accept:
    $ref: ./paths/user-invitations-accept.yaml
  /user-invitations/cancel:
    $ref: ./paths/user-invitations-cancel.yaml
  /users:
    $ref: ./paths/users.yaml
  /users/{user_id}:
    $ref: ./paths/user-by-id.yaml
  /users/{user_id}/deactivate:
    $ref: ./paths/user-deactivate.yaml
  /users/{user_id}/reactivate:
    $ref: ./paths/user-reactivate.yaml
  /users/{user_id}/suspend:
    $ref: ./paths/user-suspend.yaml
  /webhook-subscriptions:
    $ref: ./paths/webhook-subscriptions.yaml
  /webhook-subscriptions/{subscription_id}:
    $ref: ./paths/webhook-subscription-by-id.yaml
  /webhook-subscriptions/{subscription_id}/delete:
    $ref: ./paths/webhook-subscription-delete.yaml
  /webhook-subscriptions/{subscription_id}/deliveries:
    $ref: ./paths/webhook-subscription-deliveries.yaml
  /webhook-subscriptions/{subscription_id}/deliveries/{delivery_id}:
    $ref: ./paths/webhook-subscription-delivery-by-id.yaml
  /webhook-subscriptions/{subscription_id}/deliveries/{delivery_id}/redeliver:
    $ref: ./paths/webhook-subscription-redeliver.yaml
  /webhook-subscriptions/{subscription_id}/disable:
    $ref: ./paths/webhook-subscription-disable.yaml
  /webhook-subscriptions/{subscription_id}/enable:
    $ref: ./paths/webhook-subscription-enable.yaml
  /webhook-subscriptions/{subscription_id}/test:
    $ref: ./paths/webhook-subscription-test.yaml
  /withdrawal-destinations:
    $ref: ./paths/withdrawal-destinations.yaml
  /withdrawal-destinations/{destination_id}:
    $ref: ./paths/withdrawal-destination-by-id.yaml
  /withdrawal-destinations/{destination_id}/disable:
    $ref: ./paths/withdrawal-destination-disable.yaml
  /withdrawal-destinations/{destination_id}/enable:
    $ref: ./paths/withdrawal-destination-enable.yaml
  /withdrawal-destinations/{destination_id}/retire:
    $ref: ./paths/withdrawal-destination-retire.yaml
  /withdrawals:
    $ref: ./paths/withdrawals.yaml
  /withdrawals/{withdrawal_id}:
    $ref: ./paths/withdrawal-by-id.yaml
  /withdrawals/{withdrawal_id}/cancel:
    $ref: ./paths/withdrawal-cancel.yaml
components:
  parameters:
    IdempotencyKey:
      $ref: ./components/parameters/IdempotencyKey.yaml
    IfMatch:
      $ref: ./components/parameters/IfMatch.yaml
    PageSize:
      $ref: ./components/parameters/PageSize.yaml
    PageToken:
      $ref: ./components/parameters/PageToken.yaml
    XActionToken:
      $ref: ./components/parameters/XActionToken.yaml
  responses:
    EdgeActionTokenRequired:
      $ref: ./components/responses/EdgeActionTokenRequired.yaml
    EdgeBadGateway:
      $ref: ./components/responses/EdgeBadGateway.yaml
    EdgeBadRequest:
      $ref: ./components/responses/EdgeBadRequest.yaml
    EdgeConflict:
      $ref: ./components/responses/EdgeConflict.yaml
    EdgeForbidden:
      $ref: ./components/responses/EdgeForbidden.yaml
    EdgeGone:
      $ref: ./components/responses/EdgeGone.yaml
    EdgeNotFound:
      $ref: ./components/responses/EdgeNotFound.yaml
    EdgePreconditionFailed:
      $ref: ./components/responses/EdgePreconditionFailed.yaml
    EdgeRateLimited:
      $ref: ./components/responses/EdgeRateLimited.yaml
    EdgeUnprocessable:
      $ref: ./components/responses/EdgeUnprocessable.yaml
    ForbiddenCapabilityScope:
      $ref: ./components/responses/ForbiddenCapabilityScope.yaml
    TemporarilyUnavailable:
      $ref: ./components/responses/TemporarilyUnavailable.yaml
    Unauthorized:
      $ref: ./components/responses/Unauthorized.yaml
  securitySchemes:
    BearerAuth:
      $ref: ./components/security-schemes/BearerAuth.yaml
    OAuth2ClientCredentials:
      $ref: ./components/security-schemes/OAuth2ClientCredentials.yaml
x-tagGroups:
  - name: Workflow
    tags:
      - Activation
      - Setup
      - Distribution
      - Live Operations
      - Settlement
      - Suspension
  - name: Reference
    tags:
      - Auth
      - Me
      - Enterprises
      - Master Accounts
      - Commercial Agreements
      - Clients
      - Client Accounts
      - Users
      - Service Accounts
      - Roles
      - Role Assignments
      - Identity Providers
      - Capabilities
      - Policies
      - Action Tokens
      - Approvals
      - Balances
      - Deposits
      - Deposit Instructions
      - Funding Endpoints
      - Payment Methods
      - Payout Methods
      - Crypto Networks
      - Conversion Pairs
      - Webhook Subscriptions
      - Events
      - Withdrawals
      - Withdrawal Destinations
      - Internal Transfers
      - Conversions
      - Fee Previews
      - Prices
      - User Invitations
      - On-ramp Sessions
      - Off-ramp Sessions
      - Operations Activity Exports
      - User Action Audit Entries
      - User Action Audit Exports
      - Audit
      - Reporting
