RegistryDashboard

Projects

Create, list, update, and delete projects. Projects are the top-level organizational unit for validation runs and issues.

14 methods

client.projects.list()

List all projects for the authenticated user.

Requires authentication
idrequiredstringuuid

Project ID.

namerequiredstring

Project name.

ownerIdrequiredstringuuid

Owner user ID.

createdAtrequiredstringdate-time

Creation timestamp.

updatedAtrequiredstringdate-time

Last update timestamp.

list(): Promise<Project[]>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.projects.list();

console.log(result.id);
Response Type
// Promise<Project[]>
{
  id: string;
  name: string;
  ownerId: string;
  createdAt: string;
  updatedAt: string;
}

client.projects.get()

Get a project by ID or name.

Requires authentication
idOrNamerequiredstring

Project ID (UUID) or name.

idrequiredstringuuid

Project ID.

namerequiredstring

Project name.

ownerIdrequiredstringuuid

Owner user ID.

createdAtrequiredstringdate-time

Creation timestamp.

updatedAtrequiredstringdate-time

Last update timestamp.

get(idOrName: string): Promise<Project>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.projects.get('my-project');

console.log(result.id);
Response Type
// Promise<Project>
{
  id: string;
  name: string;
  ownerId: string;
  createdAt: string;
  updatedAt: string;
}

client.projects.create()

Create a new project. Project names must be unique within the account.

Requires authentication
namerequiredstring

Project name. Must be unique, 1-200 characters.

idrequiredstringuuid

Project ID.

namerequiredstring

Project name.

createdAtrequiredstringdate-time

Creation timestamp.

create(input: CreateProjectInput): Promise<Project>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.projects.create({ name: 'my-project' });

console.log(result.id);
Response Type
// Promise<Project>
{
  id: string;
  name: string;
  createdAt: string;
}

client.projects.update()

Update a project's fields.

Requires authentication
idOrNamerequiredstring

Project ID or name.

nameoptionalstring

New project name.

idrequiredstringuuid

Project ID.

namerequiredstring

Project name.

update(idOrName: string, input: UpdateProjectInput): Promise<Project>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.projects.update({ idOrName: 'my-project' });

console.log(result.id);
Response Type
// Promise<Project>
{
  id: string;
  name: string;
}

client.projects.delete()

Permanently delete a project. Requires confirmation phrase matching the project name.

Requires authentication
idOrNamerequiredstring

Project ID or name.

confirmrequiredtrue

Must be literal `true`.

confirmationPhraserequiredstring

Must match the project name exactly.

deletedrequiredboolean

Always `true` on success.

delete(idOrName: string, input: DeleteProjectInput): Promise<DeleteResult>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.projects.delete({
    idOrName: 'my-project',
    confirm: true,
    confirmationPhrase: 'DELETE my-project',
  });

console.log(result.deleted);
Response Type
// Promise<DeleteResult>
{
  deleted: boolean;
}

client.projects.softDelete()

Soft-delete a project. Can be restored later with `restore()`.

Requires authentication
idOrNamerequiredstring

Project ID or name.

confirmrequiredtrue

Must be literal `true`.

confirmationPhraserequiredstring

Must match the project name exactly.

deletedrequiredboolean

Always `true` on success.

softDelete(idOrName: string, input: DeleteProjectInput): Promise<DeleteResult>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.projects.softDelete({
    idOrName: 'my-project',
    confirm: 'example-value',
    confirmationPhrase: 'DELETE my-project',
  });

console.log(result.deleted);
Response Type
// Promise<DeleteResult>
{
  deleted: boolean;
}

client.projects.restore()

Restore a soft-deleted project.

Requires authentication
idOrNamerequiredstring

Project ID or name.

restore(idOrName: string): Promise<Project>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.projects.restore('my-project');
Response Type
Promise<Project>

client.projects.rename()

Rename a project by old name.

Requires authentication
oldNamerequiredstring

Current project name.

newNamerequiredstring

New project name.

rename(input: RenameProjectInput): Promise<Project>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.projects.rename({ oldName: 'example-value', newName: 'my-fork' });
Response Type
Promise<Project>

client.projects.getSummary()

Get project summary with issue counts and run statistics.

Requires authentication
idOrNamerequiredstring

Project ID or name.

projectrequiredPublicProject

Project metadata.

statsrequiredobject

Summary statistics.

getSummary(idOrName: string): Promise<ProjectSummaryResponse>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.projects.getSummary('my-project');

console.log(result.project);
Response Type
// Promise<ProjectSummaryResponse>
{
  project: PublicProject;
  stats: object;
}

client.projects.getTrends()

Get issue trend data over time for a project.

Requires authentication
idOrNamerequiredstring

Project ID or name.

daysoptionalnumber

Time window in days (1-365).

Default: 30
projectrequiredProject

Project metadata.

daysrequirednumber

Time window used.

dailyrequiredDailyIssueCounts[]

Daily issue counts.

summaryrequiredTrendsSummary

Aggregate summary of trend data.

getTrends(idOrName: string, query?: ProjectTrendsQuery): Promise<ProjectTrends>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.projects.getTrends('my-project');

console.log(result.project);
Response Type
// Promise<ProjectTrends>
{
  project: Project;
  days: number;
  daily: DailyIssueCounts[];
  summary: TrendsSummary;
}

client.projects.listIssues()

List issues in a project with optional filters.

Requires authentication
idOrNamerequiredstring

Project ID or name.

statusoptionalStatusFilter

Filter by status.

opencompleteddeferredwontfixmergedfalse-positiveobservationall
priorityoptionalPriority

Filter by priority.

criticalhighsuggestedbacklog
agentoptionalstring

Filter by agent name.

limitoptionalnumber

Max results (1-100).

Default: 50
offsetoptionalnumber

Pagination offset.

Default: 0
listIssues(idOrName: string, query?: ListProjectIssuesQuery): Promise<Issue[]>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.projects.listIssues('my-project');
Response Type
Promise<Issue[]>

client.projects.bulkUpdateIssueStatus()

Bulk update issue statuses in a project.

Requires authentication
idOrNamerequiredstring

Project ID or name.

updatesrequiredBulkIssueStatusUpdate[]

Array of status updates.

idrequiredstringuuid

Issue ID.

previousStatusrequiredStatus

Previous status.

newStatusrequiredStatus

Updated status.

updatedAtrequiredstringdate-time

Update timestamp.

bulkUpdateIssueStatus(idOrName: string, updates: BulkIssueStatusUpdate[]): Promise<BulkIssueStatusResult>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.projects.bulkUpdateIssueStatus({
    idOrName: 'my-project',
    updates: [{
        issueId: '550e8400-e29b-41d4-a716-446655440000',
        status: 'open',
      }],
  });

console.log(result.id);
Response Type
// Promise<BulkIssueStatusResult>
{
  id: string;
  previousStatus: Status;
  newStatus: Status;
  updatedAt: string;
}

client.projects.mergeIssues()

Merge multiple issues into one target issue.

Requires authentication
idOrNamerequiredstring

Project ID or name.

targetIssueIdrequiredstringuuid

ID of the target issue.

sourceIssueIdsrequiredstring[]

IDs of issues to merge into target.

strategyoptionalstring

Merge strategy.

keep_targetkeep_highest_priority
Default: keep_target
targetIssueIdrequiredstringuuid

Target issue ID.

mergedCountrequirednumber

Number of source issues merged.

migratedOccurrencesrequirednumber

Total occurrences migrated.

mergeIssues(idOrName: string, input: MergeIssuesInput): Promise<MergeIssuesResult>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.projects.mergeIssues({
    idOrName: 'my-project',
    targetIssueId: '550e8400-e29b-41d4-a716-446655440000',
    sourceIssueIds: [],
  });

console.log(result.targetIssueId);
Response Type
// Promise<MergeIssuesResult>
{
  targetIssueId: string;
  mergedCount: number;
  migratedOccurrences: number;
}

client.projects.listIssuesWithCount()

List issues in a project with total count for pagination. Preserves the API's envelope count field.

Requires authentication
idOrNamerequiredstring

Project ID or name.

statusoptionalStatusFilter

Filter by status.

opencompleteddeferredwontfixmergedfalse-positiveobservationall
priorityoptionalPriority

Filter by priority.

criticalhighsuggestedbacklog
agentoptionalstring

Filter by agent name.

limitoptionalnumber

Max results (1-100).

Default: 50
offsetoptionalnumber

Pagination offset.

Default: 0
issuesrequiredIssue[]

Paginated issues.

countrequirednumber

Total issue count matching filters.

listIssuesWithCount(idOrName: string, query?: ListProjectIssuesQuery): Promise<{ issues: Issue[]; count: number }>
typescript
import { OpsClient } from '@uluops/ops-sdk';

const client = new OpsClient({
  apiKey: 'ulr_your-api-key',
});

const result = await client.projects.listIssuesWithCount('my-project');

console.log(result.issues);
Response Type
// Promise<{ issues: Issue[]; count: number }>
{
  issues: Issue[];
  count: number;
}