{"_id":"@codeforge-main/ashby-sdk","_rev":"4-4ac167ef752fdf550ea85e04a9967619","name":"@codeforge-main/ashby-sdk","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.0":{"name":"@codeforge-main/ashby-sdk","version":"1.0.0","author":{"name":"codeforge"},"_id":"@codeforge-main/ashby-sdk@1.0.0","maintainers":[{"name":"codeforge-main","email":"codeforge.info@gmail.com"}],"dist":{"shasum":"e69273adbcba5b27da43365a86ed0ebb088ff9bf","tarball":"https://registry.npmjs.org/@codeforge-main/ashby-sdk/-/ashby-sdk-1.0.0.tgz","fileCount":6114,"integrity":"sha512-Vj28r5bTr6wj4LDP9Qjjgt8V9JAqWXMDSV1xLSrPib+gmi9YIke7EpI0/rwJORor0EedVf8lEOuXxSbfOBmsQg==","signatures":[{"sig":"MEUCIQC0JW66ro80ISXHQs2B+4hMkj4dPzHmv2qKdPG6hCpYjAIgMdyTbrn3Glbh0bwc3SRGpmI7mJfmi4notZ2I27VOPng=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4192226},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc"},"_npmUser":{"name":"codeforge-main","email":"codeforge.info@gmail.com"},"_npmVersion":"10.9.8","description":"> **Unofficial SDK** — generated from Ashby sdk's public OpenAPI specification by the [CodeForge platform](https://www.code-forge.net). Not affiliated with or endorsed by Ashby sdk.","directories":{},"_nodeVersion":"22.23.2","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/ashby-sdk_1.0.0_1788092746237_0.00450718065618938","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@codeforge-main/ashby-sdk","version":"1.1.0","author":{"name":"codeforge"},"_id":"@codeforge-main/ashby-sdk@1.1.0","maintainers":[{"name":"codeforge-main","email":"codeforge.info@gmail.com"}],"dist":{"shasum":"3438f26802b30883bb7e44cfe7468a7ad2b41531","tarball":"https://registry.npmjs.org/@codeforge-main/ashby-sdk/-/ashby-sdk-1.1.0.tgz","fileCount":6686,"integrity":"sha512-RjmGN6ImhYLOEmuvwRUTnNsuBafXYbOzPtYjSfpcoCGAMB4CaYFDLpmH+PR3wkdENFRj6A8azYzXBMNgUUtqVw==","signatures":[{"sig":"MEYCIQC2eMiXIUl3FUc3wmFubafkeNo/jna/yx6ynDJu3/J1hwIhAIRLblWN2uDYIz9jZkVwwFUwgVW5AdH5TiQbwynQlG3M","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4605309},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc"},"_npmUser":{"name":"codeforge-main","email":"codeforge.info@gmail.com"},"_npmVersion":"10.9.8","description":"> **Unofficial SDK** — generated from Ashby sdk's public OpenAPI specification by the [CodeForge platform](https://www.code-forge.net). Not affiliated with or endorsed by Ashby sdk.","directories":{},"_nodeVersion":"22.23.2","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/ashby-sdk_1.1.0_1788739348356_0.17996994796749877","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@codeforge-main/ashby-sdk","version":"1.2.0","author":{"name":"codeforge"},"_id":"@codeforge-main/ashby-sdk@1.2.0","maintainers":[{"name":"codeforge-main","email":"codeforge.info@gmail.com"}],"dist":{"shasum":"2630a3c4c9749e96d601be12f0d02d9f7536b4ca","tarball":"https://registry.npmjs.org/@codeforge-main/ashby-sdk/-/ashby-sdk-1.2.0.tgz","fileCount":6686,"integrity":"sha512-bK1sEHH7tSbXo9YlSzyRLvv6sCRQpjlQVPflQKTMWFWkEOfsIryRZIKNjRbkO/9cuEppb1guLgaFRqs8CAG0TQ==","signatures":[{"sig":"MEUCIE2TKVZuanc7euRsMmTQFxzHbuz77/0wXZHKzUY+Ks1XAiEAsD2FhlZKF8vhwOh+1gHMWkRxsY1vfe92tLmeU8c9igo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4605309},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc"},"_npmUser":{"name":"codeforge-main","email":"codeforge.info@gmail.com"},"_npmVersion":"10.9.8","description":"> **Unofficial SDK** — generated from Ashby sdk's public OpenAPI specification by the [CodeForge platform](https://www.code-forge.net). Not affiliated with or endorsed by Ashby sdk.","directories":{},"_nodeVersion":"22.23.2","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/ashby-sdk_1.2.0_1788825886247_0.10716517601251918","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@codeforge-main/ashby-sdk","version":"1.3.0","description":"> **Unofficial SDK** — generated from Ashby sdk's public OpenAPI specification by the [CodeForge platform](https://www.code-forge.net). Not affiliated with or endorsed by Ashby sdk.","author":{"name":"codeforge"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"scripts":{"build":"tsc"},"engines":{"node":">=20"},"dependencies":{},"devDependencies":{"typescript":"^5.9.2"},"_id":"@codeforge-main/ashby-sdk@1.3.0","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-CguMel+vP6R94XadD5c+7z9Vmn2DNNQyNOs2aEerJJtr2aH9kHc660wkrWTA4ozoKicjuRpyKvKdYdkfcr41SQ==","shasum":"2241de6cbdf81b5387acb25358e9d4e2745f192e","tarball":"https://registry.npmjs.org/@codeforge-main/ashby-sdk/-/ashby-sdk-1.3.0.tgz","fileCount":6686,"unpackedSize":4605309,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICHsLd/hhpV6e8eMv0s4lva7xkWTmVal9OHdriaTNVkaAiBVgCVSAITZ/h286+Jkz0pbqaPZLL1QosUst9iUqhdjRQ=="}]},"_npmUser":{"name":"codeforge-main","email":"codeforge.info@gmail.com"},"directories":{},"maintainers":[{"name":"codeforge-main","email":"codeforge.info@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ashby-sdk_1.3.0_1788912268201_0.17743635289363158"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-30T12:25:46.046Z","modified":"2026-09-09T00:04:28.566Z","1.0.0":"2026-08-30T12:25:46.409Z","1.1.0":"2026-09-07T00:02:28.619Z","1.2.0":"2026-09-08T00:04:46.465Z","1.3.0":"2026-09-09T00:04:28.398Z"},"author":{"name":"codeforge"},"description":"> **Unofficial SDK** — generated from Ashby sdk's public OpenAPI specification by the [CodeForge platform](https://www.code-forge.net). Not affiliated with or endorsed by Ashby sdk.","maintainers":[{"name":"codeforge-main","email":"codeforge.info@gmail.com"}],"readme":"> **Unofficial SDK** — generated from Ashby sdk's public OpenAPI specification by the [CodeForge platform](https://www.code-forge.net). Not affiliated with or endorsed by Ashby sdk.\n\n---\n\n# @codeforge-main/ashby-sdk\n\nVersion 1.3.0\n\nFull generator behavior documentation: https://www.code-forge.net/docs\n\nRequires Node 20+ (or a modern browser) — the generated transport uses `AbortSignal.any`\nand `AbortSignal.timeout`.\n\n## Install\n\n```bash\nnpm install @codeforge-main/ashby-sdk\n```\n\n```bash\nyarn add @codeforge-main/ashby-sdk\n```\n\n```bash\npnpm add @codeforge-main/ashby-sdk\n```\n\n## Usage\n\nThis SDK is exposed as a single, fully typed client class. Construct it once with your\nshared configuration and call any API operation as a method — each returns the deserialized\nresponse alongside HTTP metadata.\n\n```ts\nimport { AshbyClient } from '@codeforge-main/ashby-sdk'\n\nconst client = new AshbyClient({\n\tbaseUrl: 'https://api.ashbyhq.com',\n\tauth: { type: 'basic', username: 'YOUR_API_USERNAME', password: 'YOUR_API_PASSWORD' },\n})\n\nconst response = await client.applicationHiringTeamRoleList()\n\nconsole.log(response.status) // HTTP status code\nconsole.log(response.data)   // typed as ApplicationHiringTeamRoleListResponse_200\n```\n\nThe client holds the shared configuration (`baseUrl`, `auth`, `retry`, `hooks`).\nEach method accepts a per-call context extending `HttpClientContext` — supply the\noperation-specific `payload` / `parameters`, and override any shared field per call.\n\n### Available operations\n\n- `apiKeyInfo`\n- `applicationaddhiringteammember`\n- `applicationChangeSource`\n- `applicationChangeStage`\n- `applicationCreate`\n- `applicationformsubmit`\n- `applicationHiringTeamRoleList`\n- `applicationInfo`\n- `applicationList`\n- `applicationListCriteriaEvaluations`\n- `applicationListHistory`\n- `applicationremovehiringteammember`\n- `applicationTransfer`\n- `applicationUpdate`\n- `applicationUpdateHistory`\n- `hiringteamaddmember`\n- `hiringteamremovemember`\n- `applicationFeedbackList`\n- `applicationfeedbackrequestcreate`\n- `applicationfeedbacksubmit`\n- `feedbackFormDefinitionInfo`\n- `feedbackFormDefinitionList`\n- `surveyFormDefinitionInfo`\n- `surveyFormDefinitionList`\n- `surveyRequestCreate`\n- `surveyRequestList`\n- `surveySubmissionCreate`\n- `surveySubmissionList`\n- `approvalList`\n- `approvalDefinitionUpdate`\n- `archivereasonlist`\n- `brandList`\n- `closeReasonList`\n- `communicationTemplateList`\n- `departmentcreate`\n- `departmentarchive`\n- `departmentrestore`\n- `departmentInfo`\n- `departmentList`\n- `departmentmove`\n- `departmentupdate`\n- `hiringteamrolelist`\n- `locationarchive`\n- `locationcreate`\n- `locationInfo`\n- `locationlist`\n- `locationmove`\n- `locationrestore`\n- `locationupdateaddress`\n- `locationupdateName`\n- `locationupdateexternalname`\n- `locationupdateworkplacetype`\n- `referralCreate`\n- `referralFormInfo`\n- `sourcelist`\n- `sourcetrackinglinklist`\n- `userInfo`\n- `userList`\n- `userSearch`\n- `userInterviewerSettings`\n- `userUpdateInterviewerSettings`\n- `userCreateInterviewerPause`\n- `userListInterviewerPauses`\n- `userDeleteInterviewerPause`\n- `userSetCustomFieldValue`\n- `userSetCustomFieldValues`\n- `assessmentAddCompletedToCandidate`\n- `assessmentStart`\n- `assessmentList`\n- `assessmentUpdate`\n- `assessmentCancel`\n- `assessmentPartnerCustomFieldList`\n- `candidateAddEmailMessage`\n- `candidateaddproject`\n- `candidateAddTag`\n- `candidateAnonymize`\n- `candidateCreate`\n- `candidateCreateNote`\n- `candidateInfo`\n- `candidateList`\n- `candidateListClientInfo`\n- `candidateListFraudChecks`\n- `candidateSetFraudStatus`\n- `candidateListNotes`\n- `candidateListProjects`\n- `candidateremoveproject`\n- `candidateRemoveTag`\n- `candidateSearch`\n- `candidateUpdate`\n- `candidateUploadFile`\n- `candidateUploadResume`\n- `candidateTagArchive`\n- `candidatetagcreate`\n- `candidateTagList`\n- `projectinfo`\n- `projectlist`\n- `projectSearch`\n- `customFieldCreate`\n- `customFieldInfo`\n- `customFieldList`\n- `customFieldSetValue`\n- `customFieldSetValues`\n- `customFieldUpdateSelectableValues`\n- `fileInfo`\n- `fileCreateFileUploadHandle`\n- `interviewInfo`\n- `interviewList`\n- `interviewBriefingInfo`\n- `interviewEventList`\n- `interviewPlanList`\n- `interviewScheduleCancel`\n- `interviewScheduleCreate`\n- `interviewScheduleList`\n- `interviewScheduleUpdate`\n- `interviewStageList`\n- `interviewStageInfo`\n- `interviewStageGroupList`\n- `interviewerPoolList`\n- `interviewerPoolInfo`\n- `interviewerPoolCreate`\n- `interviewerPoolUpdate`\n- `interviewerPoolArchive`\n- `interviewerPoolRestore`\n- `interviewerPoolAddUser`\n- `interviewerPoolRemoveUser`\n- `notetakerTranscriptInfo`\n- `jobCreate`\n- `jobInfo`\n- `jobList`\n- `jobSetStatus`\n- `jobUpdate`\n- `jobUpdateCompensation`\n- `jobSearch`\n- `jobBoardList`\n- `jobInterviewPlanInfo`\n- `jobPostingInfo`\n- `jobPostingList`\n- `jobTemplateList`\n- `jobPostingUpdate`\n- `openinginfo`\n- `openinglist`\n- `openingsearch`\n- `openingcreate`\n- `openingaddjob`\n- `openingremovejob`\n- `openingaddlocation`\n- `openingremovelocation`\n- `openingsetopeningstate`\n- `openingsetarchived`\n- `openingupdate`\n- `offerApprove`\n- `offerCreate`\n- `offerInfo`\n- `offerList`\n- `offerStart`\n- `offerStartApprovalProcess`\n- `offerUpdate`\n- `offerProcessStart`\n- `reportGenerate`\n- `reportSynchronous`\n- `webhookcreate`\n- `webhookInfo`\n- `webhookupdate`\n- `webhookdelete`\n\n## Transport\n\nEvery request goes through the same transport: a per-attempt timeout, cancellation via\n`AbortSignal`, and an optional custom `fetch`.\n\n```ts\nconst client = new AshbyClient({\n\ttimeoutMs: 10_000, // default 60000ms, applied fresh to each retry attempt\n})\n\nconst controller = new AbortController()\nsetTimeout(() => controller.abort(), 5_000)\n\nawait client.applicationHiringTeamRoleList({ signal: controller.signal })\n```\n\n`timeoutMs` is per attempt, not per call — a request that times out and then retries gets a\nfresh timer on each attempt, and throws `TimeoutError` if every attempt times out. A\ncaller-triggered `AbortSignal` is never retried; a timeout is, under the same rule as a\nnetwork error. Streaming operations ignore `timeoutMs` and support only caller\ncancellation.\n\n### Custom fetch\n\nPass a `fetch` implementation to route every request through it — a proxy included, via\n[undici](https://github.com/nodejs/undici)'s `ProxyAgent`:\n\n```ts\nimport { ProxyAgent, fetch as undiciFetch } from 'undici'\n\nconst dispatcher = new ProxyAgent('http://localhost:8080')\nconst client = new AshbyClient({\n\tfetch: (url, init) => undiciFetch(url, { ...init, dispatcher }),\n})\n```\n\n`hooks.makeRequest` wins when both are set — it replaces the whole transport, and `fetch`\nis read only by the built-in one.\n\n### Raw requests\n\nAn endpoint the generated operations don’t model is still reachable, through the same\nauth, retries, timeout and hooks:\n\n```ts\nconst { data, response } = await client.get('/v1/status')\nawait client.post('/v1/events', { body: { type: 'ping' } })\n\n// the general form, for a method the verb helpers don’t cover:\nawait client.request({ method: 'OPTIONS', path: '/v1/status' })\n```\n\n`path` is joined onto `baseUrl` with the `URL` constructor — a leading `/` resolves from\nthe origin (dropping any path segment `baseUrl` itself carries); a relative segment\nappends after it. A plain-object `body` is JSON-serialized with a JSON `Content-Type`;\npass an already-encoded value (a `string`, `FormData`, ...) to send anything else.\n`data` parses by the response’s own `Content-Type`: JSON via `.json()`, a textual type\nvia `.text()`, anything else as a `Blob`.\n\n## Webhooks\n\nThis SDK implements the [Standard Webhooks](https://www.standardwebhooks.com/) convention:\nHMAC-SHA256 over `id.timestamp.payload`, computed from the raw request body. Verify a\ndelivery before parsing it — a body that fails verification should never be trusted.\n\n```ts\nimport { verifyWebhook, WebhookVerificationError } from '@codeforge-main/ashby-sdk'\n\nconst secret = process.env.WEBHOOK_SECRET\nif (!secret) {\n\tthrow new Error('WEBHOOK_SECRET is not set')\n}\n\ntry {\n\tawait verifyWebhook({\n\t\tpayload: rawBody, // the raw request body, exactly as received — do not re-serialize it\n\t\theaders: request.headers,\n\t\tsecret, // the 'whsec_' form your provider issued, or a raw string\n\t})\n} catch (error) {\n\tif (error instanceof WebhookVerificationError) {\n\t\t// reject the delivery — do not process an unverified payload\n\t}\n\tthrow error\n}\n\nconst event = JSON.parse(rawBody)\n```\n\nA verified body parses to one member of the `WebhookPayload` union — narrow `event` before\nreading its fields:\n\n```ts\nimport type { WebhookPayload } from '@codeforge-main/ashby-sdk'\n\nconst typedEvent = event as WebhookPayload\n// if ('someField' in typedEvent) { ... }\n```\n\nPayload types: `ApplicationSubmitWebhookPayload`, `ApplicationUpdateWebhookPayload`, `CandidateHireWebhookPayload`, `CandidateStageChangeWebhookPayload`, `CandidateDeleteWebhookPayload`, `CandidateMergeWebhookPayload`, `InterviewPlanTransitionWebhookPayload`, `InterviewScheduleCreateWebhookPayload`, `InterviewScheduleUpdateWebhookPayload`, `JobCreateWebhookPayload`, `JobUpdateWebhookPayload`, `JobPostingUpdateWebhookPayload`, `JobPostingPublishWebhookPayload`, `JobPostingUnpublishWebhookPayload`, `OfferCreateWebhookPayload`, `OfferDeleteWebhookPayload`, `OfferUpdateWebhookPayload`, `OpeningCreateWebhookPayload`, `PushToHrisWebhookPayload`, `PingWebhookPayload`, `SignatureRequestUpdateWebhookPayload`, `SurveySubmitWebhookPayload`.\n\n## Errors\n\nA non-OK response throws one of these `HttpError` subclasses, picked by an exact status\nmatch first, then any `>= 500` response as `InternalServerError`, then plain `HttpError`\nfor anything else. Every one of them is also an `instanceof HttpError`, so a catch-all\nkeeps working alongside a narrower check.\n\n| Class | Status |\n| --- | --- |\n| `BadRequestError` | 400 |\n| `AuthenticationError` | 401 |\n| `PermissionDeniedError` | 403 |\n| `NotFoundError` | 404 |\n| `ConflictError` | 409 |\n| `UnprocessableEntityError` | 422 |\n| `RateLimitError` | 429 |\n| `InternalServerError` | any `>= 500` |\n\n```ts\nimport { HttpError, NotFoundError } from '@codeforge-main/ashby-sdk'\n\ntry {\n\tawait client.applicationHiringTeamRoleList()\n} catch (error) {\n\tif (error instanceof NotFoundError) {\n\t\t// error.status is narrowed to 404\n\t} else if (error instanceof HttpError) {\n\t\t// any other non-OK response — error.status is number\n\t}\n\tthrow error\n}\n```\n\n## Validation\n\nEvery model is plain data — the shape it has on the wire. This SDK carries no schemas and\nno runtime dependency, so nothing is validated for you: `response.data` is the parsed body\ntyped as the operation declares it.\n\nRegenerate the SDK with validation schemas turned on to get a zod schema exported beside\nevery model type.\n\n> Generated by CodeForge v0.86.9.\n","readmeFilename":"README.md"}