Managed Signing
Create Signing Request

Knit API Documentation

Create Signing Request

Endpoint

POST

{{baseUrl}}/api/v1/managed-signing/requests

This endpoint creates a new signing request. Supports EVM transactions, EIP-712 typed data signing, and EIP-191 message signing.

Signing Request Types
TypeDescription
evm_txEVM transaction signing (e.g., ERC20 approvals, raw transactions)
eip712EIP-712 typed data signing (structured data with domain separator)
eip191EIP-191 message signing (personal sign messages)
Supported Networks

Production

  • ETHEREUM_MAINNET
  • MATIC_MAINNET
  • BSC_MAINNET
  • BASE_MAINNET

Testnet (Sandbox/Dev only)

  • MATIC_AMOY - Polygon Amoy testnet
Headers
  • X-API-KEY: Your API key for authentication.
  • Accept: Set to application/json to receive responses in JSON format.
  • Content-Type: Set to application/json.
Request Body
FieldTypeRequiredDescription
walletIdstringYesLocal wallet ID
networkstringYesTarget network
typestringYesRequest type (evm_tx, eip712, or eip191)
kindstringConditionalTransaction kind (required for evm_tx, e.g., erc20_approve)
payloadobjectYesRequest payload
broadcastbooleanNoWhether to broadcast the transaction
idempotencyKeystringNoIdempotency key for request deduplication

EVM Transaction (ERC20 Approve)
{
  "walletId": "<local-wallet-id>",
  "network": "MATIC_MAINNET",
  "type": "evm_tx",
  "kind": "erc20_approve",
  "payload": {
    "token": "0xToken",
    "spender": "0xSpender",
    "amount": "10"
  },
  "broadcast": false,
  "idempotencyKey": "optional-idem-key"
}

Payload Fields for ERC20 Approve

FieldTypeDescription
tokenstringToken contract address
spenderstringSpender address
amountstringApproval amount

EIP-712 Typed Data
{
  "walletId": "<local-wallet-id>",
  "network": "ETHEREUM_MAINNET",
  "type": "eip712",
  "payload": {
    "typedData": {
      "primaryType": "Permit",
      "domain": {
        "name": "USD Coin",
        "version": "2",
        "chainId": 1,
        "verifyingContract": "0xToken"
      },
      "types": {
        "Permit": [
          { "name": "owner", "type": "address" }
        ]
      },
      "message": {
        "owner": "0xOwner",
        "spender": "0xSpender"
      }
    }
  }
}

Important: typedData.types and typedData.message keys must match the EIP-712 schema exactly and should not be camelCased.

Payload Fields for EIP-712

FieldTypeDescription
typedDataobjectEIP-712 typed data structure
typedData.primaryTypestringPrimary type name
typedData.domainobjectDomain separator fields
typedData.typesobjectType definitions
typedData.messageobjectMessage to sign

EIP-191 Message Signing
{
  "walletId": "<local-wallet-id>",
  "network": "ETHEREUM_MAINNET",
  "type": "eip191",
  "payload": {
    "message": "Sign this message to verify ownership"
  }
}

Payload Fields for EIP-191

FieldTypeDescription
messagestringThe message to sign

EIP-191 is commonly used for:

  • Wallet ownership verification
  • Off-chain authentication
  • Simple message signing without structured data

Sample Request (EVM TX)
curl --location -g '{{baseUrl}}/api/v1/managed-signing/requests' \
--header 'X-API-KEY: {{apiKey}}' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
    "walletId": "<local-wallet-id>",
    "network": "MATIC_MAINNET",
    "type": "evm_tx",
    "kind": "erc20_approve",
    "payload": {
        "token": "0xToken",
        "spender": "0xSpender",
        "amount": "10"
    },
    "broadcast": false
}'
Sample Response
Sample Response
{
  "statusCode": 201,
  "message": "Signing request created",
  "data": {
    "id": "<local-request-id>",
    "businessId": "<business-id>",
    "walletId": "<local-wallet-id>",
    "network": "MATIC_MAINNET",
    "type": "evm_tx",
    "kind": "erc20_approve",
    "status": "AWAITING_APPROVAL",
    "payload": {
      "token": "0xToken",
      "spender": "0xSpender",
      "amount": "10"
    },
    "broadcast": false,
    "createdAt": "2026-01-20T18:30:40.912Z",
    "updatedAt": "2026-01-20T18:30:40.912Z"
  },
  "success": true
}
Response Fields
FieldTypeDescription
idstringLocal request ID (use this in subsequent requests)
businessIdstringYour business ID
walletIdstringLocal wallet ID
networkstringTarget network
typestringRequest type
kindstringTransaction kind
statusstringRequest status
payloadobjectRequest payload
broadcastbooleanBroadcast flag
signaturestringThe cryptographic signature (when signed)
rawSignedTxstringFull signed transaction (if broadcast: false)
txHashstringTransaction hash (if broadcast: true)
decisionTraceobjectPolicy evaluation details
errorMessagestringError details (if status is FAILED or POLICY_DENIED)
createdAtstringCreation timestamp
updatedAtstringLast update timestamp
Request Statuses
StatusDescription
AWAITING_APPROVALRequest is pending manual approval (exceeds policy threshold)
SIGNEDRequest was signed successfully
POLICY_DENIEDRequest was denied by policy rules
FAILEDRequest failed (see errorMessage for details)

Contact

business@useknit.io

Knit Business Financial Services Ltd.
3080 Yonge St
Toronto ON, M4N 3N1, Canada

Subscribe to our newsletter

A monthly digest of the latest news, articles, and resources.

Knit logo

© KNIT BUSINESS FINANCIAL SERVICES LIMITED is duly registered by the Financial Transactions and Reports Analysis Centre of Canada (FINTRAC) as a Money Service Business (C100000256)