Managed Signing
Circle Payment Network (CPN)
2. Create Policy

Step 2: Create CPN Policy

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

Create a policy that allows CPN V2 signature flows while restricting signing to only approved tokens and contracts.

Body

{
  "name": "cpn-v2",
  "rules": {
    "chains": ["MATIC_MAINNET"],
    "tokens": ["<USDC token address>"],
    "spenders": ["<Permit2 contract address>"],
    "typedData": { "allow": true },
    "denyUnlimitedApprovals": false,
    "allowRawTx": false
  }
}

Policy Rules Explained

FieldTypeDescription
chainsarrayAllowed blockchain networks
tokensarrayToken contract addresses that can be approved
spendersarrayContract addresses allowed as spenders (Permit2)
typedData.allowbooleanMust be true for CPN V2 EIP-712 signatures
denyUnlimitedApprovalsbooleanSet to false to allow standard Permit2 approvals
allowRawTxbooleanSet to false unless you need CPN V1

Security Recommendations

  • Restrict tokens: Only include USDC addresses you intend to use
  • Restrict spenders: Only include the official Permit2 contract address
  • Keep allowRawTx: false: Only enable for CPN V1 legacy support

Request

curl "https://api-prod.useknit.io/api/v1/managed-signing/policies" \
  -H "Authorization: Bearer $KNIT_ACCESS_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "cpn-v2",
    "rules": {
        "chains": ["MATIC_MAINNET"],
        "tokens": ["0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"],
        "spenders": ["0x000000000022D473030F116dDEE9F6B43aC78BA3"],
        "typedData": { "allow": true },
        "denyUnlimitedApprovals": false,
        "allowRawTx": false
    }
}'

Response

Response
{
  "statusCode": 201,
  "message": "Policy created",
  "data": {
    "id": "<local-policy-id>",
    "businessId": "<business-id>",
    "name": "cpn-v2",
    "rules": {
      "chains": ["MATIC_MAINNET"],
      "tokens": ["0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"],
      "spenders": ["0x000000000022D473030F116dDEE9F6B43aC78BA3"],
      "typedData": { "allow": true },
      "denyUnlimitedApprovals": false,
      "allowRawTx": false
    },
    "createdAt": "2026-01-20T18:30:40.912Z",
    "updatedAt": "2026-01-20T18:30:40.912Z"
  },
  "success": true
}

Next Step

Proceed to Permit2 Approval to set up the one-time on-chain approval.