Developers

Draw flash liquidity from your own code

You send the transaction; we never do. Every drawing is authorised by a signature bound to your address, the loan and our fee settle inside your transaction, and if the strategy does not profit the whole thing reverts and we earn nothing. The reference below is public — read it all before you apply.

The shape of an integration

1. Ask the desk for an authorisation. Send your parameters — asset, amount, the actions your strategy will run. We return a signature, a nonce, a deadline and the fee rate, having already checked your facility so a request that would breach your terms is refused rather than signed and reverted at your expense.

2. Send the transaction yourself. Call execute() on the Executor with those parameters and the signature. The contract rebuilds the digest from msg.sender and verifies it.

3. It settles or it reverts. The loan is drawn, your actions run, the loan and its premium are repaid, our share of the surplus transfers, and your remainder follows — all in one transaction. No invoicing and nothing to trust.

Endpoints

POSThttps://desk-api.atomicexchange.cloud/v1/desk/authorize

Returns a signed EIP-712 authorisation: signature, digest, nonce, deadline, feeBps, and the pool to draw from. Pass an idempotencyKey and a retry returns the same authorisation rather than consuming another.

GEThttps://desk-api.atomicexchange.cloud/v1/desk/facility

What you may draw and at what rate: volume drawn month-to-date, outstanding authorisations, your limit, the band you are in, and the volume remaining to the next one.

GEThttps://desk-api.atomicexchange.cloud/healthz

Whether the desk can sign right now. Reports the signer's on-chain status and how current the draw index is. It reports ok:false when it cannot sign rather than failing at the moment you need it.

curl -X POST https://desk-api.atomicexchange.cloud/v1/desk/authorize \
  -H "Authorization: Bearer $ATOMIC_DESK_KEY" \
  -H "content-type: application/json" \
  -d '{
    "asset":   "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    "amount":  "1000000000",
    "minProfit": "0",
    "pool":    "0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2",
    "actions": [ { "target": "0x…", "approve": "0x…", "approveAmount": "0",
                   "value": "0", "data": "0x…" } ],
    "sweepTokens": [],
    "idempotencyKey": "your-own-id"
  }'

Three things that will surprise you

1. feeBps is not constant. Your rate is stamped from the volume you have drawn month-to-date and improves as you cross each threshold, so two authorisations for identical parameters a week apart can carry different rates. Never cache or hardcode it — use the value returned with each authorisation. Reproducing the digest yourself with a remembered rate produces a different digest and fails on chain, after you have paid gas.

2. A fixed minProfit is not a fixed threshold. It is tested against profit net of our fee, so the gross a trade must produce to clear it is minProfit / (1 − rate). At the opening tier that is 1.67×; at the top tier 1.11×. The same trade can revert early in a month and settle later in it. Derive minProfit from the feeBps in the authorisation, not from a constant.

3. Do not reconcile a single transaction against the headline rate. A month that ends in the top band did not pay that rate on every transaction — it climbed through the lower bands to get there. The tier it reached becomes the opening rate of the next month, for one month, and nothing is credited or paid at a month end. Reconcile against the month, not the transaction.

Contracts

FlashExecutor · Base

Source verified. Two flash sources, at 5 bps and 4 bps, so a drawing takes the cheaper one. Same ownerless, immutable design.

FlashExecutor · Polygon

Read the chain before you read the address. This is the Executor on Polygon. The identical address on Ethereum mainnet is a different contract — the AtomicFlashReceiver. Same deployer, same nonce, two chains. There is a single flash source here.

FlashExecutor · Ethereum mainnet

Source verified. No owner, no pause, no upgrade path and no rescue function — read it rather than take our word for it.

AtomicFlashReceiver · Ethereum mainnet

Independently audited, source verified, and free — this contract charges nothing. Used for self-liquidation and refinancing.

Your strategy is yours. Action calldata is arbitrary by design. Where the money comes from is constrained to an immutable allowlist of flash sources; what you do with it is not. We neither need to know nor approve where you trade.

Getting a key

Keys are not self-serve, and that is deliberate rather than gatekeeping. Every key carries an underwritten facility — a monthly limit, a maximum notional per transaction, and a fee tier — because issuing flash capacity to an unassessed counterparty is not something that can be automated responsibly.

Request access below. We reply within 1–2 business days. There is no fee to apply and no minimum to be quoted a drawing; the $1M monthly minimum applies only to holding a reserved facility.

Request access

Before you build