{"id":25094620,"url":"https://github.com/dlenroc/node-testrail-api","last_synced_at":"2025-04-16T03:21:22.519Z","repository":{"id":39571003,"uuid":"280758831","full_name":"dlenroc/node-testrail-api","owner":"dlenroc","description":"An API wrapper for TestRail with error handling and typing.","archived":false,"fork":false,"pushed_at":"2023-05-10T19:58:53.000Z","size":171,"stargazers_count":16,"open_issues_count":0,"forks_count":8,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-25T10:01:56.063Z","etag":null,"topics":["client","isomorphic","testrail"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dlenroc.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2020-07-18T23:45:34.000Z","updated_at":"2024-04-17T09:40:39.000Z","dependencies_parsed_at":"2024-06-18T18:36:48.569Z","dependency_job_id":"51ae15bc-3da4-4c6d-a296-5bc4fd3932a1","html_url":"https://github.com/dlenroc/node-testrail-api","commit_stats":{"total_commits":65,"total_committers":3,"mean_commits":"21.666666666666668","dds":"0.29230769230769227","last_synced_commit":"c95f3756f63221ef2d6d7fc7c62c7e1595c50a27"},"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlenroc%2Fnode-testrail-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlenroc%2Fnode-testrail-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlenroc%2Fnode-testrail-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlenroc%2Fnode-testrail-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dlenroc","download_url":"https://codeload.github.com/dlenroc/node-testrail-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248752615,"owners_count":21156125,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["client","isomorphic","testrail"],"created_at":"2025-02-07T15:28:23.716Z","updated_at":"2025-04-16T03:21:22.502Z","avatar_url":"https://github.com/dlenroc.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @dlenroc/testrail · [![NPM Version](https://img.shields.io/npm/v/@dlenroc/testrail)](https://www.npmjs.com/package/@dlenroc/testrail) [![Supported Node.js version](https://img.shields.io/node/v/@dlenroc/testrail)](https://github.com/dlenroc/node-testrail-api/actions?query=workflow%3A\"Node.js+CI\")\n\n## Installation\n\n```bash\nnpm install @dlenroc/testrail --save\n```\n\n## Example\n\n```typescript\n// import TestRail from '@dlenroc/testrail';\n// const TestRail = require('@dlenroc/testrail');\n\nconst api = new TestRail({\n    host: 'https://{organization}.testrail.net',\n    username: '{username}',\n    password: '{token/password}',\n});\n\nconst projects = await api.getProjects();\n\nconsole.log(projects);\n```\n\n## APIs\n\n### Attachments\n\n```typescript\naddAttachmentToCase(caseId: number, payload: AddAttachment): Promise\u003cCreatedAttachment\u003e\n```\n\n```typescript\naddAttachmentToPlan(planId: number, payload: AddAttachment): Promise\u003cCreatedAttachment\u003e\n```\n\n```typescript\naddAttachmentToPlanEntry(planId: number, entryId: string, payload: AddAttachment): Promise\u003cCreatedAttachment\u003e\n```\n\n```typescript\naddAttachmentToResult(resultId: number, payload: AddAttachment): Promise\u003cCreatedAttachment\u003e\n```\n\n```typescript\naddAttachmentToRun(runId: number, payload: AddAttachment): Promise\u003cCreatedAttachment\u003e\n```\n\n```typescript\ngetAttachmentsForCase(caseId: number, filters?: Pagination): Promise\u003cAttachmentForCase[]\u003e\n```\n\n```typescript\ngetAttachmentsForPlan(planId: number, filters?: Pagination): Promise\u003cAttachmentForPlan[]\u003e\n```\n\n```typescript\ngetAttachmentsForPlanEntry(planId: number, entryId: string): Promise\u003cAttachmentForPlanEntry[]\u003e\n```\n\n```typescript\ngetAttachmentsForRun(runId: number, filters?: Pagination): Promise\u003cAttachmentForRun[]\u003e\n```\n\n```typescript\ngetAttachmentsForTest(testId: number): Promise\u003cAttachmentForTest[]\u003e\n```\n\n```typescript\ngetAttachment(attachmentId: string): Promise\u003cBlob\u003e\n```\n\n```typescript\ndeleteAttachment(attachmentId: string): Promise\u003cvoid\u003e\n```\n\n### BDDs\n\n```typescript\ngetBdd(caseId: number): Promise\u003cBlob\u003e\n```\n\n```typescript\naddBdd(sectionId: number, payload: AddAttachment): Promise\u003cCase\u003e\n```\n\n### Cases\n\n```typescript\ngetCase(caseId: number): Promise\u003cCase\u003e\n```\n\n```typescript\ngetCases(projectId: number, filters?: CaseFilters): Promise\u003cCase[]\u003e\n```\n\n```typescript\ngetHistoryForCase(caseId: number, filters?: Pagination): Promise\u003cCaseHistory[]\u003e\n```\n\n```typescript\naddCase(sectionId: number, payload: AddCase): Promise\u003cCase\u003e\n```\n\n```typescript\ncopyCasesToSection(sectionId: number, payload: CopyCasesToSection): Promise\u003cvoid\u003e\n```\n\n```typescript\nupdateCase(caseId: number, payload: UpdateCase): Promise\u003cCase\u003e\n```\n\n```typescript\nupdateCases(suiteId: number, payload: UpdateCases): Promise\u003cvoid\u003e\n```\n\n```typescript\nmoveCasesToSection(sectionId: number, payload: MoveCasesToSection): Promise\u003cvoid\u003e\n```\n\n```typescript\ndeleteCase(caseId: number): Promise\u003cvoid\u003e\n```\n\n```typescript\ndeleteCases(suiteId: number, payload: DeleteCases): Promise\u003cvoid\u003e\n```\n\n### Case Fields\n\n```typescript\ngetCaseFields(): Promise\u003cCaseField[]\u003e\n```\n\n```typescript\naddCaseField(payload: AddCaseField): Promise\u003cCaseField\u003e\n```\n\n### Case Types\n\n```typescript\ngetCaseTypes(): Promise\u003cCaseType[]\u003e\n```\n\n### Configurations\n\n```typescript\ngetConfigs(projectId: number): Promise\u003cConfig[]\u003e\n```\n\n```typescript\naddConfigGroup(projectId: number, payload: AddConfigGroup): Promise\u003cConfig\u003e\n```\n\n```typescript\naddConfig(configGroupId: number, payload: AddConfig): Promise\u003cConfigItem\u003e\n```\n\n```typescript\nupdateConfigGroup(configGroupId: number, payload: UpdateConfigGroup): Promise\u003cConfig\u003e\n```\n\n```typescript\nupdateConfig(configId: number, payload: UpdateConfig): Promise\u003cConfigItem\u003e\n```\n\n```typescript\ndeleteConfigGroup(configGroupId: number): Promise\u003cvoid\u003e\n```\n\n```typescript\ndeleteConfig(configId: number): Promise\u003cvoid\u003e\n```\n\n### Datasets\n\n```typescript\ngetDataset(datasetId: number): Promise\u003cDataset\u003e\n```\n\n```typescript\ngetDatasets(projectId: number, filters?: Pagination): Promise\u003cDataset[]\u003e\n```\n\n```typescript\naddDataset(projectId: number, payload: AddDataset): Promise\u003cGroup\u003e\n```\n\n```typescript\nupdateDataset(datasetId: number, payload: AddDataset): Promise\u003cGroup\u003e\n```\n\n```typescript\ndeleteDataset(datasetId: number): Promise\u003cvoid\u003e\n```\n\n### Groups\n\n```typecript\ngetGroup(groupId: number): Promise\u003cGroup\u003e\n```\n\n```typecript\ngetGroups(filters?: Pagination): Promise\u003cGroup[]\u003e\n```\n\n```typecript\naddGroup(payload: AddGroup): Promise\u003cGroup\u003e\n```\n\n```typecript\nupdateGroup(groupId: number, payload: AddGroup): Promise\u003cGroup\u003e\n```\n\n```typecript\ndeleteGroup(groupId: number): Promise\u003cvoid\u003e\n```\n\n### Milestones\n\n```typescript\ngetMilestone(milestoneId: number): Promise\u003cMilestone\u003e\n```\n\n```typescript\ngetMilestones(projectId: number, filters?: MilestoneFilters): Promise\u003cMilestone[]\u003e\n```\n\n```typescript\naddMilestone(projectId: number, payload: AddMilestone): Promise\u003cMilestone\u003e\n```\n\n```typescript\nupdateMilestone(milestoneId: number, payload: UpdateMilestone): Promise\u003cMilestone\u003e\n```\n\n```typescript\ndeleteMilestone(milestoneId: number): Promise\u003cvoid\u003e\n```\n\n### Roles\n\n```typescript\ngetRoles(filters?: Pagination): Promise\u003cRole[]\u003e\n```\n\n### Plans\n\n```typescript\ngetPlan(planId: number): Promise\u003cPlan\u003e\n```\n\n```typescript\ngetPlans(projectId: number, filters?: PlanFilters): Promise\u003cPlanItem[]\u003e\n```\n\n```typescript\naddPlan(projectId: number, payload: AddPlan): Promise\u003cPlan\u003e\n```\n\n```typescript\naddPlanEntry(planId: number, payload: AddPlanEntry): Promise\u003cPlanEntry\u003e\n```\n\n```typescript\naddRunToPlanEntry(planId: number, entryId: string, payload: AddRunToPlanEntry): Promise\u003cPlanEntry\u003e\n```\n\n```typescript\nupdatePlan(planId: number, payload: UpdatePlan): Promise\u003cPlan\u003e\n```\n\n```typescript\nupdatePlanEntry(planId: number, entryId: string, payload: UpdatePlanEntry): Promise\u003cPlanEntry\u003e\n```\n\n```typescript\nupdateRunInPlanEntry(runId: number, payload: UpdateRunInPlanEntry): Promise\u003cPlanEntry\u003e\n```\n\n```typescript\nclosePlan(planId: number): Promise\u003cPlan\u003e\n```\n\n```typescript\ndeletePlan(planId: number): Promise\u003cvoid\u003e\n```\n\n```typescript\ndeletePlanEntry(planId: number, entryId: string): Promise\u003cvoid\u003e\n```\n\n```typescript\ndeleteRunFromPlanEntry(runId: number): Promise\u003cvoid\u003e\n```\n\n### Priorities\n\n```typescript\ngetPriorities(): Promise\u003cPriority[]\u003e\n```\n\n### Projects\n\n```typescript\ngetProject(projectId: number): Promise\u003cProject\u003e\n```\n\n```typescript\ngetProjects(filters?: ProjectFilters): Promise\u003cProject[]\u003e\n```\n\n```typescript\naddProject(payload: AddProject): Promise\u003cProject\u003e\n```\n\n```typescript\nupdateProject(projectId: number, payload: UpdateProject): Promise\u003cProject\u003e\n```\n\n```typescript\ndeleteProject(projectId: number): Promise\u003cvoid\u003e\n```\n\n### Reports\n\n```typescript\ngetReports(projectId: number): Promise\u003cReport[]\u003e\n```\n\n```typescript\nrunReport(reportTemplateId: number): Promise\u003cReportUrls\u003e\n```\n\n### Results\n\n```typescript\ngetResults(testId: number, filters?: ResultFilters): Promise\u003cResult[]\u003e\n```\n\n```typescript\ngetResultsForCase(runId: number, caseId: number, filters?: ResultFilters): Promise\u003cResult[]\u003e\n```\n\n```typescript\ngetResultsForRun(runId: number, filters?: ResultForRunFilters): Promise\u003cResult[]\u003e\n```\n\n```typescript\naddResult(testId: number, payload: AddResult): Promise\u003cResult\u003e\n```\n\n```typescript\naddResultForCase(runId: number, caseId: number, payload: AddResult): Promise\u003cResult\u003e\n```\n\n```typescript\naddResults(runId: number, payload: AddResults): Promise\u003cResult[]\u003e\n```\n\n```typescript\naddResultsForCases(runId: number, payload: AddResultsForCases): Promise\u003cResult[]\u003e\n```\n\n### Result Fields\n\n```typescript\ngetResultFields(): Promise\u003cResultField[]\u003e\n```\n\n### Runs\n\n```typescript\ngetRun(runId: number): Promise\u003cRun\u003e\n```\n\n```typescript\ngetRuns(projectId: number, filters?: RunFilters): Promise\u003cRun[]\u003e\n```\n\n```typescript\naddRun(projectId: number, payload: AddRun): Promise\u003cRun\u003e\n```\n\n```typescript\nupdateRun(runId: number, payload: UpdateRun): Promise\u003cRun\u003e\n```\n\n```typescript\ncloseRun(runId: number): Promise\u003cRun\u003e\n```\n\n```typescript\ndeleteRun(runId: number): Promise\u003cvoid\u003e\n```\n\n### Sections\n\n```typescript\ngetSection(sectionId: number): Promise\u003cSection\u003e\n```\n\n```typescript\ngetSections(projectId: number, filters?: SectionFilters): Promise\u003cSection[]\u003e\n```\n\n```typescript\naddSection(projectId: number, payload: AddSection): Promise\u003cSection\u003e\n```\n\n```typescript\nmoveSection(sectionId: number, payload: MoveSection): Promise\u003cSection\u003e\n```\n\n```typescript\nupdateSection(sectionId: number, payload: UpdateSection): Promise\u003cSection\u003e\n```\n\n```typescript\ndeleteSection(sectionId: number): Promise\u003cvoid\u003e\n```\n\n### Shared steps\n\n```typescript\ngetSharedStep(stepId: number): Promise\u003cSharedStep\u003e\n```\n\n```typescript\ngetSharedSteps(projectId: number, filters?: SharedStepFilters): Promise\u003cSharedStep[]\u003e\n```\n\n```typescript\ngetSharedStepHistory(stepId: number, filters?: Pagination): Promise\u003cSharedStepHistory[]\u003e {\n```\n\n```typescript\naddSharedStep(projectId: number, payload: AddSharedStep): Promise\u003cSharedStep\u003e\n```\n\n```typescript\nupdateSharedStep(stepId: number, payload: UpdateSharedStep): Promise\u003cSharedStep\u003e\n```\n\n```typescript\ndeleteSharedStep(stepId: number, payload?: DeleteSharedStep): Promise\u003cvoid\u003e\n```\n\n### Statuses\n\n```typescript\ngetStatuses(): Promise\u003cStatus[]\u003e\n```\n\n```typescript\ngetCaseStatuses(filters?: Pagination): Promise\u003cCaseStatus[]\u003e\n```\n\n### Suites\n\n```typescript\ngetSuite(suiteId: number): Promise\u003cSuite\u003e\n```\n\n```typescript\ngetSuites(projectId: number): Promise\u003cSuite[]\u003e\n```\n\n```typescript\naddSuite(projectId: number, payload: AddSuite): Promise\u003cSuite\u003e\n```\n\n```typescript\nupdateSuite(suiteId: number, payload: UpdateSuite): Promise\u003cSuite\u003e\n```\n\n```typescript\ndeleteSuite(suiteId: number): Promise\u003cvoid\u003e\n```\n\n### Templates\n\n```typescript\ngetTemplates(projectId: number): Promise\u003cTemplate[]\u003e\n```\n\n### Tests\n\n```typescript\ngetTest(testId: number): Promise\u003cTest\u003e\n```\n\n```typescript\ngetTests(runId: number, filters?: TestFilters): Promise\u003cTest[]\u003e\n```\n\n### Users\n\n```typescript\ngetUser(userId: number): Promise\u003cUser\u003e\n```\n\n```typescript\ngetCurrentUser(): Promise\u003cUser\u003e\n```\n\n```typescript\ngetUserByEmail(email: string): Promise\u003cUser\u003e\n```\n\n```typescript\ngetUsers(filters?: UserFilters): Promise\u003cUser[]\u003e\n```\n\n```typescript\naddUser(payload: AddUser): Promise\u003cUser\u003e\n```\n\n```typescript\nupdateUser(userId: number, payload: AddUser): Promise\u003cUser\u003e\n```\n\n### Variables\n\n```typescript\ngetVariables(projectId: number, filters?: Pagination): Promise\u003cVariable[]\u003e\n```\n\n```typescript\naddVariable(projectId: number, payload: AddVariable): Promise\u003cVariable\u003e\n```\n\n```typescript\nupdateVariable(variableId: number, payload: AddVariable): Promise\u003cVariable\u003e\n```\n\n```typescript\ndeleteVariable(variableId: number): Promise\u003cvoid\u003e\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdlenroc%2Fnode-testrail-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdlenroc%2Fnode-testrail-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdlenroc%2Fnode-testrail-api/lists"}