मुख्य सामग्री पर जाएं

ऑटोमेटेड उपयोग

कोई agent एक Hushscript account खोल सकता है, उसका payment कर सकता है, recordings transcribe कर सकता है, और अपने ही credentials recover कर सकता है, शुरू से आख़िर तक, बिना किसी व्यक्ति के sign in किए।

पहले Hushscript account खोलने के लिए कम से कम एक बार किसी व्यक्ति की ज़रूरत होती थी। अब यह पूरी कहानी नहीं है। एक payment-first flow किसी agent को अपना ही account खोलने, उसे fund करने, और उसे चलाने देता है, बीच में कहीं कोई human account holder नहीं। /developers और /mcp उन दो interfaces का दस्तावेज़ीकरण करते हैं जो यह account फिर use करता है; यह page एक पाने का walkthrough है।

Sign up

POST /v1/agent/accounts एक headless signup खोलता है। अभी कोई account नहीं है, कोई cookie नहीं, और कोई token नहीं: बस एक pending purchase।

curl -X POST https://api.hushscript.com/v1/agent/accounts \
  -H "Content-Type: application/json" \
  -d '{
    "contact_email": "ops@example-agent.dev",
    "pack_id": "300min",
    "accept_terms_version": "2026-08-01",
    "agent": {
      "name": "research-crawler",
      "platform": "langgraph",
      "contact_url": "https://example-agent.dev/bots/research-crawler"
    }
  }'
{
  "signup_id": "hsr1:eu:4c3a1f9e7b2d4e6f8a0c1b2d3e4f5061",
  "claim_secret": "cs_9f3d2a1b7e6c4f5a8b9d0e1f2a3b4c5d",
  "checkout_url": "https://checkout.stripe.com/c/pay/cs_test_a1B2c3D4e5F6",
  "pack": "300min",
  "amount": 599,
  "currency": "usd",
  "expires_at": 1789112400
}

contact_email सिर्फ़ receipts और notices के लिए है, कभी login के लिए नहीं। pack_id, 45min, 300min, 900min, 1800min, 6000min में से एक होता है; amount या currency कभी खुद न भेजें, दोनों server पर pack से derive होते हैं। सिर्फ़ दो सबसे छोटे packs, 45min और 300min, signup पर खरीदे जा सकते हैं। कोई बड़ा pack_id मना कर दिया जाता है, और उस refusal में details.allowed_packs भी होता है जो यह बताता है कि यह account अभी क्या खरीद सकता है, ताकि caller बिना guess किए retry कर सके। बाक़ी की ladder age के साथ unlock होती है, volume के साथ नहीं: नीचे कोई नया account क्या खरीद सकता है देखें। accept_terms_version को server के current policy version से बिल्कुल match करना चाहिए, वरना call policy_version_stale के साथ fail होती है, जो अपने body में current value बताती है। एक optional data_region hint तभी honor होता है जब वह उस region से सहमत हो जो आपकी network location पहले से बताती है। एक optional dry_run: true सब कुछ बिना किसी Stripe session और बिना किसी charge के validate करता है; इसका signup_id dry_ prefix के साथ आता है और कभी claim नहीं किया जा सकता।

claim_secret सिर्फ़ इसी response में, बस एक बार दिखाया जाता है। Hushscript सिर्फ़ इसका hash store करता है। claim call से पहले इसे खो देने का मतलब है signup को खो देना: किसी claim secret को recover करने का कोई रास्ता नहीं है, और escrow में रखा payment नीचे बताए गए sweep से refund होता है, किसी lookup से वापस नहीं मिलता।

अपने ही browser में checkout पूरा करें

checkout_url एक hosted Stripe Checkout page है। यह इस पूरे flow का इकलौता step है जिसे browser चाहिए, और यह किसी व्यक्ति का browser होना ज़रूरी नहीं: कोई agent इसे अपने ही automation से चला सकता है (card fields भरना, submit करना, redirect follow करना)। Hushscript कभी card details नहीं देखता, किसी भी तरह से; Stripe देखता है। इसे पूरा करने और फिर claim करने के लिए window 30 मिनट की है, ऊपर वाला expires_at

जो signup paid हो जाता है पर कभी claim नहीं होता, उसे एक hourly sweep अपने आप refund कर देता है, उस 30 मिनट की window बंद होने के करीब एक घंटे बाद। refund पूरा होता है, क्योंकि minutes सिर्फ़ claim के समय ही किसी balance में credit होते हैं, इसलिए किसी unclaimed signup के पास consume करने के लिए कभी कुछ था ही नहीं।

Account claim करें

POST /v1/agent/accounts/{signup_id}/claim एक paid, unclaimed signup को एक call में एक असली account में बदल देता है।

curl -X POST https://api.hushscript.com/v1/agent/accounts/hsr1:eu:4c3a1f9e7b2d4e6f8a0c1b2d3e4f5061/claim \
  -H "Content-Type: application/json" \
  -d '{"claim_secret": "cs_9f3d2a1b7e6c4f5a8b9d0e1f2a3b4c5d"}'
{
  "user_id": "usr_7d1a2b3c4d5e6f708192a3b4c5d6e7f8",
  "pat": "hsr1:eu:pat.k3n2j1.8f7e6d5c4b3a29180716253443526170",
  "scopes": [
    "transcripts:read",
    "transcripts:write",
    "transcribe",
    "account:read",
    "export",
    "billing",
    "pat:rotate"
  ],
  "balance_seconds": 18000
}

Claim करना single use है। यह ठीक एक account बनाता है, जिसके पीछे एक synthetic, unresolvable login identity होती है, retry होने पर भी paid pack सिर्फ़ एक बार grant करता है, और ठीक एक PAT mint करता है: ऊपर वाला pat value, जो भी सिर्फ़ एक बार दिखाई जाती है।

गलत secret, कोई अनजान signup_id, पहले से claim हो चुका signup, कोई refund हो चुका signup, और कोई expire हो चुका signup, ये सब एक जैसा ही agent_claim_invalid error देते हैं। जानबूझकर, response से caller के लिए इन में फ़र्क़ बताने का कोई तरीका नहीं है। सिर्फ़ secret के सही निकलने के बाद ही payment state सामने आती है: कोई ऐसा Checkout Session जो अभी settle नहीं हुआ, इसके बजाय wrong_state देता है।

ऊपर वाला balance_seconds पूरा starting balance है। Agent accounts को न कोई welcome bonus मिलता है, न card verification से मिलने वाले मुफ़्त minutes, जैसे किसी व्यक्ति के पहले account को मिलते हैं; वे सिर्फ़ उस pack से शुरू होते हैं जो उन्होंने खरीदा। यह जानबूझकर है, कोई gap नहीं: account के exist करने से पहले ही इसका payment हो चुका था।

ज़्यादा minutes खरीदें

यहां से account किसी भी दूसरे account की तरह behave करता है, उसी /v1/ surface पर जिसे /developers पूरी तरह document करता है।

curl -X POST https://api.hushscript.com/v1/billing/purchase \
  -H "Authorization: Bearer hsr1:eu:pat.k3n2j1.8f7e6d5c4b3a29180716253443526170" \
  -H "Content-Type: application/json" \
  -d '{
    "pack": "300min",
    "quick_payment_method_id": "pm_1PqR2sT3uV4wX5yZ",
    "idempotency_key": "purchase-2026-09-11-01"
  }'
{
  "balance_seconds": 36000
}

इसके लिए billing scope चाहिए, जो ऊपर वाला claim response पहले ही दे चुका है, और यह card-saving route के साथ एक ज़्यादा tight 60 requests प्रति मिनट share करता है, उस Stripe call से पहले जो इनमें से कोई भी करता है।

कोई नया account क्या खरीद सकता है

Pack size settled payments की age पर unlock होती है, account कितना ख़र्च करता है उस पर नहीं। कोई purchase अगली tier की तरफ़ तभी गिना जाता है जब वह अपनी ही payment date से 7 दिन आगे निकल चुका हो, इसलिए कोई बिल्कुल नया account जल्दी खरीदारी करके बड़े packs तक नहीं पहुंच सकता।

7 दिन आगे निकल चुके settled payments जो packs यह खरीद सकता है
अभी तक कुछ नहीं, एक fresh claim भी 45min, 300min
कम से कम 45 मिनट के बराबर 900min, 1800min जोड़े
कम से कम 15 घंटे के बराबर 6000min जोड़ता है

कोई मना की गई purchase blind fail होने के बजाय details.allowed_packs में current set बताती है। signup call इस table की पहली row apply करती है, इसीलिए ऊपर वाला walkthrough 300min खरीदता है, कुछ बड़ा नहीं। ladder से अलग, एक rolling 24 घंटे का burn cap यह सीमित करता है कि वह balance कितनी तेज़ी से ख़र्च हो सकता है जो अभी dispute window से आगे नहीं निकला।

Transcribe करें

Upload करना और transcribe करना किसी भी दूसरे account जैसा ही multipart flow है।

curl -X POST https://api.hushscript.com/v1/uploads \
  -H "Authorization: Bearer hsr1:eu:pat.k3n2j1.8f7e6d5c4b3a29180716253443526170" \
  -H "Content-Type: application/json" \
  -d '{
    "size_bytes": 48213504,
    "duration_seconds": 1860,
    "title": "weekly-standup-2026-09-11",
    "idempotency_key": "upload-2026-09-11-01"
  }'
{
  "job_id": "job_3a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d",
  "part_urls": [
    { "n": 1, "url": "https://r2.hushscript.com/uploads/job_3a2b1c0d.../part-1?X-Amz-Signature=..." }
  ]
}

हर part को उसके presigned URL पर PUT करें, फिर भेजे गए हर part के n और etag के साथ उसी job के /complete पर POST करें। फिर job को poll करें:

curl https://api.hushscript.com/v1/jobs/job_3a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d \
  -H "Authorization: Bearer hsr1:eu:pat.k3n2j1.8f7e6d5c4b3a29180716253443526170"
{
  "id": "job_3a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d",
  "state": "done",
  "transcript_id": "trs_6f5e4d3c2b1a0908f7e6d5c4b3a29180"
}
curl https://api.hushscript.com/v1/transcripts/trs_6f5e4d3c2b1a0908f7e6d5c4b3a29180 \
  -H "Authorization: Bearer hsr1:eu:pat.k3n2j1.8f7e6d5c4b3a29180716253443526170"
{
  "id": "trs_6f5e4d3c2b1a0908f7e6d5c4b3a29180",
  "language": "en",
  "duration_seconds": 1860,
  "body": "..."
}

Credential rotate करें

किसी machine account का कोई password नहीं होता और कोई usable mailbox नहीं होता, इसलिए अगर कोई PAT leak हो जाए या बस बदलना पड़े, तो कोई “forgot your password” path नहीं है। Rotation ही वह path है।

curl -X POST https://api.hushscript.com/v1/agent/credentials/rotate \
  -H "Authorization: Bearer hsr1:eu:pat.k3n2j1.8f7e6d5c4b3a29180716253443526170"
{
  "pat": "hsr1:eu:pat.p9q8r7.1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d",
  "pat_id": "p9q8r7",
  "scopes": [
    "transcripts:read",
    "transcripts:write",
    "transcribe",
    "account:read",
    "export",
    "billing",
    "pat:rotate"
  ],
  "expires_at": null
}

इस call को कोई body नहीं चाहिए। यह atomically एक successor mint करता है और वह token revoke कर देता है जिसने request को authenticate किया था, इसलिए पुराना PAT उसके साथ की गई अगली ही call पर fail होता है। successor predecessor के scopes, billing permission, name, client label, और expiry policy रखता है। यह route सिर्फ़ caller के अपने token को छूता है: यह account के किसी और credential को list, mint, या revoke नहीं कर सकता। यह इकलौता credential-recovery path है जो किसी machine account के पास होता है, इसलिए पुराना token discard होने से पहले rotate करें, बाद में नहीं।

Errors

Status Code Slug अर्थ
401 2000 unauthorized Bearer token missing या invalid है
403 2023 pat_scope_missing Token के पास इस call के लिए ज़रूरी scope नहीं है, या account के लिए billing off है
403 4021 pat_purchase_requires_app कोई saved card नहीं बताया गया था, या charge decline हो गया; कुछ भी charge नहीं हुआ
403 4023 pat_purchase_requires_authentication Card issuer एक ऐसा challenge चाहता है जो caller पूरा नहीं कर सकता; card खुद ठीक है
402 3001 insufficient_balance Job को admit करने के लिए पर्याप्त balance नहीं है
429 5000 rate_limited बहुत ज़्यादा requests; Retry-After का इंतज़ार करें

ये चार खासतौर पर agent accounts के लिए हैं और किसी human account पर कभी नहीं आतीं:

Status Code Slug अर्थ
409 4035 agent_signup_pending इस contact_email के लिए एक signup अभी भी open है। उसके claim, refund, या expire होने का इंतज़ार करें, या कोई दूसरा address use करें
401 4036 agent_claim_invalid गलत secret, अनजान signup, पहले से claim हो चुका, refund हो चुका, या expire हो चुका। जानबूझकर identical
403 4037 agent_pack_locked इस account की tier अभी वह pack allow नहीं करती। details.allowed_packs carry करता है; उनमें से किसी एक के साथ retry करें
429 4038 agent_purchase_capped पिछले 24 घंटों में 3 purchases, paid या declined। हर उस credential में गिना जाता है जो account के पास कभी रहा, प्रति account, इसलिए rotate करने से यह reset नहीं होता। details.retry_after_seconds carry करता है

एक बार claim secret के सही निकल जाने के बाद, कोई unpaid Checkout Session agent_claim_invalid के बजाय wrong_state (4001) देता है। पूरा catalog OpenAPI document में है।

Limits

Calls 1,200 प्रति मिनट तक सीमित हैं। किसी agent account के लिए यह budget account का होता है, individual token का नहीं: rotation lineage का हर credential उसी एक budget पर draw करता है, इसलिए किसी PAT को rotate करने से successor को कोई नया allowance नहीं मिलता। दो billing writes, card save करना और pack खरीदना, एक ज़्यादा tight 60 प्रति मिनट प्रति account share करते हैं, उस Stripe call से पहले जो इनमें से कोई भी करता है। ऊपर वाला 24 घंटे का purchase cap भी इसी तरह गिना जाता है, प्रति credential के बजाय प्रति account।

और जानें

यह page account lifecycle cover करता है: उसे खोलना, fund करना, और उसका credential चालू रखना। account फिर जो भी कर सकता है, उसके लिए REST API देखें, जिसमें पूरा OpenAPI document भी शामिल है, या MCP server देखें, raw HTTP के बजाय tools पर वही account पाने के लिए।

Transcribing शुरू करें – 30 मिनट try करने के लिए

एक temporary $1 hold आपके card को confirm करता है और तुरंत release हो जाता है — आपसे कभी charge नहीं लिया जाता, और आपके 30 free minutes तुरंत मिल जाते हैं।

शुरू करें – 30 मुफ़्त मिनट