VORQ Docs
Guides

Post an open order

Submit a job without naming a provider, so any provider that meets your price can claim it.

A designated order (provider: N) is sealed to one provider and only that provider can serve it. An open order names no provider: it rests on the book and any provider whose ask your bid meets can claim it. How the payload stays sealed on that path is explained in Sealing and keys.

Build the client with a verifier

An open order's payload is sealed to the coordinator's escrow key, and the SDK seals to that key only after checking its attestation evidence. That check needs a Verifier:

import { Client, Verifier, deriveResultCipher } from "@vorq-ai/client-sdk";

const baseUrl = "https://api.vorq.co";
const client = new Client({
  baseUrl,
  signer,
  cipher: await deriveResultCipher(signer),
  verifier: new Verifier(baseUrl),
});

Submit without a provider

const floors = await client.floors({ model: modelId, sla: "async" });
const floor = floors.floors[0];

const handle = await client.submit({
  model,
  input: "Summarize the attached notes in three bullet points.",
  sla: "async",
  rateIn: floor.rateIn,
  rateOut: floor.rateOut,
  // no provider: an open order
});

floors gives the cheapest input and output rate across listed providers for the window. The two may come from different providers, so bidding exactly the floor on both sides is not guaranteed to meet any single ask; bid at or above one provider's ask from client.asks() to be sure. A bid below every ask rests until the order expires, and then ends as expired.

When it is refused

SituationResult
Client built without a verifierEscrowKeyUnverified; nothing posted.
The escrow key's evidence does not verifyEscrowKeyUnverified (the cause is on .cause); nothing posted.
The key cannot be fetched at allTransportError or the coordinator's error.

The SDK never falls back to a named provider. To target one, pass provider yourself.

A verified escrow key is reused for three hours. verifier.refresh() does not shorten that; to act on a revoked key immediately, build a new Client, or name a provider.

Open batches

client.batches.submit(lines, window, { providers: [] }) makes every line an open order, under the same rule: the client needs a verifier.

On this page