Knit API Documentation
CPN V1: Raw Transaction Signing (Optional)
{{baseUrl}}/api/v1/managed-signing/requestsCPN 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
- Update your policy to allow raw transactions:
{
"name": "cpn-v1",
"rules": {
"chains": ["MATIC_MAINNET"],
"allowRawTx": true
}
}Headers
X-API-KEY: Your API key for authentication.Accept: Set toapplication/jsonto receive responses in JSON format.Content-Type: Set toapplication/json.
Request 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
}| Field | Type | Description |
|---|---|---|
walletId | string | Your local wallet ID |
network | string | Target network |
type | string | Must be evm_tx |
kind | string | Must be raw for raw transaction signing |
payload.tx | object | Raw transaction object |
broadcast | boolean | Whether to broadcast (usually false for CPN V1) |
Transaction Fields
| Field | Type | Description |
|---|---|---|
to | string | Recipient contract address |
data | string | Encoded transaction data |
value | string | ETH value in hex (usually 0x0) |
gas | string | Gas limit in hex |
maxFeePerGas | string | Max fee per gas in hex (EIP-1559) |
maxPriorityFeePerGas | string | Priority fee in hex (EIP-1559) |
nonce | number | Transaction nonce |
Sample Request
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": "raw",
"payload": {
"tx": {
"to": "0x...",
"data": "0x...",
"value": "0x0",
"gas": "0x5208",
"maxFeePerGas": "0x59682f00",
"maxPriorityFeePerGas": "0x59682f00",
"nonce": 1
}
},
"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": "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
signedTxin 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
chainsto only the networks you need - Monitor audit logs for unexpected raw transaction requests