v33

latestOpenAPI 3.1.0Proprietaryraw.githubusercontent.com2026-05-28103497709.6 KB
Webhooks

Agent action pending approval webhook

Fired when an agent submits an action that requires platform approval before Grid will execute it. Use this to send a push notification to the customer so they can review and approve or reject the action in your app. This endpoint should be implemented by clients of the Grid API.

Authentication

The webhook includes a signature in the X-Grid-Signature header that allows you to verify that the webhook was sent by Grid. To verify the signature:

  1. Get the Grid public key provided to you during integration
  2. Decode the base64 signature from the header
  3. Create a SHA-256 hash of the request body
  4. Verify the signature using the public key and the hash

If the signature verification succeeds, the webhook is authentic. If not, it should be rejected.

The payload contains the full AgentAction — including the embedded quote or transfer details — so you can render the approval UI without a second API call. Approve or reject via POST /agents/{agentId}/actions/{actionId}/approve or POST /agents/{agentId}/actions/{actionId}/reject.

postWebhookagent-action

Payload

idstring required

Unique identifier for this webhook delivery (can be used for idempotency)

type'AGENT_ACTION.PENDING_APPROVAL' required

Type of webhook event in OBJECT.EVENT dot-notation. The part before the dot identifies the resource, the part after identifies the event. This lets consumers route purely on type without inspecting data.status.

timestampstring date-time required

ISO 8601 timestamp of when the webhook was sent

Example payload

{
  "id": "Webhook:019542f5-b3e7-1d02-0000-000000000007",
  "timestamp": "2025-08-15T14:32:00Z",
  "data": {
    "id": "AgentAction:019542f5-b3e7-1d02-0000-000000000099",
    "agentId": "Agent:019542f5-b3e7-1d02-0000-000000000042",
    "customerId": "Customer:019542f5-b3e7-1d02-0000-000000000010",
    "platformCustomerId": "user-a1b2c3",
    "quote": {
      "id": "Quote:019542f5-b3e7-1d02-0000-000000000006",
      "status": "PENDING",
      "createdAt": "2025-10-03T12:00:00Z",
      "expiresAt": "2025-10-03T12:05:00Z",
      "source": {
        "accountId": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965",
        "customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001"
      },
      "destination": {
        "accountId": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",
        "paymentRail": "ACH"
      },
      "sendingCurrency": {
        "code": "USD",
        "name": "United States Dollar",
        "symbol": "$",
        "decimals": 2
      },
      "receivingCurrency": {
        "code": "USD",
        "name": "United States Dollar",
        "symbol": "$",
        "decimals": 2
      },
      "totalSendingAmount": 123010,
      "totalReceivingAmount": 1000,
      "feesIncluded": 10,
      "paymentInstructions": [
        {
          "accountOrWalletInfo": {
            "accountType": "USD_ACCOUNT",
            "paymentRails": [
              "ACH",
              "WIRE"
            ],
            "accountNumber": "1234567890",
            "routingNumber": "021000021",
            "bankName": "Chase Bank",
            "reference": "UMA-Q12345-REF"
          },
          "instructionsNotes": "Include reference UMA-Q12345-REF in memo"
        },
        {
          "accountOrWalletInfo": {
            "accountType": "SPARK_WALLET",
            "assetType": "BTC",
            "address": "spark1pgssyuuuhnrrdjswal5c3s3rafw9w3y5dd4cjy3duxlf7hjzkp0rqx6dj6mrhu",
            "invoice": "lnbc15u1p3xnhl2pp5jptserfk3zk4qy42tlucycrfwxhydvlemu9pqr93tuzlv9cc7g3sdqsvfhkcap3xyhx7un8cqzpgxqzjcsp5f8c52y2stc300gl6s4xswtjpc37hrnnr3c9wvtgjfuvqmpm35evq9qyyssqy4lgd8tj637qcjp05rdpxxykjenthxftej7a2zzmwrmrl70fyj9hvj0rewhzj7jfyuwkwcg9g2jpwtk3wkjtwnkdks84hsnu8xps5vsq4gj5hs"
          }
        }
      ],
      "transactionId": "Transaction:019542f5-b3e7-1d02-0000-000000000005",
      "counterpartyInformation": {
        "FULL_NAME": "John Sender",
        "BIRTH_DATE": "1985-06-15",
        "NATIONALITY": "DE"
      },
      "rateDetails": {
        "counterpartyMultiplier": 1.08,
        "counterpartyFixedFee": 10,
        "gridApiMultiplier": 0.925,
        "gridApiFixedFee": 10,
        "gridApiVariableFeeRate": 0.003,
        "gridApiVariableFeeAmount": 30
      }
    },
    "transferDetails": {
      "amount": 50000,
      "currency": "USD",
      "sourceAccountId": "InternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",
      "destinationAccountId": "ExternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"
    },
    "transaction": {
      "id": "Transaction:019542f5-b3e7-1d02-0000-000000000004",
      "destination": {
        "accountId": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123"
      },
      "customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001",
      "platformCustomerId": "18d3e5f7b4a9c2",
      "settledAt": "2025-08-15T14:30:00Z",
      "createdAt": "2025-08-15T14:25:18Z",
      "updatedAt": "2025-08-15T14:30:00Z",
      "agentId": "Agent:019542f5-b3e7-1d02-0000-000000000042",
      "description": "Payment for invoice #1234",
      "counterpartyInformation": {
        "FULL_NAME": "John Sender",
        "BIRTH_DATE": "1985-06-15",
        "NATIONALITY": "DE"
      },
      "source": {
        "accountId": "InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965"
      },
      "receivedAmount": {
        "amount": 12550,
        "currency": {
          "code": "USD",
          "name": "United States Dollar",
          "symbol": "$",
          "decimals": 2
        }
      },
      "fees": 10,
      "reconciliationInstructions": {
        "reference": "UMA-Q12345-REF",
        "transactionHash": "0x9f2c6b6f4b6c8f2a8d9e0b1c2d3e4f5061728394a5b6c7d8e9f00112233445566"
      },
      "rateDetails": {
        "gridApiMultiplier": 0.925,
        "gridApiFixedFee": 10,
        "gridApiVariableFeeRate": 0.003,
        "gridApiVariableFeeAmount": 30
      }
    },
    "rejectionReason": "Transaction amount exceeds customer's current risk limit.",
    "createdAt": "2025-10-03T15:00:00Z",
    "updatedAt": "2025-10-03T15:02:00Z"
  }
}

Response

Webhook received and acknowledged.