Skip to main content
As a taker (buyer), you signal intents to purchase USDC from maker deposits in exchange for fiat payments. This guide explains how to create and manage intents.

Overview

Signaling an intent:
  1. Locks liquidity from a maker’s deposit on the Escrow contract
  2. Creates a commitment to send fiat payment off-chain
  3. Records all trade parameters on-chain for later verification
  4. Starts an expiration timer (typically 24 hours)
Intents are created through the Orchestrator contract which coordinates the entire trade lifecycle.

Finding Available Deposits

Before signaling an intent, query available deposits:

Signaling an Intent

1

Prepare intent parameters

Gather all required information for the trade:
2

Get gating signature (if required)

If the deposit requires intent gating, obtain a signature from the gating service:
3

Call signalIntent

Submit the intent transaction:

Signaling with Referrers

Include a referrer to share fees:
Referrer fees are capped at 50% and are deducted from the USDC you receive. For example, with a 1% referrer fee on 100 USDC, you receive ~99 USDC (after protocol fees too).

Multiple Intents

By default, accounts can only have one active intent at a time. To signal multiple intents:

Reading Intent State

Canceling an Intent

Cancel before making the fiat payment if you change your mind:
You can only cancel intents you own. Once you’ve sent the fiat payment and obtained a proof, you should fulfill the intent instead of canceling.

After Signaling

Once your intent is signaled:
1

Send fiat payment

Use the payment method specified in your intent to send fiat to the maker’s payee details.Amount to send: Calculate from the intent’s amount and conversion rate.
2

Obtain payment proof

Get a zkTLS attestation or proof from the attestation service proving your payment.
3

Fulfill the intent

Submit the payment proof to unlock your USDC. See Fulfilling Intents.

Validation Checks

The Orchestrator performs these validations when signaling:
  • Deposit exists and is accepting intents
  • Sufficient liquidity available
  • Amount within deposit’s intent range
  • Payment method is registered in PaymentVerifierRegistry
  • Payment method is active for this deposit
  • Currency is supported by the payment method
  • Conversion rate meets deposit’s minimum
  • Gating signature is valid (if required)
  • Signature hasn’t expired
  • Account can have multiple intents (if not first)
  • Referrer fee ≤ 50%
  • Referrer address is set if fee > 0
  • Post-intent hook is whitelisted (if specified)

Common Errors

Best Practices

Check Rates

Verify the conversion rate meets your expectations before signaling.

Act Quickly

Signal and fulfill promptly - intents typically expire in 24 hours.

Save Intent Hash

Store the intentHash from the event - you’ll need it for fulfillment.

Monitor Expiry

Track when your intent expires and fulfill before the deadline.

Next Steps

Fulfill Intent

Learn how to submit payment proofs and receive your USDC

Contract Reference

View the complete Orchestrator contract documentation