> ## Documentation Index
> Fetch the complete documentation index at: https://docs.groundtech.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhook payload examples

> Example JSON bodies for Portfolio Wallet webhook events.

Below are example JSON bodies for each event type. Headers like `Ground-Event-Id`, `Ground-Event-Type`, and `Ground-Signature` are sent separately.

## `portfolio_wallet.status_changed`

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "event": "portfolio_wallet.status_changed",
  "organizationId": "43c78f4f-44a7-45ff-a524-8f010f7a4c72",
  "walletId": "9d1a1c83-3a1c-4c14-9c5a-0c9a57a4a7db",
  "previousStatus": "idle",
  "status": "rebalance_active",
  "occurredAt": "2026-02-05T10:28:00.000Z"
}
```

## `portfolio_wallet.deposit.status_changed`

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "event": "portfolio_wallet.deposit.status_changed",
  "observedAt": "2026-02-05T09:45:00.000Z",
  "deposit": {
    "id": "2a3ad0af-11b3-41d5-96c5-2b9d8799f1e2",
    "amount": "50000.000000",
    "token": "usdc",
    "chain": "ethereum",
    "fromAddress": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    "txHash": "0xabc123...",
    "status": "completed",
    "createdAt": "2026-02-05T09:40:00.000Z",
    "completedAt": "2026-02-05T09:45:00.000Z"
  }
}
```

## `portfolio_wallet.withdrawal.status_changed`

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "event": "portfolio_wallet.withdrawal.status_changed",
  "observedAt": "2026-02-05T11:05:00.000Z",
  "withdrawal": {
    "id": "11b17950-1f5c-4d36-8f0d-0f3d1d0c6a45",
    "amountRequestedUsd": "65000.000000",
    "amountPaidUsd": null,
    "feeUsd": "0.000000",
    "destinationChain": "ethereum",
    "destinationAddress": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    "destinationToken": "usdc",
    "status": "processing",
    "legsCompleted": 0,
    "legsTotal": 1,
    "payoutLegs": [
      {
        "status": "pending_customer_approval",
        "amountUsd": "65000.000000",
        "from": { "kind": "yield_source", "id": "morpho-gauntlet-usdc", "label": "Morpho Gauntlet USDC Prime" },
        "to": { "kind": "external_payout", "id": "external_payout:ethereum:usdc", "label": "External payout (Ethereum)" },
        "startedAt": "2026-02-05T11:01:00.000Z",
        "completedAt": null,
        "stepsCompleted": 1,
        "stepsTotal": 2,
        "steps": [
          {
            "name": "Redeeming from Morpho Gauntlet USDC Prime",
            "chain": "ethereum",
            "state": "completed",
            "txKind": "yield_source_redeem",
            "stepKind": "yield_source_redeem",
            "startedAt": "2026-02-05T11:01:00.000Z",
            "completedAt": "2026-02-05T11:02:00.000Z",
            "cancelledAt": null,
            "stepOrdinal": 0,
            "protocolType": "morpho",
            "sequenceRole": "yield_redeem"
          },
          {
            "name": "Sending payout",
            "chain": "ethereum",
            "state": "pending_customer_approval",
            "txKind": "external_payout_transfer",
            "stepKind": "external_payout_transfer",
            "startedAt": "2026-02-05T11:03:00.000Z",
            "completedAt": null,
            "cancelledAt": null,
            "stepOrdinal": 1,
            "protocolType": "external_payout",
            "sequenceRole": "external_payout_transfer"
          }
        ]
      }
    ],
    "failureReason": null,
    "createdAt": "2026-02-05T11:00:00.000Z",
    "completedAt": null
  }
}
```

## `portfolio_wallet.withdrawal.payout.status_changed`

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "event": "portfolio_wallet.withdrawal.payout.status_changed",
  "observedAt": "2026-02-05T12:40:00.000Z",
  "payout": {
    "id": "4f70f27a-760c-45f1-8ac9-01878d8d2d6c",
    "status": "completed",
    "turnkeyActivityId": null,
    "approvalRequestedAt": null,
    "approvalValidBefore": null,
    "amountUsd": "35000.000000",
    "feeUsd": "0.000000",
    "txHash": "0xabc123...",
    "failureReason": null,
    "steps": [
      {
        "name": "Redeeming from Syrup USDC",
        "stepKind": "syrup_request_redeem",
        "sequenceRole": "yield_redeem",
        "protocolType": "syrup",
        "stepOrdinal": 0,
        "chain": "ethereum",
        "txKind": "yield_source_redeem",
        "state": "completed",
        "startedAt": "2026-02-05T12:35:00.000Z",
        "completedAt": "2026-02-05T12:36:00.000Z",
        "cancelledAt": null
      },
      {
        "name": "Sending payout",
        "stepKind": "external_payout_transfer",
        "sequenceRole": "external_payout_transfer",
        "protocolType": "external_payout",
        "stepOrdinal": 1,
        "chain": "ethereum",
        "txKind": "external_payout_transfer",
        "state": "completed",
        "startedAt": "2026-02-05T12:38:00.000Z",
        "completedAt": "2026-02-05T12:40:00.000Z",
        "cancelledAt": null
      }
    ],
    "createdAt": "2026-02-05T12:34:00.000Z",
    "completedAt": "2026-02-05T12:40:00.000Z"
  }
}
```

## `portfolio_wallet.strategy.status_changed`

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "event": "portfolio_wallet.strategy.status_changed",
  "observedAt": "2026-02-05T09:30:00.000Z",
  "strategy": {
    "walletId": "9d1a1c83-3a1c-4c14-9c5a-0c9a57a4a7db",
    "requestId": "6d74dc1c-f1b5-4f2c-8f33-9f7b9e27cd4b",
    "status": "completed",
    "allocations": [
      { "yieldSourceId": "syrup-usdc", "pct": 40 },
      { "yieldSourceId": "morpho-gauntlet-usdc", "pct": 30 },
      { "yieldSourceId": "morpho-steakhouse-usdc", "pct": 30 }
    ],
    "createdAt": "2026-02-05T09:29:00.000Z"
  }
}
```

## `portfolio_wallet.rebalance.status_changed`

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "event": "portfolio_wallet.rebalance.status_changed",
  "observedAt": "2026-02-05T10:30:00.000Z",
  "rebalance": {
    "id": "b6c7d8e9-1234-4abc-8def-0123456789ab",
    "status": "processing",
    "reason": "deposit_deployment",
    "amountUsd": "50000.000000",
    "legsCompleted": 0,
    "legsTotal": 2,
    "rebalanceLegs": [
      {
        "status": "processing",
        "amountUsd": "25000.000000",
        "from": { "kind": "cash", "id": "cash:ethereum:usdc", "label": "Cash (Ethereum)" },
        "to": { "kind": "yield_source", "id": "morpho-gauntlet-usdc", "label": "Morpho Gauntlet USDC Prime" },
        "startedAt": "2026-02-05T10:29:00.000Z",
        "completedAt": null,
        "stepsCompleted": 0,
        "stepsTotal": 1,
        "steps": [
          {
            "name": "Depositing into Morpho Gauntlet USDC Prime",
            "chain": "ethereum",
            "state": "processing",
            "txKind": "yield_source_deposit",
            "stepKind": "yield_source_deposit",
            "startedAt": "2026-02-05T10:29:00.000Z",
            "completedAt": null,
            "cancelledAt": null,
            "stepOrdinal": 0,
            "protocolType": "morpho",
            "sequenceRole": "yield_deposit"
          }
        ]
      }
    ],
    "failureReason": null,
    "createdAt": "2026-02-05T10:28:00.000Z",
    "startedAt": "2026-02-05T10:29:00.000Z",
    "completedAt": null
  }
}
```

Rebalance and withdrawal step objects expose workflow execution metadata. Broadcast transaction hashes are exposed on payout rows when available, not on every workflow step.

## `portfolio_wallet.risk.alert.triggered`

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "event": "portfolio_wallet.risk.alert.triggered",
  "organizationId": "43c78f4f-44a7-45ff-a524-8f010f7a4c72",
  "portfolioWalletId": "9d1a1c83-3a1c-4c14-9c5a-0c9a57a4a7db",
  "riskAlertId": "8f0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "riskRuleId": "1f0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "yieldSourceId": "morpho-gauntlet-usdc",
  "metric": "apy_bps",
  "ruleKind": "threshold",
  "comparator": "lt",
  "thresholdValue": 300,
  "observedValue": 275,
  "baselineValue": null,
  "observedChangeBps": null,
  "windowSeconds": null,
  "status": "triggered",
  "metricsObservationId": "5d0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "triggeredAt": "2026-02-05T10:30:00.000Z",
  "explanation": {
    "message": "APY fell below threshold"
  }
}
```

## `portfolio_wallet.risk.alert.resolved`

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "event": "portfolio_wallet.risk.alert.resolved",
  "organizationId": "43c78f4f-44a7-45ff-a524-8f010f7a4c72",
  "portfolioWalletId": "9d1a1c83-3a1c-4c14-9c5a-0c9a57a4a7db",
  "riskAlertId": "8f0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "riskRuleId": "1f0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "yieldSourceId": "morpho-gauntlet-usdc",
  "metric": "apy_bps",
  "ruleKind": "threshold",
  "comparator": "lt",
  "thresholdValue": 300,
  "observedValue": 325,
  "baselineValue": null,
  "observedChangeBps": null,
  "windowSeconds": null,
  "status": "resolved",
  "metricsObservationId": "5d0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "triggeredAt": "2026-02-05T10:30:00.000Z",
  "resolvedAt": "2026-02-05T11:30:00.000Z",
  "resolutionSource": "metric_recovered",
  "resolutionNote": "APY recovered above threshold",
  "explanation": {}
}
```

## `portfolio_wallet.risk.action.status_changed`

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "event": "portfolio_wallet.risk.action.status_changed",
  "organizationId": "43c78f4f-44a7-45ff-a524-8f010f7a4c72",
  "portfolioWalletId": "9d1a1c83-3a1c-4c14-9c5a-0c9a57a4a7db",
  "riskActionId": "6f0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "riskAlertId": "8f0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "riskRuleId": "1f0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "yieldSourceId": "morpho-gauntlet-usdc",
  "outcome": "exit_position",
  "approvalMode": "automatic",
  "previousStatus": "pending_auto_execution",
  "status": "executing",
  "attemptCount": 1,
  "executionVersion": 1,
  "rebalanceId": "7f0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "changedAt": "2026-02-05T10:31:00.000Z",
  "executionError": null,
  "explanation": {}
}
```

## `portfolio_wallet.risk.unwind.completed`

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "event": "portfolio_wallet.risk.unwind.completed",
  "organizationId": "43c78f4f-44a7-45ff-a524-8f010f7a4c72",
  "portfolioWalletId": "9d1a1c83-3a1c-4c14-9c5a-0c9a57a4a7db",
  "riskActionId": "6f0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "riskAlertId": "8f0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "riskRuleId": "1f0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "rebalanceId": "7f0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "yieldSourceId": "morpho-gauntlet-usdc",
  "yieldSourceName": "Morpho Gauntlet USDC Prime",
  "completedRebalanceLegId": "2b0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "completedSourceAccountId": "morpho-gauntlet-usdc",
  "cashDestinationAccountId": "cash:ethereum:usdc",
  "cashDestinationChain": "ethereum",
  "cashDestinationToken": "usdc",
  "completedAmountNativeUnits": "25000000000",
  "completedAt": "2026-02-05T10:45:00.000Z",
  "eventId": "3c0d1a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
  "occurredAt": "2026-02-05T10:45:00.000Z",
  "explanation": {
    "message": "Exited Morpho Gauntlet USDC Prime to cash after APY alert"
  }
}
```
