Managed Signing
Circle Payment Network (CPN)
5. CPN V1 (Optional)

CPN V1: Raw Transaction Signing (Optional)

POST
https://api-prod.useknit.io/api/v1/managed-signing/requests
Scopemanaged-signing:writeAuthBearer token

CPN V1 uses traditional on-chain transactions instead of EIP-712 signatures. Only use this if you specifically need CPN V1 support.

When to Use CPN V1

  • Legacy integrations that don't support Permit2
  • Specific Circle requirements for your use case

For new integrations, CPN V2 is recommended as it's gasless and more efficient.

Prerequisites

  1. Update your policy to allow raw transactions:
{
  "name": "cpn-v1",
  "rules": {
    "chains": ["MATIC_MAINNET"],
    "allowRawTx": true
  }
}

Body

{
  "walletId": "<local-wallet-id>",
  "network": "MATIC_MAINNET",
  "type": "evm_tx",
  "kind": "raw",
  "payload": {
    "tx": {
      "to": "0x...",
      "data": "0x...",
      "value": "0x0",
      "gas": "0x...",
      "maxFeePerGas": "0x...",
      "maxPriorityFeePerGas": "0x...",
      "nonce": 123
    }
  },
  "broadcast": false
}
FieldTypeDescription
walletIdstringYour local wallet ID
networkstringTarget network
typestringMust be evm_tx
kindstringMust be raw for raw transaction signing
payload.txobjectRaw transaction object
broadcastbooleanWhether to broadcast (usually false for CPN V1)

Transaction Fields

FieldTypeDescription
tostringRecipient contract address
datastringEncoded transaction data
valuestringETH value in hex (usually 0x0)
gasstringGas limit in hex
maxFeePerGasstringMax fee per gas in hex (EIP-1559)
maxPriorityFeePerGasstringPriority fee in hex (EIP-1559)
noncenumberTransaction nonce

Request

curl "https://api-prod.useknit.io/api/v1/managed-signing/requests" \
  -H "Authorization: Bearer $KNIT_ACCESS_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "walletId": "<local-wallet-id>",
    "network": "MATIC_MAINNET",
    "type": "evm_tx",
    "kind": "raw",
    "payload": {
        "tx": {
            "to": "0x...",
            "data": "0x...",
            "value": "0x0",
            "gas": "0x5208",
            "maxFeePerGas": "0x59682f00",
            "maxPriorityFeePerGas": "0x59682f00",
            "nonce": 1
        }
    },
    "broadcast": false
}'

Response

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": "raw",
    "status": "SIGNED",
    "payload": {
      "tx": { "..." }
    },
    "signedTx": "0x...",
    "broadcast": false,
    "createdAt": "2026-01-20T18:30:40.912Z",
    "updatedAt": "2026-01-20T18:30:40.912Z"
  },
  "success": true
}

Important Notes

  • Raw transaction signing requires all fields to be provided (gas, fees, nonce)
  • If RPCs are configured, the service can auto-fill gas estimation
  • The signedTx in the response is the signed raw transaction to submit to Circle
  • CPN V1 transactions require gas fees paid by the wallet

Security Considerations

Enabling allowRawTx: true in your policy allows signing arbitrary transactions. Consider:

  • Only enable if you specifically need CPN V1
  • Restrict chains to only the networks you need
  • Monitor audit logs for unexpected raw transaction requests