מפתח hub

Build with every
Swarme capability.

Discover tools, inspect exact schemas, get a price, and run safely through REST or MCP. The same capability contract powers both.

quote-before-run
GET  /api/capabilities?q=...
GET  /api/capabilities/{slug}
POST /api/capabilities/{slug}/quote
POST /api/capabilities/{slug}/run
GET  /api/capability-runs/{run_id}
01 · Core flow

חיפוש. Describe. Quote. Run.

GET /api/capabilities searches by natural-language query and category. Describe the selected slug before constructing input: its schema is the source of truth for שדות, pricing, קובץ requirements, and execution support.

  1. חיפושFind candidates with ?q=דחיסה%20pdf.
  2. DescribeRead execution.machine_run_status and the input schema.
  3. QuoteConfirm price, wallet clearance, and save the returned quote_id.
  4. הפעלSend the same input, quote ID, and a unique idempotency key.
curlSelect and copy
export SWARME_API_KEY="YOUR_SWARME_API_KEY"
export SWARME_BASE_URL="https://YOUR_SWARME_HOST"

curl "$SWARME_BASE_URL/api/capabilities?q=דחיסה%20pdf&limit=10"
curl "$SWARME_BASE_URL/api/capabilities/compress-pdf"

curl -X POST "$SWARME_BASE_URL/api/capabilities/uuid-generator/quote" \
  -H "Authorization: Bearer $SWARME_API_KEY" -H "Content-Type: application/json" \
  -d '{"input":{},"client_type":"api"}'

curl -X POST "$SWARME_BASE_URL/api/capabilities/uuid-generator/run" \
  -H "Authorization: Bearer $SWARME_API_KEY" \
  -H "Idempotency-Key: YOUR_UNIQUE_REQUEST_ID" -H "Content-Type: application/json" \
  -d '{"input":{},"client_type":"api","quote_id":"YOUR_QUOTE_ID"}'
02 · Controls

Authenticate with least privilege.

צור a scoped API key from Dashboard → Developers. Send Authorization: Bearer YOUR_SWARME_API_KEY. Never put a key in client-side code, URLs, logs, or a repository.

Scopes

Use only the needed scopes: capabilities:read, capabilities:quote, capabilities:run, uploads:write, artifacts:read, and billing:read.

Spend limits

Each client may have a USD cap. Check GET /api/account/balance before paid work; wallet or spend-limit failures are hard stops.

Idempotency

Use one stable Idempotency-Key per logical quote/run attempt. Replays return the original work; a key cannot safely represent different input. Paid API runs may require it.

Quotes

Quote immediately before execution and pass its quote_id. Surface the price or policy failure אל the user.

03 · קבצים

Use short-lived העלאה sessions.

צור a session for the selected slug, העלאה raw bytes אל its returned URL with the dedicated token, then supply העלאה_id (or העלאה_ids) in quote and run input. Validate filename, MIME type, and גודל against describe. Never reuse or log an העלאה token.

curl · העלאה sessionSelect and copy
# צור a session. Keep its העלאה_token private.
curl -X POST "$SWARME_BASE_URL/api/capabilities/compress-pdf/upload-session" \
  -H "Authorization: Bearer $SWARME_API_KEY" -H "Content-Type: application/json" \
  -d '{"input":{"filename":"מסמך.PDF","content_type":"application/PDF","גודל_bytes":12345},"client_type":"api"}'

# Read העלאה_url and העלאה_token from the response, then:
curl -X PUT "YOUR_העלאה_URL" -H "Authorization: Bearer YOUR_העלאה_TOKEN" \
  -H "Content-Type: application/PDF" --data-binary @מסמך.PDF

# Quote and run with העלאה_id; then poll /api/capability-runs/YOUR_RUN_ID.
04 · Lifecycle

Poll status; cancel cooperatively.

GET /api/capability-runs/{run_id}Read queued, running, retrying, completed, failed, or cancelled state.POST /api/capability-runs/{run_id}/cancelCancel queued work or request cooperative cancellation.GET /api/capability-runs/{run_id}/artifactsList permission-checked artifacts, then follow their הורדה קישורים.

machine_run_status is a safety gate

The canonical values are supported, requires_worker, תוכנית_only, and describe_only. supported executes in the declared mode. requires_worker preserves the worker-required response until that runtime is ready. תוכנית_only returns a client תוכנית without server processing. describe_only blocks quote/run. The legacy value runnable is accepted as supported for backward compatibility. Treat missing or unknown values as describe_only and re-describe before execution.

05 · MCP

The same safe flow, as tools.

Connect a streamable HTTP client אל https://swarme.io/he/mcp. Begin with tools/list; do not assume a cached list.

swarme_capabilities_חיפושswarme_capability_describeswarme_account_balanceswarme_כלי_quoteswarme_כלי_runswarme_כלי_statusswarme_כלי_cancelswarme_כלי_artifactsswarme_העלאה_session_צור

Inspect machine_run_status after describe. Quote/run only supported, requires_worker, or תוכנית_only; refuse describe_only, missing, and unknown values. Keep approval boundaries around paid runs and קובץ access.

MCP client configurationSelect and copy
{
  "mcpServers": {
    "swarme": {
      "type": "streamable-http",
      "url": "https://YOUR_SWARME_HOST/mcp",
      "כותרות": { "Authorization": "Bearer ${SWARME_API_KEY}" }
    }
  }
}
06 · Governance

Version and deprecate contracts explicitly.

The contract manifest inventories REST, MCP tools, execution and run states, quote/run and קובץ lifecycles, errors, and scopes. The machine-readable changelog classifies changes as additive, behavioral-risk, or breaking. Unknown manifest elements fail compatibility checks conservatively.

הפעל php bin/check-contract-compatibility.php --baseline=BASELINE.json --candidate=CANDIDATE.json locally or in CI. Breaking changes fail unless their stable change IDs appear in an explicit local approvals קובץ.

Deprecation convention

When deprecation is activated for an element, publish manifest deprecated מטא-דאטה and use standard Deprecation, Sunset, and קישור: <...>; rel=deprecation כותרות plus Swarme-Contract-Version. The configured target is at least 90 days' notice when practical. It is a governance target—not an SLA—and urgent אבטחה, legal, abuse-prevention, or uncontrollable upstream changes may require less notice. This increment configures and מסמכים the convention only; it does not deprecate or הסרה any endpoint.

07 · SDK-free examples

Use any HTTP client.

These examples use environment variables and placeholders only. They contain no credentials. The source distribution also includes copyable, dependency-free examples/rest-agent.php ו examples/mcp-agent.php recipes covering חיפוש through artifacts or cancellation, with an explicit --approve boundary and optional --file=PATH העלאה.

Before integration, run php bin/check-agent-contract.php against bundled versioned fixtures. Supplying --base-url=URL is explicit and performs only read-only public discovery checks. These are reusable starter clients—not a generated SDK or a frozen SDK API.

TypeScript · Node 18+Select and copy
const baseUrl = process.env.SWARME_BASE_URL ?? "https://YOUR_SWARME_HOST";
const apiKey = process.env.SWARME_API_KEY;
if (!apiKey) throw new Error("Set SWARME_API_KEY");

const request = async (path: string, init: RequestInit = {}) => {
  const response = await fetch(`${baseUrl}${path}`, {
    ...init,
    כותרות: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json", ...init.כותרות },
  });
  if (!response.ok) throw new Error(`${response.status}: ${await response.טקסט()}`);
  return response.json();
};
const described = await request("/api/capabilities/uuid-generator");
const rawStatus = described.capability?.execution?.machine_run_status;
const machineStatus = rawStatus === "runnable" ? "supported" : rawStatus;
const allowedStatuses = new Set(["supported", "requires_worker", "תוכנית_only"]);
if (!allowedStatuses.has(machineStatus)) throw new Error("Capability is describe-only; describe again before execution");
const quote = await request("/api/capabilities/uuid-generator/quote", {
  method: "POST", body: JSON.stringify({ input: {}, client_type: "api" }),
});
const run = await request("/api/capabilities/uuid-generator/run", {
  method: "POST", כותרות: { "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify({ input: {}, client_type: "api", quote_id: quote.quote.quote_id }),
});
const status = await request(`/api/capability-runs/${run.run_id}`);
Python · requestsSelect and copy
import os, uuid, requests

base_url = os.getenv("SWARME_BASE_URL", "https://YOUR_SWARME_HOST")
api_key = os.environ["SWARME_API_KEY"]
כותרות = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
described = requests.get(f"{base_url}/api/capabilities/uuid-generator", כותרות=כותרות, timeout=30).json()
raw_status = described.get("capability", {}).get("execution", {}).get("machine_run_status")
machine_status = "supported" if raw_status == "runnable" else raw_status
if machine_status not in {"supported", "requires_worker", "תוכנית_only"}:
    raise RuntimeError("Capability is describe-only; describe again before execution")
quote = requests.post(
    f"{base_url}/api/capabilities/uuid-generator/quote",
    כותרות=כותרות, json={"input": {}, "client_type": "api"}, timeout=30,
).json()
run = requests.post(
    f"{base_url}/api/capabilities/uuid-generator/run",
    כותרות={**כותרות, "Idempotency-Key": str(uuid.uuid4())},
    json={"input": {}, "client_type": "api", "quote_id": quote["quote"]["quote_id"]}, timeout=30,
).json()
status = requests.get(f"{base_url}/api/capability-runs/{run['run_id']}", כותרות=כותרות, timeout=30).json()