The PocketSmith API
Bring your own key. This API needs your own PocketSmith key - get one from the provider, add it once below, and the proxy injects it on every call. Your OmniStream plan covers the unified SDK, key storage, and proxy - the provider's own rate limits still apply to your key.
This is a community listing. If you own this API, you can request ownership.
npm install omnistream-sdkimport { OmniClient } from "omnistream-sdk";
const omni = new OmniClient({ token: process.env.OMNI_KEY! });
// One key reaches every API on the marketplace.
const data = await omni.call("pocketsmith/getaccounts_id");One install, one key - the same client calls every API on the marketplace.
The unique identifier of the account.
Get account
Update account
Delete account
List transactions in account
Get attachment
/**
* PocketSmith - generated by OmniStream from PocketSmith's OpenAPI spec.
* One typed method per endpoint. A single Omni key reaches the API.
*/
const DEFAULT_BASE = "https://grid.skinvaults.online/v1/proxy/pocketsmith";
export class PocketSmithError extends Error {
status: number;
code?: string;
constructor(status: number, code: string | undefined, message?: string) {
super(message || `PocketSmith error ${status}`);
this.name = "PocketSmithError";
this.status = status;
this.code = code;
}
}
export interface PocketSmithOptions {
baseUrl?: string;
fetch?: typeof fetch;
timeoutMs?: number;
}
export class PocketSmith {
/** @param token Your OmniStream key (one key for every API). */
constructor(private token: string, private opts: PocketSmithOptions = {}) {
if (!token) throw new Error("PocketSmith: token is required");
}
rateLimit: { remainingMinute?: number; remainingDay?: number } | null = null;
private async _request(method: string, path: string, { params, body }: { params?: Record<string, unknown>; body?: unknown } = {}): Promise<any> {
const f = this.opts.fetch ?? globalThis.fetch;
const url = new URL((this.opts.baseUrl ?? DEFAULT_BASE).replace(/\/+$/, "") + path);
if (params) for (const [k, v] of Object.entries(params)) if (v != null) url.searchParams.set(k, String(v));
const headers: Record<string, string> = { "x-omni-key": this.token };
if (body !== undefined) headers["content-type"] = "application/json";
const res = await f(url, { method, headers, body: body !== undefined ? JSON.stringify(body) : undefined });
this.rateLimit = {
remainingMinute: Number(res.headers.get("x-ratelimit-remaining-minute")) || undefined,
remainingDay: Number(res.headers.get("x-ratelimit-remaining-day")) || undefined,
};
const data = await res.json().catch(() => ({}));
if (!res.ok) throw new PocketSmithError(res.status, data?.error?.code, data?.error?.message);
return data.data ?? data;
}
/** Get account */
getaccountsId(params: { "id": number }): Promise<any> {
return this._request("GET", "/accounts/{id}", { params });
}
/** Update account */
putaccountsId(body: unknown, params: { "id": number }): Promise<any> {
return this._request("PUT", "/accounts/{id}", { body, params });
}
/** Delete account */
deleteaccountsId(params: { "id": number }): Promise<any> {
return this._request("DELETE", "/accounts/{id}", { params });
}
/** List transactions in account */
getaccountsIdTransactions(params: { "id": number; "start_date"?: string; "end_date"?: string; "updated_since"?: string; "uncategorised"?: number; "type"?: string; "needs_review"?: number; "search"?: string; "page"?: number }): Promise<any> {
return this._request("GET", "/accounts/{id}/transactions", { params });
}
/** Get attachment */
getattachmentsId(params: { "id": number }): Promise<any> {
return this._request("GET", "/attachments/{id}", { params });
}
/** Update attachment */
putattachmentsId(body: unknown, params: { "id": number }): Promise<any> {
return this._request("PUT", "/attachments/{id}", { body, params });
}
/** Delete attachment */
deleteattachmentsId(params: { "id": number }): Promise<any> {
return this._request("DELETE", "/attachments/{id}", { params });
}
/** Get category */
getcategoriesId(params: { "id": number }): Promise<any> {
return this._request("GET", "/categories/{id}", { params });
}
/** Update category */
putcategoriesId(body: unknown, params: { "id": number }): Promise<any> {
return this._request("PUT", "/categories/{id}", { body, params });
}
/** Delete category */
deletecategoriesId(params: { "id": number }): Promise<any> {
return this._request("DELETE", "/categories/{id}", { params });
}
/** Create category rule in category */
postcategoriesIdCategoryRules(body: unknown, params: { "id": number }): Promise<any> {
return this._request("POST", "/categories/{id}/category_rules", { body, params });
}
/** List transactions in categories */
getcategoriesIdTransactions(params: { "id": string; "start_date"?: string; "end_date"?: string; "updated_since"?: string; "uncategorised"?: number; "type"?: string; "needs_review"?: number; "search"?: string; "page"?: number }): Promise<any> {
return this._request("GET", "/categories/{id}/transactions", { params });
}
/** List currencies */
getcurrencies(): Promise<any> {
return this._request("GET", "/currencies", {});
}
/** Get currency */
getcurrenciesId(params: { "id": string }): Promise<any> {
return this._request("GET", "/currencies/{id}", { params });
}
/** Get event */
geteventsId(params: { "id": string }): Promise<any> {
return this._request("GET", "/events/{id}", { params });
}
/** Update event */
puteventsId(body: unknown, params: { "id": string }): Promise<any> {
return this._request("PUT", "/events/{id}", { body, params });
}
/** Delete event */
deleteeventsId(params: { "id": string; "behaviour": string }): Promise<any> {
return this._request("DELETE", "/events/{id}", { params });
}
/** Get institution */
getinstitutionsId(params: { "id": number }): Promise<any> {
return this._request("GET", "/institutions/{id}", { params });
}
/** Update institution */
putinstitutionsId(body: unknown, params: { "id": number }): Promise<any> {
return this._request("PUT", "/institutions/{id}", { body, params });
}
/** Delete institution */
deleteinstitutionsId(params: { "id": number; "merge_into_institution_id"?: number }): Promise<any> {
return this._request("DELETE", "/institutions/{id}", { params });
}
/** List accounts in institution */
getinstitutionsIdAccounts(params: { "id": number }): Promise<any> {
return this._request("GET", "/institutions/{id}/accounts", { params });
}
/** Get the authorised user */
getme(): Promise<any> {
return this._request("GET", "/me", {});
}
/** List events in scenario. */
getscenariosIdEvents(params: { "id": number; "start_date": string; "end_date": string }): Promise<any> {
return this._request("GET", "/scenarios/{id}/events", { params });
}
/** Create event in scenario */
postscenariosIdEvents(body: unknown, params: { "id": number }): Promise<any> {
return this._request("POST", "/scenarios/{id}/events", { body, params });
}
/** List time zones */
gettimeZones(): Promise<any> {
return this._request("GET", "/time_zones", {});
}
/** Get transaction account */
gettransactionAccountsId(params: { "id": number }): Promise<any> {
return this._request("GET", "/transaction_accounts/{id}", { params });
}
/** Update transaction account */
puttransactionAccountsId(body: unknown, params: { "id": number }): Promise<any> {
return this._request("PUT", "/transaction_accounts/{id}", { body, params });
}
/** List transactions in transaction account */
gettransactionAccountsIdTransactions(params: { "id": number; "start_date"?: string; "end_date"?: string; "updated_since"?: string; "uncategorised"?: number; "type"?: string; "needs_review"?: number; "search"?: string; "page"?: number }): Promise<any> {
return this._request("GET", "/transaction_accounts/{id}/transactions", { params });
}
/** Create a transaction in transaction account */
posttransactionAccountsIdTransactions(body: unknown, params: { "id": number }): Promise<any> {
return this._request("POST", "/transaction_accounts/{id}/transactions", { body, params });
}
/** Get a transaction */
gettransactionsId(params: { "id": number }): Promise<any> {
return this._request("GET", "/transactions/{id}", { params });
}
/** Update a transaction */
puttransactionsId(body: unknown, params: { "id": number }): Promise<any> {
return this._request("PUT", "/transactions/{id}", { body, params });
}
/** Delete transaction */
deletetransactionsId(params: { "id": number }): Promise<any> {
return this._request("DELETE", "/transactions/{id}", { params });
}
/** List attachments in transaction */
gettransactionsIdAttachments(params: { "id": number }): Promise<any> {
return this._request("GET", "/transactions/{id}/attachments", { params });
}
/** Assigns attachment to transaction */
posttransactionsIdAttachments(body: unknown, params: { "id": number }): Promise<any> {
return this._request("POST", "/transactions/{id}/attachments", { body, params });
}
/** Unassigns attachment in transaction */
deletetransactionsTransactionIdAttachmentsAttachme(params: { "transaction_id": number; "attachment_id": number }): Promise<any> {
return this._request("DELETE", "/transactions/{transaction_id}/attachments/{attachment_id}", { params });
}
/** Get user */
getusersId(params: { "id": number }): Promise<any> {
return this._request("GET", "/users/{id}", { params });
}
/** Update user */
putusersId(body: unknown, params: { "id": number }): Promise<any> {
return this._request("PUT", "/users/{id}", { body, params });
}
/** List accounts in user */
getusersIdAccounts(params: { "id": number }): Promise<any> {
return this._request("GET", "/users/{id}/accounts", { params });
}
/** Create an account in user */
postusersIdAccounts(body: unknown, params: { "id": number }): Promise<any> {
return this._request("POST", "/users/{id}/accounts", { body, params });
}
/** Update the display order of accounts in user */
putusersIdAccounts(body: unknown, params: { "id": number }): Promise<any> {
return this._request("PUT", "/users/{id}/accounts", { body, params });
}
/** Lists attachments in user */
getusersIdAttachments(params: { "id": number; "unassigned"?: number }): Promise<any> {
return this._request("GET", "/users/{id}/attachments", { params });
}
/** Create attachment in user */
postusersIdAttachments(body: unknown, params: { "id": number }): Promise<any> {
return this._request("POST", "/users/{id}/attachments", { body, params });
}
/** List budget for user */
getusersIdBudget(params: { "id": number; "roll_up"?: boolean }): Promise<any> {
return this._request("GET", "/users/{id}/budget", { params });
}
/** Get budget summary for user */
getusersIdBudgetSummary(params: { "id": number; "period": string; "interval": number; "start_date": string; "end_date": string }): Promise<any> {
return this._request("GET", "/users/{id}/budget_summary", { params });
}
/** List categories in user */
getusersIdCategories(params: { "id": number }): Promise<any> {
return this._request("GET", "/users/{id}/categories", { params });
}
/** Create category in user */
postusersIdCategories(body: unknown, params: { "id": number }): Promise<any> {
return this._request("POST", "/users/{id}/categories", { body, params });
}
/** List category rules in user */
getusersIdCategoryRules(params: { "id": number }): Promise<any> {
return this._request("GET", "/users/{id}/category_rules", { params });
}
/** List events in user. */
getusersIdEvents(params: { "id": number; "start_date": string; "end_date": string }): Promise<any> {
return this._request("GET", "/users/{id}/events", { params });
}
/** Delete forecast cache for user */
deleteusersIdForecastCache(params: { "id": number }): Promise<any> {
return this._request("DELETE", "/users/{id}/forecast_cache", { params });
}
/** List institutions in user */
getusersIdInstitutions(params: { "id": number }): Promise<any> {
return this._request("GET", "/users/{id}/institutions", { params });
}
/** Create institution in user */
postusersIdInstitutions(body: unknown, params: { "id": number }): Promise<any> {
return this._request("POST", "/users/{id}/institutions", { body, params });
}
/** List labels in user */
getusersIdLabels(params: { "id": number }): Promise<any> {
return this._request("GET", "/users/{id}/labels", { params });
}
/** List saved searches in user */
getusersIdSavedSearches(params: { "id": number }): Promise<any> {
return this._request("GET", "/users/{id}/saved_searches", { params });
}
/** List transaction accounts in user */
getusersIdTransactionAccounts(params: { "id": number }): Promise<any> {
return this._request("GET", "/users/{id}/transaction_accounts", { params });
}
/** List transactions in user */
getusersIdTransactions(params: { "id": number; "start_date"?: string; "end_date"?: string; "updated_since"?: string; "uncategorised"?: number; "type"?: string; "needs_review"?: number; "search"?: string; "page"?: number }): Promise<any> {
return this._request("GET", "/users/{id}/transactions", { params });
}
/** Get trend analysis for user */
getusersIdTrendAnalysis(params: { "id": number; "period": string; "interval": number; "start_date": string; "end_date": string; "categories": string; "scenarios": string }): Promise<any> {
return this._request("GET", "/users/{id}/trend_analysis", { params });
}
}
export default PocketSmith;
No reviews yet. Be the first to rate this API.
Yes. PocketSmith uses apiKey authentication, so you bring your own key from the provider. You store it once on OmniStream and the proxy injects it into every call, so your code only ever sends your Omni key.
The PocketSmith API It exposes 56 endpoints over GET, PUT, DELETE, POST, including GET /accounts/{id}, PUT /accounts/{id}, DELETE /accounts/{id}.
Install the OmniStream SDK for your language and call PocketSmith through it. The client is generated from this API's OpenAPI spec, so parameters and responses are fully typed, and the same client also calls every other API in the marketplace.
You can start on the free plan. OmniStream charges for the unified SDK, key storage and proxy rather than for PocketSmith itself, and PocketSmith's own rate limits still apply to your provider key.
ExchangeRate-API: Fetch the latest currency exchange rates via API. ExchangeRate-API is free and unlimited.
Update attachment
Delete attachment
Get category
Update category
Delete category
Create category rule in category
List transactions in categories
List currencies
Get currency
Get event
Update event
Delete event
Get institution
Update institution
Delete institution
List accounts in institution
Get the authorised user
List events in scenario.
Create event in scenario
List time zones
Get transaction account
Update transaction account
List transactions in transaction account
Create a transaction in transaction account
Get a transaction
Update a transaction
Delete transaction
List attachments in transaction
Assigns attachment to transaction
Unassigns attachment in transaction
Get user
Update user
List accounts in user
Create an account in user
Update the display order of accounts in user
Lists attachments in user
Create attachment in user
List budget for user
Get budget summary for user
List categories in user
Create category in user
List category rules in user
List events in user.
Delete forecast cache for user
List institutions in user
Create institution in user
List labels in user
List saved searches in user
List transaction accounts in user
List transactions in user
Get trend analysis for user