Running a Solver
A solver is an HTTP endpoint. The coordinator POSTs a borrower’s intent to it; the endpoint prices the loan and returns a signed quote, or declines. There is no SDK to embed, no connection to hold open, and no state to keep between requests. Three things stand between you and your first won quote: getting registered, answering the request, and signing correctly.1. Get registered
Solvers are onboarded through a whitelist rather than open self-service enrolment. Until your endpoint is in the registry, it receives no traffic: there is no way to opt yourself in. Onboarding sets up your registry entry:
One entry registers one endpoint. An organisation running several, say one per chain or per region, registers several entries: all of them share its
hash, each carries a distinct name (entries sharing a name merge their metric streams), and address may be reused across entries or set per endpoint.
The scoping fields are opt-in narrowing: omitting them means “send me everything”. Setting them wrongly is the most common reason a live solver sees no traffic. supportedVenues is matched against the request’s venueBitmap, so a solver scoped to one venue receives nothing from borrowers who allowed only the other.
2. Answer a quote request
Your endpoint receives aPOST with the borrower’s intent plus a quoteId minted for your call specifically:
requestId exactly (a mismatch drops the quote) and mirror quoteId too, or omit it and one will be generated. solver must be the signing address registered for your endpoint; a quote claiming a different address is dropped. The permit2Nonce and permit2Signature pair is optional together: omit both to fund your bond from a standing allowance instead; see Sign the quote.
Declining
Not quoting is a normal outcome, not a failure. Decline in either of two ways:- Return HTTP 404, or
- Return HTTP 200 with
bond: "0"
Budget
The default response window is 5 seconds, measured from the coordinator’s request to your last byte. Exceeding it abandons your quote for that round. If your pricing genuinely needs longer, request a higheroverrides.timeout during onboarding rather than running close to the limit: every millisecond you take is one the borrower waits.
3. Sign the quote
A quote always carries the solver’sQuote signature; whether it also carries a Permit2 signature depends on how you fund your bond. take() pulls the bond by trying your standing ERC-20 approval to Iris first and falling back to Permit2. Maintain a standing approval covering your bonds and you sign the quote alone, omitting permit2Nonce and permit2Signature together (half a pair is rejected). Without one, sign the per-quote Permit2 payload as well; that mode also needs your one-time ERC-20 approval to the Permit2 contract.
Every signature is verified by ECDSA recovery against a reconstruction the coordinator builds from your response, so the terms you sign must be exactly the terms you return.
The Quote signature
An EIP-712 signature over the on-chain Quote struct, which is what Iris.take() verifies to bind you to these terms. Build the typed data with getQuoteTypedData from @iris-credit/core-sdk, mixing the request’s fields with your own:
The Permit2 signature
Permit2 is Uniswap’s canonical approval contract: you approve a token to it once, and from then on allowances are granted by signature instead of by transaction. Iris uses it to stage the bond pull, because you are not in the call path at settlement to approve anything. The mode therefore has a prerequisite: a one-time ERC-20 approval to the Permit2 contract for each debt token you quote in, without which the staged pull has nothing to draw on.getSolverRequirements resolves the approvals your funding mode needs as ready-to-send transactions.
For quotes carrying the pair, build the payload with getPermit2PermitTypedData from @iris-credit/core-sdk. Every field is determined by the quote you just signed plus your Permit2 nonce:
Because it authorises exactly this quote’s bond and Permit2 allowance nonces are sequential, the permit is single-use by construction.
Next
Validation
Every check your quote passes, in order, and what each failure means.
Pricing Considerations
What to weigh when deciding the rate you are willing to stand behind.
FAQ
Why am I getting no requests, and other common first-week questions.
API Reference
Field-by-field schemas and bounds.

