agentsclimarketplace

Masheev api

Skill masheev/skills/skills/masheev-api

Official Agent Skills for integrating Masheev into your applications

Install
npx -y skills add masheev/skills --skill masheev-api

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Use when calling the Masheev API for contacts, conversations, messages, inboxes, AI agents, knowledge base, or any server-to-server integration. Covers authentication with API keys, the @masheev/client tRPC client, REST endpoints, pagination, rate limiting, and common CRUD operations. Use this skill whenever someone asks to "call the Masheev API", "create contacts", "list conversations", "send messages", "manage inboxes", or integrate Masheev into their backend. Also use when setting up @masheev/client in Node.js, React, Next.js, or React Native.

The file declares its own license as Apache-2.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.6 KB, as published. Nobody here has run it

Masheev API

Server-side API for managing contacts, conversations, messages, inboxes, AI agents, and more. The API uses tRPC — install @masheev/client for type-safe access.

Quick Start

npm install @masheev/client

Server-Side (Node.js / API Routes)

import { apiClient, authClient } from "@masheev/client/server";

// List conversations
const conversations = await apiClient.conversations.list.query({
  status: "open",
  limit: 20,
});

// Send a message
await apiClient.messages.create.mutate({
  conversationId: "conv_...",
  role: "agent",
  content: "Thanks for reaching out! Let me help with that.",
});

React (Client-Side)

import { apiClient, authClient } from "@masheev/client/react";

function ConversationList() {
  const { data } = apiClient.conversations.list.useQuery({ status: "open" });
  return data?.map((c) => <div key={c.id}>{c.subject}</div>);
}

Next.js (TanStack Start)

import { apiClient } from "@masheev/client/tanstack";

React Native

import { apiClient } from "@masheev/client/native";

Authentication

The API uses session-based authentication via Better Auth. For server-to-server integrations, use API keys:

// API key in Authorization header
fetch("https://api.masheev.com/api/...", {
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
  },
});

Generate API keys in the Masheev dashboard: Settings > Developers > API Keys

API Reference

Each domain is a separate reference file with full endpoint details, input schemas, and response types.

DomainEndpointsReference
Contactslist, get, create, update, merge, GDPR deletereferences/contacts.md
Conversationslist, get, update, batchUpdate, archivereferences/conversations.md
Messageslist, get, createreferences/messages.md
Inboxeslist, get, create, update, deletereferences/inboxes.md
AI Agentslist, get, create, update, deletereferences/ai-agents.md
Webhookslist, create, update, delete, test, regenerateSecretSee masheev-webhooks skill
Knowledgelist, create, sync, delete, searchreferences/knowledge.md
Automationslist, get, create, update, delete, activatereferences/automations.md
Billingplans, balance, budget, topup, invoicesreferences/billing.md
Organizationlist, get, update, inviteUser, removeUserreferences/org.md

Data Model

Key Entities

EntityID PrefixDescription
Organizationorg_Your account / workspace
Inboxinb_A channel endpoint (chat, WhatsApp, email, etc.)
Contactcon_A customer or visitor
Conversationconv_A thread between a contact and your team/AI
Messagemsg_A single message within a conversation
AI Agentaia_An AI agent configuration
Webhookwh_A webhook subscription

Common Enums

type Channel = "voice" | "sms" | "whatsapp" | "chat" | "email" | "instagram" | "google_reviews";
type ConversationStatus = "open" | "pending" | "snoozed" | "resolved";
type Priority = "low" | "medium" | "high" | "urgent";
type MessageRole = "contact" | "ai" | "agent" | "system";
type MessageStatus = "pending" | "sent" | "delivered" | "read" | "failed";
type AssigneeType = "ai" | "agent" | "unassigned";

Common Patterns

Pagination

// Cursor-based pagination
let cursor: string | undefined;
const allContacts = [];

do {
  const page = await apiClient.contacts.list.query({
    limit: 100,
    cursor,
  });
  allContacts.push(...page.items);
  cursor = page.nextCursor;
} while (cursor);

Rate Limiting

The API enforces rate limits per IP and per user. When rate-limited, you receive a 429 response.

async function withRetry<T>(fn: () => Promise<T>, maxRetries = 3): Promise<T> {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      return await fn();
    } catch (error: any) {
      if (error.data?.httpStatus === 429 && attempt < maxRetries - 1) {
        const delay = Math.pow(2, attempt) * 1000; // Exponential backoff
        await new Promise((r) => setTimeout(r, delay));
        continue;
      }
      throw error;
    }
  }
  throw new Error("Max retries exceeded");
}

Error Handling

tRPC errors include structured data:

try {
  await apiClient.contacts.create.mutate({ ... });
} catch (error) {
  if (error instanceof TRPCClientError) {
    console.error(error.message);       // Human-readable message
    console.error(error.data?.code);    // "NOT_FOUND", "FORBIDDEN", etc.
    console.error(error.data?.zodError); // Validation errors (if input was invalid)
  }
}

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.