Envoice - electronic invoicing: create, send, and track invoices and their delivery status.
Bring your own key. This API needs your own Envoice API 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("envoice/ClientApi_All");One install, one key - the same client calls every API on the marketplace.
Return all clients for the account
Check if the provided client can be deleted
Delete an existing client
Return client details. Activities and invoices included.
Create a client
/**
* EnvoiceAPI - generated by OmniStream from Envoice API's OpenAPI spec.
* One typed method per endpoint. A single Omni key reaches the API.
*/
const DEFAULT_BASE = "https://grid.skinvaults.online/v1/proxy/envoice";
export class EnvoiceAPIError extends Error {
status: number;
code?: string;
constructor(status: number, code: string | undefined, message?: string) {
super(message || `EnvoiceAPI error ${status}`);
this.name = "EnvoiceAPIError";
this.status = status;
this.code = code;
}
}
export interface EnvoiceAPIOptions {
baseUrl?: string;
fetch?: typeof fetch;
timeoutMs?: number;
}
export class EnvoiceAPI {
/** @param token Your OmniStream key (one key for every API). */
constructor(private token: string, private opts: EnvoiceAPIOptions = {}) {
if (!token) throw new Error("EnvoiceAPI: 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 EnvoiceAPIError(res.status, data?.error?.code, data?.error?.message);
return data.data ?? data;
}
/** Return all clients for the account */
clientApiAll(params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/client/all", { params });
}
/** Check if the provided client can be deleted */
clientApiCanDelete(params: { "id": number; "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/client/candelete", { params });
}
/** Delete an existing client */
clientApiDelete(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/client/delete", { body, params });
}
/** Return client details. Activities and invoices included. */
clientApiDetails(params: { "id": number; "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/client/details", { params });
}
/** Create a client */
clientApiNew(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/client/new", { body, params });
}
/** Update an existing client */
clientApiUpdate(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/client/update", { body, params });
}
/** Return all estimation for the account */
estimationApiAll(params: { "x-auth-key": string; "x-auth-secret": string; "queryOptions.page"?: number; "queryOptions.pageSize"?: number }): Promise<any> {
return this._request("GET", "/api/estimation/all", { params });
}
/** Change estimation status */
estimationApiChangeStatus(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/estimation/changestatus", { body, params });
}
/** Convert the estimation to an invoice */
estimationApiConvert(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/estimation/convert", { body, params });
}
/** Delete an existing estimation */
estimationApiDelete(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/estimation/delete", { body, params });
}
/** Return estimation data */
estimationApiDetails(params: { "id": number; "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/estimation/details", { params });
}
/** Create an estimation */
estimationApiNew(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/estimation/new", { body, params });
}
/** Send the provided estimation to the client */
estimationApiSendToClient(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/estimation/sendtoclient", { body, params });
}
/** Retrieve the status of the estimation */
estimationApiStatus(params: { "id": number; "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/estimation/status", { params });
}
/** Update an existing estimation */
estimationApiUpdate(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/estimation/update", { body, params });
}
/** Return the unique url to the client's invoice */
estimationApiUri(params: { "id": number; "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/estimation/uri", { params });
}
/** Return all of the platform supported countries */
generalApiCountries(params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/general/countries", { params });
}
/** Return all of the platform supported currencies */
generalApiCurrencies(params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/general/currencies", { params });
}
/** Return all of the platform supported Date Formats */
generalApiDateFormats(params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/general/dateformats", { params });
}
/** Return all of the platform supported UI languages */
generalApiUiLanguages(params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/general/uilanguages", { params });
}
/** Return all invoices for the account */
invoiceApiAll(params: { "x-auth-key": string; "x-auth-secret": string; "queryOptions.page"?: number; "queryOptions.pageSize"?: number }): Promise<any> {
return this._request("GET", "/api/invoice/all", { params });
}
/** Return all invoice categories for the account */
getapiInvoiceAllcategories(params: { "x-auth-key": string; "x-auth-secret": string; "query"?: string }): Promise<any> {
return this._request("GET", "/api/invoice/allcategories", { params });
}
/** Change invoice status */
invoiceApiChangeStatus(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/invoice/changestatus", { body, params });
}
/** Delete an existing invoice */
invoiceApiDelete(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/invoice/delete", { body, params });
}
/** Delete an existing invoice category */
postapiInvoiceDeletecategory(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/invoice/deletecategory", { body, params });
}
/** Return invoice data */
invoiceApiDetails(params: { "id": number; "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/invoice/details", { params });
}
/** Create an invoice */
invoiceApiNew(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/invoice/new", { body, params });
}
/** Create an invoice category */
postapiInvoiceNewcategory(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/invoice/newcategory", { body, params });
}
/** Return the PDF for the invoice */
invoiceApiPdf(params: { "id": number; "x-auth-key": string; "x-auth-secret": string; "signedVersion"?: boolean }): Promise<any> {
return this._request("GET", "/api/invoice/pdf", { params });
}
/** Send the provided invoice to the accountant */
invoiceApiSendToAccountant(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/invoice/sendtoaccountant", { body, params });
}
/** Send the provided invoice to the client */
invoiceApiSendToClient(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/invoice/sendtoclient", { body, params });
}
/** Retrieve the status of the invoice */
invoiceApiStatus(params: { "id": number; "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/invoice/status", { params });
}
/** Update an existing invoice */
invoiceApiUpdate(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/invoice/update", { body, params });
}
/** Update an existing invoice category */
postapiInvoiceUpdatecategory(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/invoice/updatecategory", { body, params });
}
/** Return the unique url to the client's invoice */
invoiceApiUri(params: { "id": number; "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/invoice/uri", { params });
}
/** Return all orders for the account */
orderApiAll(params: { "x-auth-key": string; "x-auth-secret": string; "queryOptions.page"?: number; "queryOptions.pageSize"?: number }): Promise<any> {
return this._request("GET", "/api/order/all", { params });
}
/** Change order shipping details */
orderApiChangeShippingDetails(body: unknown, params: { "orderId": number; "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/order/changeshippingdetails", { body, params });
}
/** Change order status */
orderApiChangeStatus(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/order/changestatus", { body, params });
}
/** Delete an existing order */
orderApiDelete(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/order/delete", { body, params });
}
/** Return order details */
orderApiDetails(params: { "id": number; "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/order/details", { params });
}
/** Create an order */
orderApiNew(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/order/new", { body, params });
}
/** Return all supported payment gateways (no currencies means all are supported) */
paymentApiSupported(params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/payment/supported", { params });
}
/** Create a payment link */
paymentLinkApiAll(params: { "x-auth-key": string; "x-auth-secret": string; "queryOptions.page"?: number; "queryOptions.pageSize"?: number }): Promise<any> {
return this._request("GET", "/api/paymentlink/all", { params });
}
/** Delete an existing payment link */
paymentLinkApiDelete(params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/paymentlink/delete", { params });
}
/** Create a payment link */
paymentLinkApiNew(params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/paymentlink/new", { params });
}
/** Return the unique url to the client's payment link */
paymentLinkApiUri(params: { "id": number; "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/paymentlink/uri", { params });
}
/** Return all products for the account */
productApiAll(params: { "x-auth-key": string; "x-auth-secret": string; "queryOptions.page"?: number; "queryOptions.pageSize"?: number }): Promise<any> {
return this._request("GET", "/api/product/all", { params });
}
/** Delete an existing product */
productApiDelete(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/product/delete", { body, params });
}
/** Return product details */
productApiDetails(params: { "id": number; "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/product/details", { params });
}
/** Create a product */
productApiNew(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/product/new", { body, params });
}
/** Update an existing product */
productApiUpdate(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/product/update", { body, params });
}
/** Return all taxes for the account */
taxApiAll(params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/tax/all", { params });
}
/** Delete an existing tax */
taxApiDelete(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/tax/delete", { body, params });
}
/** Create a tax */
taxApiNew(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/tax/new", { body, params });
}
/** Update an existing tax */
taxApiUpdate(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/tax/update", { body, params });
}
/** Return all work types for the account */
workTypeApiAll(params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/worktype/all", { params });
}
/** Delete an existing work type */
workTypeApiDelete(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/worktype/delete", { body, params });
}
/** Return work type details */
workTypeApiDetails(params: { "workTypeId": number; "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("GET", "/api/worktype/details", { params });
}
/** Create a work type */
workTypeApiNew(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/worktype/new", { body, params });
}
/** Return all work types for the account that match the query param */
workTypeApiSearch(params: { "x-auth-key": string; "x-auth-secret": string; "queryOptions.query"?: string; "queryOptions.orderBy"?: string; "queryOptions.order"?: string; "queryOptions.page"?: number; "queryOptions.pageSize"?: number }): Promise<any> {
return this._request("GET", "/api/worktype/search", { params });
}
/** Update an existing work type */
workTypeApiUpdate(body: unknown, params: { "x-auth-key": string; "x-auth-secret": string }): Promise<any> {
return this._request("POST", "/api/worktype/update", { body, params });
}
}
export default EnvoiceAPI;
No reviews yet. Be the first to rate this API.
Yes. Envoice API 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.
Envoice - electronic invoicing: create, send, and track invoices and their delivery status. It exposes 61 endpoints over GET, POST, including GET /api/client/all, GET /api/client/candelete, POST /api/client/delete.
Install the OmniStream SDK for your language and call Envoice API 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 Envoice API itself, and Envoice API'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 an existing client
Return all estimation for the account
Change estimation status
Convert the estimation to an invoice
Delete an existing estimation
Return estimation data
Create an estimation
Send the provided estimation to the client
Retrieve the status of the estimation
Update an existing estimation
Return the unique url to the client's invoice
Return all of the platform supported countries
Return all of the platform supported currencies
Return all of the platform supported Date Formats
Return all of the platform supported UI languages
Return all invoices for the account
Return all invoice categories for the account
Change invoice status
Delete an existing invoice
Delete an existing invoice category
Return invoice data
Create an invoice
Create an invoice category
Return the PDF for the invoice
Send the provided invoice to the accountant
Send the provided invoice to the client
Retrieve the status of the invoice
Update an existing invoice
Update an existing invoice category
Return the unique url to the client's invoice
Return all orders for the account
Change order shipping details
Change order status
Delete an existing order
Return order details
Create an order
Return all supported payment gateways (no currencies means all are supported)
Create a payment link
Delete an existing payment link
Create a payment link
Return the unique url to the client's payment link
Return all products for the account
Delete an existing product
Return product details
Create a product
Update an existing product
Return all taxes for the account
Delete an existing tax
Create a tax
Update an existing tax
Return all work types for the account
Delete an existing work type
Return work type details
Create a work type
Return all work types for the account that match the query param
Update an existing work type