Orgs
The orgs the caller belongs to, and the org-wide log rollup. Any member can read the rollup; a key bound to another org gets 403.
2 methods
client.orgs.list()
The orgs the caller belongs to, personal org included (`isPersonal: true`). What `ulu log --orgs` iterates. A key bound to one org still lists every org its holder belongs to; the binding governs what it may read, not what it may see listed.
Return Fields
slugrequiredstringOrg slug.
namerequiredstringDisplay name.
isPersonalrequiredbooleanThe caller's personal org.
list(): Promise<OrgListEntry[]>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.orgs.list();
console.log(result.slug);// Promise<OrgListEntry[]>
{
slug: string;
name: string;
isPersonal: boolean;
}client.orgs.getLogStat()
The project rollup org-wide (over the org's live projects) plus a `projects[]` summary table — name, runs, issues, fixed, regressions, lastRunAt — newest run first, capped at 100 with `hasMoreProjects`. Served from a 60 s cache per (org, window); `computedAt` says how old the numbers are. The slug in the path is the org; a client-level orgSlug does not redirect this read. Unknown slug → 404 ORG_NOT_FOUND; a key bound to another org → 403 ORG_ACCESS_DENIED. The source of uluops.ai's landing numbers.
Parameters
slugrequiredstringOrg slug.
queryoptionalLogStatQuerysince / until (ISO 8601).
Return Fields
orgrequiredstringThe org the rollup was computed for.
projectsrequiredOrgLogProjectSummary[]Per-project rows, last run desc, max 100.
hasMoreProjectsrequiredbooleanMore than 100 live projects.
computedAtrequiredstringWhen the cached rollup was computed.
getLogStat(slug: string, query?: LogStatQuery): Promise<OrgLogStat>import { OpsClient } from '@uluops/ops-sdk';
const client = new OpsClient({
apiKey: 'ulr_your-api-key',
});
const result = await client.orgs.getLogStat('example-value');
console.log(result.org);// Promise<OrgLogStat>
{
org: string;
projects: OrgLogProjectSummary[];
hasMoreProjects: boolean;
computedAt: string;
}