no_authorizationNo durable spend authorization or reservation exists.
Correct input or policy, then retry with the same idempotency key.Telaro reports financial state separately from transport errors so callers can retry without double-funding or prematurely releasing a reservation.
no_authorizationNo durable spend authorization or reservation exists.
Correct input or policy, then retry with the same idempotency key.reservedBudget is held, but funding is not yet confirmed.
Read the execution; let reconciliation resume the planned operation.payment_unknownA money-moving response was lost or chain state is uncertain.
Do not create a replacement. Read state and retry the same operation/key.fundedThe sACP job is funded and the provider can work.
Wait for provider submission, then sync it.settledAcceptance and budget consumption are confirmed.
Fetch and retain the receipt.recoveredReserved or transferred value has been reconciled back.
Fetch the final receipt/audit record before starting a new run.const disputed = await telaro.procurement.disputeSacp(
verified.id,
{
reason: "Deterministic acceptance failed.",
evidenceUri: "ipfs://bafy-encrypted-evidence",
},
{ idempotencyKey: persistedJob.disputeKey },
);
// After the bound evaluator publishes a verdict:
const terminal = await telaro.procurement.syncSacpVerdict(disputed.id, {
idempotencyKey: persistedJob.verdictSyncKey,
});
// If no provider submission arrived before submitDeadline:
const recovered = await telaro.procurement.reclaimSacp(funded.id, {
idempotencyKey: persistedJob.reclaimKey,
});A provider-winning verdict consumes the reservation. A client-winning verdict or deadline reclaim releases it. Budget mutation and the single terminal receipt commit in the same transaction.
Generate an idempotency key when the user or automation creates the intent. Persist it with your job and reuse it for retries of that exact mutation. Generate a new key only for a new intent.
import { TelaroProcurementError } from "@telaro/sdk/procurement";
const executeKey = persistedJob.executeIdempotencyKey;
try {
await telaro.procurement.executeSacp(execution.id, {
idempotencyKey: executeKey,
});
} catch (error) {
if (error instanceof TelaroProcurementError) {
console.log(error.financialState, error.retryable, error.nextAction);
}
}Do not create another execution or release the reservation.
Call getExecution(execution.id) or get(runId).
Use the same operation and idempotency key. Adapters observe before signing.
The worker leases pending operations and confirms chain facts without duplicate signing.
Keep request ID, run ID, execution ID, request ID header, and transaction signature.