Validation limits
Requests are rejected before any API call when they exceed these limits.
| Field | Allowed range |
|---|---|
| Source text | 1–100,000 characters |
| Turnaround | 5–10,080 minutes |
| Price | 300–100,000,000 cents |
| Idempotency key | 8–128 bytes, no control characters |
| Screening percentage | 1–25 |
| Screening maximum words | 50–500 |
Humanization id (get) | ASCII alphanumerics, _, - |
| Imported work brief | 1–100,000 bytes, valid non-empty JSON object; title 1–200 characters |
| Task title | 1–200 characters |
| Task brief | 1–5,000 characters |
CLI
Per-command reference. Browse the complete CLI command tree for exact invocations, inputs, effects, and refusal conditions.
handtohuman onboarding [--reset]
handtohuman gui --listen <LOOPBACK-HOST:PORT>
handtohuman market draft-import <FILE> --kind <KIND> --title <TITLE> [--id <ID>]
handtohuman market draft-show <DRAFT_ID>
handtohuman market draft-remove <DRAFT_ID>
handtohuman market order-create <BUYER_ID> <OFFER_ID> [--units N] --draft <DRAFT_ID>gui serves the graphical importer from the installed binary, while draft-import is the CLI form. Both reach the fleet database handtohuman through Stado and Skarbiec and call the same importer. The GUI requires an explicit loopback --listen; there is no local database-file option. File parsing, size, title, id, duplicate, and conflict checks finish before insertion. Existing drafts are preserved; removal refuses a draft attached to an order.
handtohuman quote --kind humanization --words 648 \
--turnaround-minutes 1440 --currency USD
handtohuman market order-assign <ID> --turnaround-minutes N [--worker W]
handtohuman market order-lapsed
handtohuman market order-verify <ID> --document F [--recording F]Use handtohuman market --help for the full leaf command tree. Marketplace and quote results are JSON by default; --json selects it explicitly and --text prints the same result as path-and-value lines. These flags conflict. The interactive gui and onboarding commands refuse output-format flags. quote --output <FILE> writes its result to a file instead of stdout. Invalid invocations exit 2; ledger resolve, credential, connection, migration and domain refusals exit nonzero with their cause.
Rust library
use handtohuman::{Marketplace, OfferKind, quote_card};
let quote = quote_card(OfferKind::Humanization, 648, 1440, "USD")?;
let market = Marketplace::open().await?;
let brief = std::fs::read("existing-brief.json")?;
let imported = market.import_work_brief(
None,
OfferKind::Humanization,
"Existing rewrite brief",
"existing-brief.json",
&brief,
).await?;
let draft_id = imported.imported.first()
.or_else(|| imported.unchanged.first())
.map(|draft| draft.id.as_str())
.ok_or("the brief was not retained")?;The crate exposes marketplace, onboarding, GUI, payments, pricing, verification and Stado execution modules. Marketplace::open().await connects to the fleet database and migrates its schema. Draft import retains existing work but does not commission it; order creation, funding and assignment are separate operations.
Configuration
| Variable | Meaning |
|---|---|
HANDTOHUMAN_FLEET_HOME | Home where Stado and the HandToHuman database-client bearer are installed; otherwise HOME. |
HANDTOHUMAN_DATABASE_URL, HANDTOHUMAN_DATABASE_CA_FILE | Optional direct server URL and trusted PEM CA on a machine without Stado. A server URL without the CA file is refused before connecting. |
The default route resolves database handtohuman through Stado, obtains its credential fields from Skarbiec and verifies TLS before migrating the schema. A configured route is not proof of a working connection.
Building and helper scripts
cargo build --releaseThe binary is target/release/handtohuman. HandToHuman requires Rust 1.85+ and edition 2024. TLS uses rustls and needs no system dependencies.
Release workers use stado product cargo with the immutable private-cargo-sources input instead of fetching private Git repositories. From the committed checkout, run stado release catalog input pin . --name private-cargo-sources --source . --revision HEAD --cargo --json, then commit the updated .wisent-release.json before submitting a release. Repeat when locked private packages change.
Stado's private Cargo input contract covers the matching desktop operation, checksums, missing or stale input refusals, and real publication qualification. Both publisher and worker must support it. Publication alone is not proof that the native build or installed application works.
Reassignment needs no separate script: handtohuman market order-lapsed lists orders past their deadline, and handtohuman market order-assign assigns a worker while preserving the escrow.