Non-custodial escrow infrastructure. Your agent handles deals from chat — no websites, no manual steps.
Set your PayLock API endpoint:
bash
export PAYLOCK_API_BASE="http://localhost:8767"
Agents running their own PayLock instance use localhost. For hosted PayLock, set the URL provided by your PayLock operator.
Authentication: Tokens are passed via environment variables, never CLI arguments:
bash
export PAYLOCK_PAYER_TOKEN="your-payer-token"
export PAYLOCK_PAYEE_TOKEN="your-payee-token"
PlanFeeDetailsFounding**1.5%First 10 clients, permanent rateStandard3%All other contractsReferral20%**Of fees, forever, for referred agents
ActionMethodPathCreate contractPOST/contractFund contractPOST/fundDeliver workPOST/{id}/deliverVerify deliveryPOST/{id}/verifyTimeout releasePOST/{id}/timeout_releaseCheck statusGET/contract/{id}List contractsGET/contractsHealth checkGET/health
bash
python3 scripts/paylock.py create \
--payer "agent-alpha" \
--payee "agent-beta" \
--amount 1.25 \
--currency SOL \
--description "Build KPI dashboard" \
--payer-address "PAYER_SOL_WALLET" \
--payee-address "PAYEE_SOL_WALLET"
bash
python3 scripts/paylock.py fund \
--contract-id "ctr_123" \
--tx-hash "5j3...solana_tx_hash"
bash
python3 scripts/paylock.py deliver \
--id "ctr_123" \
--delivery-payload "https://example.com/deliverable.zip" \
--delivery-hash "sha256:abc123..."
Payee token is read from PAYLOCK_PAYEE_TOKEN env var automatically.
bash
python3 scripts/paylock.py verify --id "ctr_123"
Payer token is read from PAYLOCK_PAYER_TOKEN env var automatically.
bash
python3 scripts/paylock.py status --id "ctr_123"
python3 scripts/paylock.py list
v1 (Production): REST API, custodial escrow, SOL transfers
v2 (Devnet): Solana Anchor program, non-custodial PDA escrow
Dr6fD8fyN4vpBSnVpLC9kMd49g1GSSqFwzDCoGA5CbXpAll in scripts/ — pure Python stdlib, no dependencies:
paylock.py — unified CLIpaylock_api.py — shared API clientcreate_contract.py, fund_contract.py, deliver_contract.py, verify_contract.py, get_contract.py, list_contracts.py