# Ahel > Ahel: data and tools for your AI, from one catalog, paid from a prepaid balance. Ahel lists data tasks and provider tools in one catalog: categories, then platforms, then tasks, then the tools and providers that can do each task. Your AI searches the catalog, inspects one task or tool for its exact inputs, status and price, runs it, and reads the result. Every run is kept in your history with its quote, hold and final charge. ## Catalog The public catalog needs no account. Every task and tool shows its status (ready, needs connection, coming soon) with the exact reason when it cannot run yet, its providers, and Ahel's price. Signed in, the same catalog is at https://ahel.ai/app/catalog. - Catalog: https://ahel.ai/catalog - Search the catalog: https://ahel.ai/catalog?q=company ## Connect your AI Add one address to Claude, ChatGPT, Cursor, Claude Code, Codex or any other MCP-capable tool. - Setup: https://ahel.ai/agents - Address: https://mcp.ahel.ai The address speaks MCP and needs an access token. Any MCP-capable client obtains one through the OAuth flow advertised at https://mcp.ahel.ai/.well-known/oauth-protected-resource; clients that support dynamic registration need no manual setup. ## Set up from a chat message Getting started in the app gives the person one message to send their AI: Set up Ahel: https://ahel.ai/llms.txt with team token: Then call get_started and tell me what you can do. The key starts with ahel_tk_. It acts as that team only, and can search, price and run tools and read the balance, nothing else. When you get this message: 1. Keep the key secret. Never print it back, never put it in a URL, a commit or a shared file. Store it where your client keeps secrets, or as the environment variable AHEL_TOKEN. 2. If your client takes an MCP address, add https://mcp.ahel.ai/?workspace= with the header X-Ahel-Token: . For Claude Code: claude mcp add --transport http Ahel "https://mcp.ahel.ai/?workspace=" --header "X-Ahel-Token: " Your first call, right after adding the server: the get_started tool. The app is waiting for it to show the person you are connected. 3. If it does not, use the HTTP API below with the same header. Your first call: GET https://ahel.ai/api/platform/v2/balance, which checks the key. Then GET https://ahel.ai/api/v1/call/?input=value runs a task. 4. After that first call, tell the person what you can do for them. 5. Then follow the operating guide: https://ahel.ai/skill.md ## MCP tools tools/list serves 12 tools. Start with the four catalog tools: search, inspect, run, read the result. The ids, statuses and prices are the same ones the catalog pages show. The full operating guide, with every error code and what to do about it: https://ahel.ai/skill.md - capability_search: find tasks and tools by words, a task id or a tool id. Inputs: query, platform, kind (task or tool), status (ready, needs_connection, coming_soon, unavailable), limit (1 to 50). Reads only. - capability_inspect: one task or tool by id: its exact inputs, status and reason, and Ahel's price for each provider (unknown when Ahel has no rate). Inputs: id; optionally arguments, max_items, timeout_seconds, endpoint_ids, exclude_endpoint_ids to price that exact run. Pricing a run reserves, charges and starts nothing. - run_capability: run one data task or tool. It is quoted, the exact price is held from the workspace balance, then it starts. It waits up to wait_seconds (default 20, at most 50, 0 for none): a run that finishes in that time answers its cost and rows in the same answer; a longer one answers its execution id. Inputs: id (a task or tool id) or capability_id, arguments, max_items (1 to 100), timeout_seconds (1 to 180), wait_seconds, idempotency_key. Ahel picks the provider unless endpoint_ids pins one or more; exclude_endpoint_ids leaves providers out. Endpoint ids come from capability_inspect. An item that is not ready is refused with its reason before anything is quoted. Data collection only: a tool that writes or has a side effect is refused. Give idempotency_key (or an Idempotency-Key header): a retry with the same key answers the same run, with no new charge. - capability_run_status: without execution_id, the tools this workspace can run with their providers and prices; with execution_id, that run's state, attempts and cost; with results true, its rows and provenance, as many as fit in one answer (offset reads the rest); generated images and audio as signed links. include_raw true also answers the provider's own answer and the normalised output, which repeat the rows. In a result of several rows each text value is cut at 4,000 characters (the row's truncated_fields names it); full_text true answers it whole. Reads only. - catalog_request: when capability_search answers verdict none, ask Ahel to add what is missing. Inputs: what (the job in plain words), example_input, max_price_usd (the most for one run). Asking again for the same thing adds to the same request. Answers a request id. Free. - feedback: rate one run or request of this workspace. Inputs: id (an execution id or a request id), rating (good or bad), note. Free. - review: after using a finished run's result, rate how useful it was. Inputs: run_id (the execution id), usefulness (useful, partly, not_useful or not_sure), reason. One review per run; a later one replaces it. Free. - balance: the workspace's prepaid balance in USD, what runs in flight hold, what settled runs used today and this month (Owner only), the daily cap of the API key in use, and the top-up link. Reads only. The other 4 tools: - search, fetch: the same catalog in the shape ChatGPT connectors require. - get_started: what Ahel is, the balance, the three steps (search, inspect with arguments for the exact price, run) and ready example prompts. Reads only. - my_tools: the team's own tools (APIs and servers added under Your own tools in the app), each with its inputs. Call one with my_tools {"tool": "/", "arguments": {...}}. ## Use from scripts Scripts and AI tools without MCP call Ahel over HTTPS with a team API key in the X-Ahel-Token header (or Authorization: Bearer). Get the key under Getting started (the team's Default key) or Team, API keys in the app. A key acts as the team, run-only; it may carry a daily cap in USD. Reference: https://docs.ahel.ai/api and https://ahel.ai/openapi.json curl -sG https://ahel.ai/api/v1/call/companies.enrich \ -H "X-Ahel-Token: $AHEL_TOKEN" -H "X-Ahel-Max-Cost: 0.50" \ --data-urlencode "domain=example.com" GET /api/v1/call/ takes a task, tool or endpoint id; every query parameter is an input. It quotes, holds the exact price, runs, waits and charges once, then answers the rows with X-Ahel-Cost-USD, X-Ahel-Charge-Status and X-Ahel-Request-Id (the run id). X-Ahel-Max-Cost refuses a run quoted above it with 402 max_cost_exceeded and no charge. A key over its daily cap gets 402 spend_cap_exceeded. Send Idempotency-Key so a retry answers the same run. ## HTTP API Under https://ahel.ai/api/platform/v2/, with an API key (above) or the app's own signed-in session. Errors answer {"error": {"code", "message", "retryable"}}. - GET catalog?q=: search tasks and tools. GET catalog/{id}: one of them. - GET balance: the team's funds, and the key's daily cap and spend today. - GET capabilities: the service descriptor and the capabilities this workspace can run, with their endpoints and prices. - POST quotes: capability_id, registry_revision, arguments, limits (max_items, timeout_seconds), and optionally endpoint_ids or exclude_endpoint_ids. Answers a quote that expires, the exact hold and the available balance. Nothing is held yet. - POST runs: the quoted request plus quote_id and request_id (8 to 64 letters, digits, - or _). Holds the exact amount, then dispatches. 402 insufficient_balance when the balance cannot cover it, with nothing run; 409 quote_expired or quote_mismatch. The same request_id answers the same run again. - GET runs/{id}: the run's state and its charge_status (pending, unknown, charged, released or not_charged). Settled once, only when the provider's settlement is final; until then the hold stays. - GET runs/{id}/results: the run's rows and provenance, plus output and raw (the provider's own answer); ?raw=0 leaves those two out. ## Pricing - A prepaid balance. No top-up fee. Pay per call; each call’s price is shown before it runs. No subscription. - Runs go through Ahel's own provider accounts: no provider sign-ups and no keys needed. Where workspace keys are available, a key of your own is optional. - Before a run, Ahel quotes it and holds the exact worst case from your balance. When the provider reports its final usage, Ahel settles the call at the quoted Ahel rates, never more than the hold, and releases the rest. - A run your balance cannot cover is refused before anything is sent to a provider. A run that never reaches a provider is released in full. Misses are free when the provider does not bill them; provider-billed misses are charged at cost, without Ahel's margin. Provider-billed failures follow the quoted billing rules. A run that never reaches a provider is not charged. Pending charges stay held until the provider settles. - Where workspace keys are available, calls on your own provider keys are billed by that provider, not by Ahel. Ahel holds and charges nothing for them. - A tool whose provider price is not confirmed shows Price unknown and cannot run on your balance until it has a price. - Start free, no card needed. Top up by card or crypto in Team, Billing. No top-up fee. Pay per call; each call’s price is shown before it runs. Auto top-up by card adds funds when the balance runs low, only if you turn it on. Paid balance does not expire. - Pricing: https://ahel.ai/pricing ## Contact - General + sales: karl@ahel.ai - Privacy / data requests (incl. DPA): privacy@ahel.ai