Start
From zero to a protected payment
Use the dashboard for owner actions and one small HTTP call for the agent. No agent private key belongs in your model process.
Requirements
- A Peribolos user session for workspace administration.
- An Arc Testnet browser wallet for contract-owner transactions.
- Arc Testnet USDC for funding and gas.
- An HTTP-capable agent runtime.
1. Provision an agent
Create the agent first. Do not pass a pre-existing vault address: a newly provisioned signer cannot already be that vault's authorized agent key.
request
curl -X POST "$PERIBOLOS_API_URL/v1/agents" \
-H "Authorization: Bearer $OWNER_SESSION" \
-H "Content-Type: application/json" \
-d '{"name":"Research buyer","framework":"custom"}'Save the key once
The response contains
apiKey once. Store it in your agent's secret manager; the dashboard cannot reveal it again.2. Deploy and attach the live vault
Open Vaults → Create & fund domain, select the offline vault, and deploy with the managed signer shown for that agent. After the owner transaction confirms, the app attaches the address and reads its owner, signer, limits, action bitmap, expiry, and pause state from Arc.
attach by API
curl -X PATCH "$PERIBOLOS_API_URL/v1/vaults/$VAULT_ID" \
-H "Authorization: Bearer $OWNER_SESSION" \
-H "Content-Type: application/json" \
-d '{"address":"0xYourDeployedVault","ownerAddress":"0xYourOwnerWallet"}'3. Make a payment
agent request
const response = await fetch(process.env.PERIBOLOS_API_URL + "/v1/payments", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + process.env.PERIBOLOS_API_KEY,
},
body: JSON.stringify({
payeeAddress: "0x70997970C51812dc3A010C7d01b50e0d17dc79C8",
amountUsdc: 1.5,
actionType: 1,
idempotencyKey: "research-order-123",
}),
});
const payment = await response.json();
// status: EXECUTED | BLOCKED | FAILED