Skip to main content

Documentation Index

Fetch the complete documentation index at: https://sage-f6b5014e.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

POST /queue

Stores a proposed transfer, runs analyzeRisk() inline against the vault’s patterns and policy, and routes it by verdict:
  • APPROVE (< 40) — server self-calls /execute, broadcasts, and notifies Telegram; returns autoApproved: true and the signature
  • REVIEW (40–70) — marks in_review, sends a Telegram message with ✅ / ❌ / 🔎 buttons
  • BLOCK (≥ 70) — marks in_review, sends an urgent Telegram alert
If screeningDisabled is set, the proposal is stored and returned without scoring.

Request

{
  "multisigAddress": "…",
  "vaultAddress": "…",
  "proposalIndex": 7,
  "to": "…recipient address",
  "amount": "0.5",
  "amountUSD": "82.10",
  "tokenSymbol": "SOL",
  "tokenAddress": "so111…",
  "tokenIconUrl": "https://…",
  "proposedBy": "…",
  "screeningDisabled": false
}
FieldTypeRequiredDescription
multisigAddressstringYesMultisig config account
vaultAddressstringYesVault (treasury) address
tostringYesRecipient address
amountstringYesHuman-readable amount
proposalIndexnumberNoOn-chain transactionIndex (needed for execution)
amountUSDstringNoUSD value, used for scoring when present
tokenSymbolstringNoToken symbol for display
tokenAddressstringNoToken mint (omit / native mint for SOL)
tokenIconUrlstringNoToken icon URL for display
proposedBystringNoProposer address
screeningDisabledbooleanNoSkip risk analysis and queue only

Response

{
  "success": true,
  "id": "uuid-of-proposal",
  "risk": {
    "riskScore": 15,
    "verdict": "APPROVE",
    "reasons": ["Recipient is trusted", "…"],
    "triggeredRules": []
  },
  "autoApproved": true,
  "signature": "…"
}
FieldDescription
idThe stored proposal ID
risk.riskScoreRisk score (0–100)
risk.verdictAPPROVE, REVIEW, or BLOCK
risk.reasonsHuman-readable scoring reasons
risk.triggeredRulesIDs of any custom rules that fired
autoApprovedPresent and true on APPROVE
signatureOn-chain signature (present only if auto-approved and executed)
If risk analysis fails (e.g. patterns can’t be loaded), the proposal is still stored and the response includes riskError instead of risk.