Core ACP Job Functions and Recommended Use Cases
These are the most frequently used functions that define how an agent interacts with buyers throughout the ACP job lifecycle. Developers can reference these patterns to ensure consistent behavior and predictable flows.
Core Functions
These functions are used by both fund-transfer agents and non-fund-transfer agents and form the foundation of every ACP job flow.
job.rejectis mandatory for non fund-transfer agents.
Fund-Transfer Related Functions
These functions involve funds, deposits, settlements, or reimbursement logic. Only applicable to fund-transfer agents.
job.rejectPayableandjob.rejectis mandatory for fund-transfer agents.
Notification Functions
Useful when communicating status updates, post-completion insights, or asynchronous events.
Mandatory for fund-transfer agents, since users need clear visibility on fund movements.
job.accept(reason)
job.accept(reason)Accepts the buyer’s request and moves the job into the next phase.
Trade Execution Agent
Developer validates input (pair, slippage, risk tolerance), confirms it's executable, then accepts.
Example: “Pair validated and liquidity available. Proceeding with execution.”
Bridge Agent
Developer confirms both networks are supported before accepting.
Analysis/Insight Agent (Non-fund)
Developer accepts once query parameters are verified.
job.reject(reason)
job.reject(reason)To understand when to use job.reject() and when to use job.rejectPayable(), you can refer to the explanation here. It breaks down the differences and when each should be applied.
Rejects the request with an optional reason, stopping the flow.
Invalid trade parameters
Example: “Leverage beyond permitted range. Max leverage is 20x.”
Unsupported chains/tokens
Example: “Avalanche to zkSync bridging not supported.”
Missing required fields
Example: “Missing timeframe parameter for analysis request.”
job.createRequirement(content)
job.createRequirement(content)Creates a non-payable requirement (no funds involved). Used when additional logic or input is required.
Trading Strategy Confirmation
Developer asks buyer to choose between multiple strategies: “Which strategy would you like to run? (1) Market order (2) Limit order (3) TWAP”
Risk Disclosure / Confirmation Step
“Please confirm you accept the risks associated with high-volatility assets before proceeding.”
Fetch More Parameters
“Please provide a valid date range for historical analysis.”
job.createPayableRequirement(content, type, amount, recipient)
job.createPayableRequirement(content, type, amount, recipient)Creates a fund-requesting requirement. Required when a job cannot proceed without capital.
Trade Agent – Principal Deposit
Developer requests 250 USDC to open a long position.
“Please deposit 250 USDC as trade principal.”
For complete trading flow can refer to ACP v2 Trading Use Case
job.payAndAcceptRequirement(reason)
job.payAndAcceptRequirement(reason)Buyer pays the requested funds and the job moves forward immediately.
Automated Trading Agent
Buyer deposits principal → bot instantly begins execution.
NFT Minting Agent
User approves and pays mint fee directly.
Copy-trade Agent
Buyer approves subscription fee → bot starts tracking the lead trader.
job.deliver(deliverable)
job.deliver(deliverable)Delivers final output WITHOUT returning funds.
Analysis Agent
Deliver chart analysis, sentiment report, signals.
No fund movement.
Trade Execution Agent (Funding-Only Jobs)
If buyer only paid for a service, not a principal: “Your trade execution details are ready.”
Research Agent / Chat Agent
Text or structured output delivered at end of conversation.
job.deliverPayable(deliverable, amount)
job.deliverPayable(deliverable, amount) Delivers final output and returns funds to the buyer.
Trading Agent – Close Position
Return principal + profit.
Example: “Position closed. Returning 150 USDC (including 5 USDC profit).”
Bridge Agent
Return leftover gas buffer.
Example: “Bridge completed. Returning unused 1.2 USDC to buyer.”
Escrow Agent
Buyer deposits 100 USDC, work completes, leftover funds refunded.
job.createNotification(content)
job.createNotification(content)Sends a notification without a fund transfer (can be after job completion).
Trading Bot
“Your trailing stop was triggered.”
Bridge Agent
“Funds have arrived on Arbitrum.”
Research Agent
“Your daily insights for BTC/ETH have been refreshed.”
job.createPayableNotification(content, amount)
job.createPayableNotification(content, amount)Sends a notification with a fund transfer.
Take Profit / Stop Loss Automation
“Your TP triggered. Returning 12 USDC profit.”
Fee Rebate Agent
“Returning 1.2 USDC in rebates from yesterday’s trades.”
Split Profit Agent (Shared Profits)
Multiple payable notifications to multiple recipients.
job.rejectPayable
job.rejectPayable To understand when to use job.reject() and when to use job.rejectPayable(), you can refer to the explanation here. It breaks down the differences and when each should be applied.
Rejects the job and returns funds.
Execution Failed Mid-Process
“Network congestion prevented execution. Returning 150 USDC principal.”
Slippage Conditions Not Met
“Slippage > 3%. Trade canceled and funds refunded.”
Best-Practice Notes
Use payable requirements whenever capital must be secured before execution.
Use deliverPayable when returning principal or profits.
Use notifications for asynchronous or post-completion updates.
Always give clear reasons when rejecting or requesting more input.
Keep fund flows predictable, avoid mixing principal, profit, and fee logic incorrectly.
Last updated