Upvest · AsyncAPI Specification

Upvest Investment Events

Version 1.0.0

The Upvest Investment API uses an asynchronous, event-driven architecture where events represent state changes within the system. Webhook subscriptions allow your application to receive real-time notifications about user onboarding, order lifecycle changes, portfolio rebalancing, payment processing, and other investment operations. Events are delivered via HTTPS POST requests with at-least-once delivery semantics, meaning your handler must be idempotent.

View Spec View on GitHub Banking InfrastructureFintechInvestmentSecuritiesFractional InvestingCustodyWealth ManagementAsyncAPIEventsWebhooks

Channels

/webhook
publish receiveWebhookEvents
Receive webhook event notifications
The webhook delivery channel. Upvest sends HTTPS POST requests to your registered endpoint containing one or more events. Events within a single request are ordered by created_at in ascending order. There are no ordering guarantees across separate requests.

Messages

✉
UserEvent
User Event
Events related to user lifecycle changes including creation, updates, and status transitions.
✉
UserCheckEvent
User Check Event
Events related to user compliance and verification check outcomes.
✉
AccountEvent
Account Event
Events related to investment account lifecycle changes including opening, closing, and status updates.
✉
AccountGroupEvent
Account Group Event
Events related to account group changes.
✉
OrderEvent
Order Event
Events related to the order lifecycle including placement, processing, filling, and rejection. Every order status change emits a webhook event.
✉
OrderCancellationEvent
Order Cancellation Event
Events related to order cancellation requests and their outcomes.
✉
ExecutionEvent
Execution Event
Events related to order execution fills. Every execution associated with an order has its own set of statuses, and every status change emits a webhook event.
✉
PositionEvent
Position Event
Events related to changes in holdings and positions within accounts.
✉
CashBalanceEvent
Cash Balance Event
Events related to changes in account cash balances.
✉
PortfolioEvent
Portfolio Event
Events related to portfolio creation, updates, and allocation changes.
✉
RebalancingEvent
Rebalancing Event
Events related to portfolio rebalancing execution and completion.
✉
SavingsPlanEvent
Savings Plan Event
Events related to savings plan creation, execution, and status changes.
✉
DirectDebitEvent
Direct Debit Event
Events related to direct debit funding operations and their status transitions.
✉
WithdrawalEvent
Withdrawal Event
Events related to cash withdrawal processing and completion.
✉
MandateEvent
Mandate Event
Events related to direct debit mandate creation and revocation.
✉
SecuritiesTransferEvent
Securities Transfer Event
Events related to inbound and outbound securities transfer operations.
✉
AccountTransferEvent
Account Transfer Event
Events related to account transfer operations between entities.
✉
CorporateActionEvent
Corporate Action Event
Events related to corporate actions on held securities such as dividends, splits, and mergers.
✉
LiquidationEvent
Liquidation Event
Events related to account liquidation operations.
✉
ReportEvent
Report Event
Events related to report generation completion.
✉
FeeEvent
Fee Event
Events related to fee charges on accounts.

Servers

https
production {webhookUrl}
Your registered webhook endpoint. Must use HTTPS with TLS 1.2 or higher. The host must be a DNS name, not an IP address.

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Upvest Investment Events
  description: >-
    The Upvest Investment API uses an asynchronous, event-driven architecture
    where events represent state changes within the system. Webhook
    subscriptions allow your application to receive real-time notifications
    about user onboarding, order lifecycle changes, portfolio rebalancing,
    payment processing, and other investment operations. Events are delivered
    via HTTPS POST requests with at-least-once delivery semantics, meaning
    your handler must be idempotent.
  version: '1.0.0'
  contact:
    name: Upvest Support
    url: https://upvest.co/
  externalDocs:
    description: Upvest Webhooks Documentation
    url: https://docs.upvest.co/documentation/concepts/api_concepts/webhooks
servers:
  production:
    url: '{webhookUrl}'
    protocol: https
    description: >-
      Your registered webhook endpoint. Must use HTTPS with TLS 1.2 or
      higher. The host must be a DNS name, not an IP address.
    variables:
      webhookUrl:
        description: >-
          The HTTPS URL registered as your webhook endpoint.
    security:
      - httpSignature: []
channels:
  /webhook:
    description: >-
      The webhook delivery channel. Upvest sends HTTPS POST requests to your
      registered endpoint containing one or more events. Events within a
      single request are ordered by created_at in ascending order. There are
      no ordering guarantees across separate requests.
    publish:
      operationId: receiveWebhookEvents
      summary: Receive webhook event notifications
      description: >-
        Receive one or more event notifications from the Upvest Investment
        API. Each request contains a payload array with event objects. Your
        handler should return a 2xx status code to acknowledge receipt.
        Events may be delivered more than once, so implement idempotent
        processing using the event id field.
      message:
        oneOf:
          - $ref: '#/components/messages/UserEvent'
          - $ref: '#/components/messages/UserCheckEvent'
          - $ref: '#/components/messages/AccountEvent'
          - $ref: '#/components/messages/AccountGroupEvent'
          - $ref: '#/components/messages/OrderEvent'
          - $ref: '#/components/messages/OrderCancellationEvent'
          - $ref: '#/components/messages/ExecutionEvent'
          - $ref: '#/components/messages/PositionEvent'
          - $ref: '#/components/messages/CashBalanceEvent'
          - $ref: '#/components/messages/PortfolioEvent'
          - $ref: '#/components/messages/RebalancingEvent'
          - $ref: '#/components/messages/SavingsPlanEvent'
          - $ref: '#/components/messages/DirectDebitEvent'
          - $ref: '#/components/messages/WithdrawalEvent'
          - $ref: '#/components/messages/MandateEvent'
          - $ref: '#/components/messages/SecuritiesTransferEvent'
          - $ref: '#/components/messages/AccountTransferEvent'
          - $ref: '#/components/messages/CorporateActionEvent'
          - $ref: '#/components/messages/LiquidationEvent'
          - $ref: '#/components/messages/ReportEvent'
          - $ref: '#/components/messages/FeeEvent'
components:
  securitySchemes:
    httpSignature:
      type: httpApiKey
      name: Signature
      in: header
      description: >-
        Upvest signs webhook requests using HTTP message signatures. Your
        handler should verify the signature to ensure the request originated
        from Upvest and was not tampered with in transit.
  messages:
    UserEvent:
      name: UserEvent
      title: User Event
      summary: >-
        Events related to user lifecycle changes including creation, updates,
        and status transitions.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
      examples:
        - name: UserCreated
          payload:
            payload:
              - id: fbecea50-2f35-4969-96af-342271da9eca
                created_at: '2024-01-15T14:10:00.000Z'
                event_type: USER.CREATED
                object:
                  id: 83d83ec2-d2ca-49ff-bbea-b92b5c3be202
                  type: USER
                webhook_id: 091915d8-7b4b-4d25-8208-f8e2d4b30070
    UserCheckEvent:
      name: UserCheckEvent
      title: User Check Event
      summary: >-
        Events related to user compliance and verification check outcomes.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    AccountEvent:
      name: AccountEvent
      title: Account Event
      summary: >-
        Events related to investment account lifecycle changes including
        opening, closing, and status updates.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    AccountGroupEvent:
      name: AccountGroupEvent
      title: Account Group Event
      summary: >-
        Events related to account group changes.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    OrderEvent:
      name: OrderEvent
      title: Order Event
      summary: >-
        Events related to the order lifecycle including placement, processing,
        filling, and rejection. Every order status change emits a webhook
        event.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    OrderCancellationEvent:
      name: OrderCancellationEvent
      title: Order Cancellation Event
      summary: >-
        Events related to order cancellation requests and their outcomes.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    ExecutionEvent:
      name: ExecutionEvent
      title: Execution Event
      summary: >-
        Events related to order execution fills. Every execution associated
        with an order has its own set of statuses, and every status change
        emits a webhook event.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    PositionEvent:
      name: PositionEvent
      title: Position Event
      summary: >-
        Events related to changes in holdings and positions within accounts.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    CashBalanceEvent:
      name: CashBalanceEvent
      title: Cash Balance Event
      summary: >-
        Events related to changes in account cash balances.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    PortfolioEvent:
      name: PortfolioEvent
      title: Portfolio Event
      summary: >-
        Events related to portfolio creation, updates, and allocation changes.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    RebalancingEvent:
      name: RebalancingEvent
      title: Rebalancing Event
      summary: >-
        Events related to portfolio rebalancing execution and completion.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    SavingsPlanEvent:
      name: SavingsPlanEvent
      title: Savings Plan Event
      summary: >-
        Events related to savings plan creation, execution, and status changes.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    DirectDebitEvent:
      name: DirectDebitEvent
      title: Direct Debit Event
      summary: >-
        Events related to direct debit funding operations and their status
        transitions.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    WithdrawalEvent:
      name: WithdrawalEvent
      title: Withdrawal Event
      summary: >-
        Events related to cash withdrawal processing and completion.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    MandateEvent:
      name: MandateEvent
      title: Mandate Event
      summary: >-
        Events related to direct debit mandate creation and revocation.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    SecuritiesTransferEvent:
      name: SecuritiesTransferEvent
      title: Securities Transfer Event
      summary: >-
        Events related to inbound and outbound securities transfer operations.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    AccountTransferEvent:
      name: AccountTransferEvent
      title: Account Transfer Event
      summary: >-
        Events related to account transfer operations between entities.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    CorporateActionEvent:
      name: CorporateActionEvent
      title: Corporate Action Event
      summary: >-
        Events related to corporate actions on held securities such as
        dividends, splits, and mergers.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    LiquidationEvent:
      name: LiquidationEvent
      title: Liquidation Event
      summary: >-
        Events related to account liquidation operations.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    ReportEvent:
      name: ReportEvent
      title: Report Event
      summary: >-
        Events related to report generation completion.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
    FeeEvent:
      name: FeeEvent
      title: Fee Event
      summary: >-
        Events related to fee charges on accounts.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/WebhookPayload'
  schemas:
    WebhookPayload:
      type: object
      description: >-
        The top-level webhook request payload containing a list of event
        objects. Events within a request are ordered by created_at in
        ascending order.
      required:
        - payload
      properties:
        payload:
          type: array
          description: >-
            A list of event objects, each representing a state change.
          items:
            $ref: '#/components/schemas/WebhookEvent'
    WebhookEvent:
      type: object
      description: >-
        An individual event record representing a state change within the
        Upvest Investment API.
      required:
        - id
        - created_at
        - event_type
        - object
        - webhook_id
      properties:
        id:
          type: string
          format: uuid
          description: >-
            The unique identifier of the event. Use this for idempotent
            processing.
        created_at:
          type: string
          format: date-time
          description: >-
            The timestamp when the event occurred.
        event_type:
          type: string
          description: >-
            The event type in CATEGORY.ACTION format. The category corresponds
            to the resource type, and the action describes what changed.
          examples:
            - USER.CREATED
            - USER.UPDATED
            - USER_CHECK.PASSED
            - USER_CHECK.FAILED
            - ACCOUNT.OPENED
            - ACCOUNT.CLOSED
            - ORDER.NEW
            - ORDER.PROCESSING
            - ORDER.FILLED
            - ORDER.CANCELLED
            - ORDER.REJECTED
            - ORDER_CANCELLATION.CONFIRMED
            - ORDER_CANCELLATION.REJECTED
            - EXECUTION.NEW
            - EXECUTION.SETTLED
            - EXECUTION.CANCELLED
            - POSITION.UPDATED
            - CASH_BALANCE.UPDATED
            - PORTFOLIO.CREATED
            - PORTFOLIO.UPDATED
            - REBALANCING.COMPLETED
            - REBALANCING.FAILED
            - SAVINGS_PLAN.EXECUTED
            - DIRECT_DEBIT.COMPLETED
            - DIRECT_DEBIT.FAILED
            - WITHDRAWAL.COMPLETED
            - WITHDRAWAL.FAILED
            - SECURITIES_TRANSFER.COMPLETED
            - CORPORATE_ACTION.PROCESSED
            - LIQUIDATION.COMPLETED
            - REPORT.READY
            - FEE.CHARGED
        object:
          $ref: '#/components/schemas/EventObject'
        webhook_id:
          type: string
          format: uuid
          description: >-
            The identifier of the webhook subscription that triggered this
            delivery.
    EventObject:
      type: object
      description: >-
        A reference to the resource that changed.
      required:
        - id
        - type
      properties:
        id:
          type: string
          format: uuid
          description: >-
            The unique identifier of the affected resource.
        type:
          type: string
          description: >-
            The resource type.
          enum:
            - USER
            - USER_CHECK
            - ACCOUNT
            - ACCOUNT_GROUP
            - ORDER
            - ORDER_CANCELLATION
            - EXECUTION
            - POSITION
            - CASH_BALANCE
            - PORTFOLIO
            - REBALANCING
            - SAVINGS_PLAN
            - DIRECT_DEBIT
            - WITHDRAWAL
            - MANDATE
            - SECURITIES_TRANSFER
            - ACCOUNT_TRANSFER
            - CORPORATE_ACTION
            - LIQUIDATION
            - REPORT
            - FEE

Work with this as data

Every AsyncAPI spec 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 asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • 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 AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/upvest-investment-events-asyncapi"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?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.