{"id":39496093,"url":"https://github.com/merge-api/merge-node-client","last_synced_at":"2026-02-20T21:24:38.632Z","repository":{"id":185913637,"uuid":"668884362","full_name":"merge-api/merge-node-client","owner":"merge-api","description":"The Node SDK for accessing various Merge Unified APIs","archived":false,"fork":false,"pushed_at":"2026-02-19T21:36:23.000Z","size":11106,"stargazers_count":24,"open_issues_count":49,"forks_count":9,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-02-19T21:55:09.338Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/merge-api.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-07-20T20:29:22.000Z","updated_at":"2026-02-10T16:20:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"f51edc8c-e484-4698-a5f6-30a6ad255ee7","html_url":"https://github.com/merge-api/merge-node-client","commit_stats":null,"previous_names":["merge-api/merge-node-client"],"tags_count":41,"template":false,"template_full_name":null,"purl":"pkg:github/merge-api/merge-node-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merge-api%2Fmerge-node-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merge-api%2Fmerge-node-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merge-api%2Fmerge-node-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merge-api%2Fmerge-node-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/merge-api","download_url":"https://codeload.github.com/merge-api/merge-node-client/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merge-api%2Fmerge-node-client/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29665147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T19:49:36.704Z","status":"ssl_error","status_checked_at":"2026-02-20T19:44:05.372Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-18T05:42:29.862Z","updated_at":"2026-02-20T21:24:38.568Z","avatar_url":"https://github.com/merge-api.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Merge Node Library\n\n[![npm shield](https://img.shields.io/npm/v/@mergeapi/merge-node-client)](https://www.npmjs.com/package/@mergeapi/merge-node-client)\n\nThe Merge Node.js library provides access to the Merge API from JavaScript/TypeScript.\n\n## Documentation\n\nAPI reference documentation is available [here](https://docs.merge.dev/).\n\n## Installation\n\n```\nnpm install --save @mergeapi/merge-node-client\n# or\nyarn add @mergeapi/merge-node-client\n```\n\n## Instantiation\n\n```typescript\nimport { MergeClient } from '@mergeapi/merge-node-client';\n\nconst merge = new MergeClient({\n  apiKey: 'YOUR_API_KEY',\n  accountToken: 'YOUR_ACCOUNT_TOKEN',\n});\n```\n\n## Categories\n\nThis SDK contains the ATS, HRIS, CRM, Ticketing, Accounting, and File Storage categories. Even if you do not plan on using more than one Merge API category right now, the SDK provides upgrade-flexibility in case you find new Merge API categories useful in the future.\n\nEach category is namespaced:\n\n```typescript\n\nconst merge = new MergeClient({\n  apiKey: 'YOUR_API_KEY',\n  accountToken: 'YOUR_ACCOUNT_TOKEN',\n});\n\nmerge.ats. // APIs specific to the ATS Category\n\nmerge.hris. // APIs specific to the HRIS Category\n```\n\n## Usage\n\nBelow are code snippets of how you can use the Node SDK.\n\n### Create Link Token\n\n```typescript\nimport { MergeClient, Merge } from '@mergeapi/merge-node-client';\n\nconst merge = new MergeClient({\n  apiKey: 'YOUR_API_KEY',\n  // `accountToken` may be omitted if necessary (e.g., during the initial Link session)\n  accountToken: 'YOUR_ACCOUNT_TOKEN', \n});\n\nconst linkTokenResponse = await merge.ats.linkToken.create({\n    endUserEmailAddress: \"john.smith@gmail.com\",\n    endUserOrganizationName: \"acme\",\n    endUserOriginId: \"1234\",\n    categories: [Merge.ats.CategoriesEnum.Ats],\n    linkExpiryMins: 30,\n});\n\nconsole.log(\"Created link token\", linkTokenResponse.linkToken)\n```\n\n### Retrieve Account Token Using Public Token\n\n```ts\nimport { MergeClient, Merge } from '@mergeapi/merge-node-client';\n\nconst merge = new MergeClient({\n  apiKey: 'YOUR_API_KEY'\n});\n\nconst accountTokenResponse = await merge.ats.accountToken.retrieve(publicToken)\n\nconsole.log(\"Retrieved account token\", accountTokenResponse.accountToken)\n```\n\n### Get Employee\n\n```typescript\nimport { MergeClient, Merge } from '@mergeapi/merge-node-client';\n\nconst merge = new MergeClient({\n  apiKey: 'YOUR_API_KEY',\n  accountToken: 'YOUR_ACCOUNT_TOKEN',\n});\n\n\nemployee = await merge.hris.employees.retrieve(\"0958cbc6-6040-430a-848e-aafacbadf4ae\")\n```\n\n### Get Candidate\n\n```typescript\nimport { MergeClient, Merge } from '@mergeapi/merge-node-client';\n\nconst merge = new MergeClient({\n  apiKey: 'YOUR_API_KEY',\n  accountToken: 'YOUR_ACCOUNT_TOKEN',\n});\n\n\ncandidate = await merge.ats.candidates.retrieve(\n  \"521b18c2-4d01-4297-b451-19858d07c133\"\n)\n```\n\n### Filter Candidate\n\n```typescript\nimport { MergeClient, Merge } from '@mergeapi/merge-node-client';\n\nconst merge = new MergeClient({\n  apiKey: 'YOUR_API_KEY',\n  accountToken: 'YOUR_ACCOUNT_TOKEN',\n});\n\nconst candidatesResponse = await merge.ats.candidates.list({\n  createdAfter: \"2030-01-01\"\n})\n\nconsole.log(candidatesResponse.results)\n```\n\n### Get Contact\n\n```typescript\nimport { MergeClient, Merge } from '@mergeapi/merge-node-client';\n\nconst merge = new MergeClient({\n  apiKey: 'YOUR_API_KEY',\n  accountToken: 'YOUR_ACCOUNT_TOKEN',\n});\n\ncontact = await merge.accounting.contacts.retrieve(\n  \"c640b80b-fac9-409f-aa19-1f9221aec445\"\n)\n```\n\n### Create Ticket\n\n```typescript\nimport { MergeClient, Merge, TicketStatusEnum } from '@mergeapi/merge-node-client';\n\nconst merge = new MergeClient({\n  apiKey: 'YOUR_API_KEY',\n  accountToken: 'YOUR_ACCOUNT_TOKEN',\n});\n\nawait merge.ticketing.tickets.create({\n  model: {\n    name: \"Please add more integrations\",\n    assignees: [\"17a54124-287f-494d-965e-3c5b330c9a68\"],\n    creator: \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n    dueDate: \"2022-10-11T00:00:00Z\",\n    status: TicketStatusEnum.Open,\n  },\n})\n```\n\n### File Download\n\n```typescript\nimport { MergeClient, Merge } from '@mergeapi/merge-node-client';\nimport * as fs from 'fs/promises';\n\nconst merge = new MergeClient({\n  apiKey: 'YOUR_API_KEY',\n  accountToken: 'YOUR_ACCOUNT_TOKEN',\n});\n\nconst listResponse = await merge.filestorage.files.list({\n  name: \"\u003cFILE_NAME\u003e\"\n})\n\nconst file = response.results[0]\nconst localFilepath = `\u003cLOCAL_FILE_PATH\u003e/${file.name}`\n\nconst response = await merge.filestorage.files.downloadRetrieve(file.id)\nconst fileStream = fs.createWriteStream(localFilepath);\nawait stream.pipeline(response, fileStream);\n```\n\n### Pagination\n\nThe SDK may return paginated results. Endpoints that return paginated results will \ninclude a `next` and `prev` property on the response. To get the next page, you can \npass in the value of `next` to the cursor property on the request. Similarly, to \nget the previous page, you can pass in the value of `prev` to the cursor property on \nthe request. \n\nBelow is an example of iterating over all pages:\n```typescript\n\n// response contains the first page\nlet response = merge.hris.employees.list({\n  createdAfter: \"2030-01-01\",\n})\n\n// if there is a next page, load it by passing `next` to the cursor argument\nwhile (response.next != null) {\n    response = merge.hris.employees.list({\n        cursor: response.next, \n        createdAfter: \"2030-01-01\",\n    })\n}\n```\n## Contributing\n\nWhile we value open-source contributions to this SDK, this library is generated programmatically. Additions made directly\nto this library would have to be moved over to our generation code, otherwise they would be overwritten upon the next\ngenerated release. Feel free to open a PR as a proof of concept, but know that we will not be able to merge it as-is. \nWe suggest opening an issue first to discuss with us!\n\nOn the other hand, contributions to the README are always very welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerge-api%2Fmerge-node-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmerge-api%2Fmerge-node-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerge-api%2Fmerge-node-client/lists"}