SIGIL · INTEGRATION DOCS← Back to site
[ REQUEST TYPES ]

Request types

Five types are supported. Every request requires the common fields described on the Payload format page, plus the type-specific fields below.

connect

Ask the user to pair their wallet with your app and optionally pre-grant permissions so future requests of those types don't need per-call approval.

FieldTypeNotes
type *string"connect"
permissionsstring[]Any subset of "transfer", "sc_call", "sign_message". Omit to connect without pre-granting.
REQUEST
{
  "type": "connect",
  "nonce": "a1b2c3d4e5f6g7h8",
  "dapp": { "name": "Acme", "origin": "https://acme.example" },
  "permissions": ["transfer", "sign_message"]
}
APPROVE CALLBACK
{
  "status": "connected",
  "type": "connect",
  "nonce": "a1b2c3d4e5f6g7h8",
  "identity": "<60-char Qubic identity>",
  "permissions": ["transfer", "sign_message"]
}

transfer

Send an amount of QU from the user's selected account to a recipient.

FieldTypeNotes
type *string"transfer"
to *stringExactly 60 uppercase A–Z letters — Qubic identity format with checksum
amount *number | stringPositive whole QU units
fromstringPrefer a specific account identity. User can override.
tick_offsetintegerTarget tick offset from current. Advanced use.
REQUEST
{
  "type": "transfer",
  "nonce": "f3a8b2c1d0e9...",
  "dapp": { "name": "Acme", "origin": "https://acme.example" },
  "to": "NQZBXKZP4MTLDUVWXYZK8MFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
  "amount": 1500000
  // optional: "from": "<identity>", "tick_offset": 5
}
APPROVE CALLBACK
{
  "status": "signed",
  "type": "transfer",
  "nonce": "f3a8b2c1d0e9...",
  "identity": "<signing identity>",
  "tx_hash": "<transaction hash>",
  "target_tick": 14872123
}

sc_call

Call a Qubic smart contract procedure. Sigil constructs the invocation transaction and signs it.

FieldTypeNotes
type *string"sc_call"
contract_index *integer0–63
input_type *integerNon-negative. The procedure number on the contract.
payloadstringBase64-encoded input bytes for the call (if the procedure takes input)
amountnumber | stringQU attached to the call, if any
fromstringPrefer a specific account identity
REQUEST
{
  "type": "sc_call",
  "nonce": "...",
  "dapp": { "name": "Acme", "origin": "https://acme.example" },
  "contract_index": 6,    // Qearn
  "input_type": 1,        // lock procedure
  "amount": 10000000
  // optional: "payload": "<base64 input bytes>", "from": "...", "tick_offset": 5
}

The approve callback has the same shape as transfer: { status: 'signed', identity, tx_hash, target_tick }.

sign_message

Ask the user to sign a message without sending a transaction. Useful for off-chain authentication, proving address ownership, or session tokens.

FieldTypeNotes
type *string"sign_message"
message *stringNon-empty, max 2 048 characters. Shown verbatim to the user.
fromstringPrefer a specific account identity
datastringExtra opaque string passed through to the callback. Not shown to the user.
REQUEST
{
  "type": "sign_message",
  "nonce": "...",
  "dapp": { "name": "Acme", "origin": "https://acme.example" },
  "message": "Sign in to Acme · 2026-05-30T10:00:00Z"
  // optional: "from": "<identity>", "data": "<extra string>"
  // max message length: 2 048 characters
}
APPROVE CALLBACK
{
  "status": "signed",
  "type": "sign_message",
  "nonce": "...",
  "identity": "<signing identity>",
  "signature": "<ECDSA signature, base64>",
  "public_key": "<public key, base64>"
}

verify_message

Hand Sigil a message + signature + public key; get back whether the signature is valid. No private key is involved — Sigil just runs the verification math.

FieldTypeNotes
type *string"verify_message"
message *stringThe original message that was signed
signature *stringThe signature to verify
public_key *stringThe public key to verify against
REQUEST
{
  "type": "verify_message",
  "nonce": "...",
  "dapp": { "name": "Acme", "origin": "https://acme.example" },
  "message": "<original message>",
  "signature": "<signature to verify>",
  "public_key": "<public key>"
}
CALLBACK
{
  "status": "verified",
  "type": "verify_message",
  "nonce": "...",
  "valid": true,
  "identity": "<derived identity, or empty string>"
}