hellostock
hellostock.
HelloStock demandes (buyers' requests for metal) — list or read one.
setup & usage
create a token at hellostock.fr → My account → Settings → API tokens (in the French UI: *Mon espace → Réglages → Jetons d'API*), then paste it into oto. It is only shown once; it starts with hs_.
hellostock_demande(since="2026-09-01"); a whole record (positionings and sends included) → op="get"hellostock_offre(certificat="sans-mots-cles"), then op="get" on each: certificat.verdictDetail returns the values read on the certificatehellostock_membre(service=…, sector=…) and hellostock_offre(matiere=…, departement=…); the assistant proposes the matches, HelloStock computes nonehellostock_positionnements(demande_id=…)hellostock_demande_send(demande_id=…, user_ids=[…]) first returns a preview; the send goes out with dry_run=Falsehellostock_offre_update(offre_id=…, keywords=[…])hellostock_demande_set_status / hellostock_offre_update(status=…)lists return {items, nextCursor, total}: total counts everything matching the filters, cursor resumes where the page stops. They are projected (the removed columns are named in projection); full=True returns everything.
hellostock_demande_send writes to real people, from HelloStock's address: the request's specs (material, grade, format, dimensions, thickness, quantity, deadline, certificate), the accompanying note as-is, and two links to the request's page — never the buyer's identity, reference or comment. Preview by default. A member who already received the request is refused, unless allow_resend=True: HelloStock itself would resend without saying anything.noop: true in the response: HelloStock's mailer is not configured — no email went out, and yet the sends are recorded.hellostock_demande_set_status / hellostock_offre_update(status=…): published is visible on the public marketplace immediately, any other status takes it off; all transitions are allowed. No email.hellostock_offre_update(keywords=…) replaces the list, and it is public (search). HelloStock normalizes (lowercase, spaces, duplicates) and refuses the entire list if a term names a steelmaker, a heat number or an order number — including when the certificate shows them. The response returns what is actually stored.written against the OpenAPI 3.1 contract of the admin API (1.0.0, served by GET /api/admin/openapi.json) and verified against it: every route and every parameter sent by the client exist in the contract, and the value lists (statuses, materials, certificate, sectors) are those it publishes.
tested on a fake server that replays the contract, not yet against hellostock.fr: pagination, refused filters, 401/403, the three writes. Not exercised for real: everything that depends on real data (size of the free fields, exact shape of a verdictDetail), and the sending email. The first try once a token is set: "test the connection", then hellostock_demande(limit=1).
out of reach here, on purpose: deleting a member, modifying the site content, downloading a positioning's quote. certificat.url points to a site session page: it does not open with the token.
this connector accepts multiple comptes: each stored credential becomes a named account (one name per compte), at your level, your team's or your org's.
_account="<name>" on the tool; list them: oto_identity(op='list', connector='hellostock') (scope='org' or scope='group' for the org's or team's)oto_identity(op='set', connector='hellostock', identity_id='<name>'); rename: op='rename' with new_name_account) and adding upoutils
utilisation
claude plugin marketplace add otomata-tech/oto-plugin — mcp + skill configurés.pipx install oto-cli puis oto hellostock …