| name | clickup-sdk-patterns |
| description | Production-ready ClickUp API v2 client patterns with typed wrappers,
error handling, caching, and multi-tenant support.
Trigger: "clickup client wrapper", "clickup SDK patterns", "clickup best practices",
"clickup typescript client", "clickup API wrapper", "production clickup code".
|
| allowed-tools | Read, Write, Edit |
| version | 1.6.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","productivity","clickup"] |
| compatibility | Designed for Claude Code |
ClickUp SDK Patterns
Overview
ClickUp has no official SDK. Build a typed REST client wrapper around https://api.clickup.com/api/v2/. These patterns provide singleton clients, typed responses, error boundaries, and multi-tenant support.
Typed Client Wrapper
const CLICKUP_BASE = 'https://api.clickup.com/api/v2';
interface ClickUpClientConfig {
token: string;
timeout?: number;
onRateLimit?: (waitMs: number) => void;
}
class ClickUpClient {
private token: string;
private timeout: number;
private rateLimitRemaining = 100;
private rateLimitReset = 0;
constructor(config: ClickUpClientConfig) {
this.token = config.token;
this.timeout = config.timeout ?? 30000;
}
async request<T>(path: string, options: RequestInit = {}): Promise<T> {
const controller = ();
timer = ( controller.(), .);
{
response = (, {
...options,
: controller.,
: {
: .,
: ,
...options.,
},
});
. = (
response..() ??
);
. = (
response..() ??
) * ;
(!response.) {
body = response.().( ({}));
(response., body., body.);
}
response.();
} {
(timer);
}
}
(): <> {
data = .<{ : }>();
data.;
}
(): <[]> {
data = .<{ : [] }>();
data.;
}
(: ): <[]> {
data = .<{ : [] }>(
);
data.;
}
(: , : ): <> {
.<>(, {
: ,
: .(task),
});
}
(: ): <> {
.<>();
}
(: , : <>): <> {
.<>(, {
: ,
: .(updates),
});
}
(): {
. < && .() < .;
}
}