diff --git a/catalogue/apps/io.pilot.orthogonal/metadata.json b/catalogue/apps/io.pilot.orthogonal/metadata.json new file mode 100644 index 00000000..2482f43f --- /dev/null +++ b/catalogue/apps/io.pilot.orthogonal/metadata.json @@ -0,0 +1,106 @@ +{ + "schema_version": 1, + "id": "io.pilot.orthogonal", + "display_name": "Orthogonal", + "tagline": "One key, 851 paid APIs — described in English, metered per user", + "description_md": "# Orthogonal — a catalog of paid tools and APIs, for your agent\n\nOrthogonal is an **API marketplace / meta-API**: a single key fronts **58\nthird-party APIs across 851 endpoints** — lead \u0026 contact enrichment, work-email\nand phone finding, web \u0026 social scraping, AI web search, company / people /\njobs data, weather, voice/phone, email inboxes, and more. You never sign up for\nthe underlying providers and you never juggle their keys — you describe what you\nneed, and pay Orthogonal per call. This Pilot app wraps Orthogonal's control\nplane behind the managed-key broker, so **your agent gets one metered, keyless\nsurface** and a **per-user $5 budget**.\n\n## The workflow: discover → price → execute\n\n1. **Discover — `orthogonal.search`** (the natural-language router ⭐).\n Describe the task in plain English, e.g. *\"find the work email and phone for\n a person given their name and company\"*, and get back the ranked APIs and\n endpoints that can do it, grouped by API with a relevance score. This is the\n \"which API do I need?\" endpoint — you don't have to know the catalog.\n2. **Price — `orthogonal.details`.** Pass an `{api, path}` and get the full\n request schema (every path/query/body param, with types and required flags)\n **and the exact price in dollars**. This is the authoritative price source —\n search and list return `null` prices.\n3. **Execute — `orthogonal.run`.** Call `{api, path, body?, query?}` and\n Orthogonal dispatches to the provider, returns the provider's data, and\n reports the exact `priceCents` charged. This is the **only call that costs\n money**.\n\n`orthogonal.integrate` and `orthogonal.list` round out discovery (code snippets\nand full-catalog browse), and `orthogonal.balance` / `.usage` / `.transactions`\n/ `.check` expose the account ledger — all free.\n\n## What you can do (representative)\n\n- **Contact \u0026 lead enrichment** — apollo, contactout, company-enrich,\n peopledatalabs, coresignal, aviato, crustdata, ocean-io, influencers-club.\n- **Work-email \u0026 phone finding** — tomba, icypeas, contactout, company-enrich.\n- **Web \u0026 AI search** — serper, linkup, tavily, exa/perplexity (unverified set).\n- **Web \u0026 social scraping** — olostep, serper-scrape, scrapecreators (107\n endpoints), scrapegraphai, fiber (92 endpoints).\n- **Company / firmographic / jobs data** — predictleads, fantastic-jobs,\n openfunnel, edges, context-dev, brand-dev.\n- **Weather, voice/phone, email inboxes** — precip, agentphone, agentmail.\n\nRun `orthogonal.search` (or `orthogonal.list`) for the live, complete set.\n\n## Pricing — how you're billed (true to real usage)\n\n- **Only `orthogonal.run` costs money.** Every discovery, pricing, and account\n call is **free**.\n- Each run is billed the **target endpoint's real price**, debited from your\n **$5 per-user budget** in micro-dollars. The `priceCents` in the run response\n is the exact amount charged (real cents); `X-Pilot-Credits-Remaining` on every\n response is your remaining budget in micro-dollars ($5 = 5000000).\n- Prices span **$0.001 – $3.50**. Distribution across the 851 endpoints: **11\n free, ~612 fixed-price, 104 \"dynamic\"** (priced only after the call). Common\n tiers: Basic $0.001–0.01, Standard $0.01–0.10, Premium $0.10–1.00. Cheap\n endpoints to start with: serper ($0.002), olostep / tomba / linkup ($0.01).\n- For a **known** cost up front, call `orthogonal.details` first. For\n **\"dynamic\"** endpoints the price is only knowable from the run response — so\n metering is done on the actual charged amount, and a single call may spend the\n last of your budget; after that, `orthogonal.run` returns **402** (the free\n discovery calls keep working).\n\n## Per-user budget \u0026 fair use\n\nEach Pilot user is seeded **$5 of credit** on first use, metered by the broker\nagainst their signed pilot identity. When the budget is exhausted, billable runs\nreturn 402. To keep the shared master account fair, the broker also enforces a\n**per-IP identity cap**: a small number of distinct pilot identities may claim a\nfresh $5 from any one network, so a depleted user can't farm new budgets by\nminting new identities. The Orthogonal account itself is the ultimate backstop —\nif it runs dry, runs return 402 until it's topped up.\n\n## Good to know\n\n- **Auth is fully managed.** The `orth_live_` master key lives only in the\n broker; the installed adapter is keyless and signs each request with your\n pilot identity. Nothing to configure.\n- **The account is shared** across Pilot users (no per-user sub-accounts on\n Orthogonal), so `orthogonal.balance` / `.usage` / `.transactions` report the\n **account-wide** figures — your **personal** remaining budget is the\n `X-Pilot-Credits-Remaining` header.\n- Errors surface verbatim: 402 insufficient credit, 404 unknown api/path, 5xx\n upstream provider error, 429 rate-limited (back off).\n- `orthogonal.help` is the self-describing discovery contract: it lists every\n method with params, cost note, and latency class.\n", + "vendor": { + "name": "Orthogonal", + "url": "https://orthogonal.com", + "contact": "apps@pilotprotocol.network", + "publisher_pubkey": "ed25519:8zcpGtp5sUw3sjLptDR9W/btumEaOv3DO3tTWN/+PCk=" + }, + "homepage": "https://orthogonal.com", + "source_url": "https://github.com/pilot-protocol/app-template", + "license": "MIT", + "categories": [ + "data", + "search", + "enrichment", + "scraping", + "ai" + ], + "keywords": [ + "orthogonal", + "api-marketplace", + "enrichment", + "lead-enrichment", + "email-finder", + "scraping", + "web-search", + "people-data", + "company-data", + "meta-api", + "natural-language" + ], + "size": { + "bundle_bytes": 5076601, + "installed_bytes": 9137279 + }, + "compat": { + "min_pilot_version": "1.10.0", + "runtimes": [ + "go" + ] + }, + "methods": [ + { + "name": "orthogonal.search", + "summary": "★ Natural-language API router. Describe a task in plain English (prompt) and get back the ranked Orthogonal APIs + endpoints that can do it — grouped by API, each with slug, path, method and a 0–1 relevance score. FREE. Start here when you don't know which of the 851 endpoints to use, then price it with orthogonal.details and execute with orthogonal.run." + }, + { + "name": "orthogonal.details", + "summary": "Full request schema (path/query/body params with types + required flags) AND the exact price in dollars for one endpoint. FREE. Call this before orthogonal.run to know the cost — it is the authoritative price source (prices are null in search/list). Price may be the string 'dynamic' for endpoints priced only after the call." + }, + { + "name": "orthogonal.integrate", + "summary": "Ready-to-paste code snippets for one endpoint. FREE. format ∈ orth-sdk (default) | run-api | curl | x402-fetch | x402-python | all." + }, + { + "name": "orthogonal.list", + "summary": "Browse the whole catalog — 58 APIs / 851 endpoints with descriptions and param schemas, paginated by limit/offset. FREE. Prices are null here; use orthogonal.details for the price of a specific endpoint." + }, + { + "name": "orthogonal.run", + "summary": "★ Execute any of the 851 provider endpoints via {api, path, body?, query?} (the HTTP method is chosen automatically). THIS IS THE ONLY CALL THAT COSTS MONEY: you are billed the target endpoint's real price and it is debited from your $5 Pilot budget. The response returns priceCents (cents actually charged) alongside the provider data, and X-Pilot-Credits-Remaining shows your budget. Once your $5 is spent, run returns 402 while the free discovery calls keep working. Prices range $0.001–$3.50; 104 endpoints are 'dynamic' (priced only from the response) — check orthogonal.details first when you need the cost up front." + }, + { + "name": "orthogonal.balance", + "summary": "Orthogonal account credit balance (string '$X.XX'). FREE, read-only. Note: your per-user $5 Pilot budget is metered separately by the broker and is surfaced in the X-Pilot-Credits-Remaining header on every call — that header, not this account balance, is your personal remaining budget." + }, + { + "name": "orthogonal.check", + "summary": "Preflight the shared account: does it hold ≥ amountCents credits? (amountCents is in Orthogonal credit units = dollars × 100000, so $5 = 500000). FREE." + }, + { + "name": "orthogonal.transactions", + "summary": "Account transaction ledger — purchases, API charges, bonuses, refunds — with amounts, direction and timestamps, paginated. FREE, read-only. Amounts are in the credits unit (dollars × 100000)." + }, + { + "name": "orthogonal.usage", + "summary": "Per-call spend history plus totalSpent over a window (dollar strings), for the shared account. FREE, read-only." + }, + { + "name": "orthogonal.help", + "summary": "Discovery: every method with params, kind, and latency class." + } + ], + "changelog": [ + { + "version": "0.1.0", + "notes": [ + "Released v0.1.0" + ] + } + ], + "links": [ + { + "label": "Source", + "url": "https://github.com/pilot-protocol/app-template" + }, + { + "label": "Website", + "url": "https://orthogonal.com" + } + ] +} diff --git a/catalogue/catalogue.json b/catalogue/catalogue.json index 5c717549..09400e5b 100644 --- a/catalogue/catalogue.json +++ b/catalogue/catalogue.json @@ -538,6 +538,46 @@ "metadata_url": "https://raw.githubusercontent.com/pilot-protocol/pilotprotocol/main/catalogue/apps/io.pilot.sqlite/metadata.json", "metadata_sha256": "9756ef368b02f9808596dc8c640776ba079cdf6119bd334f00efe7d53a1b42d8", "publisher": "ed25519:ebjc66COLR1OBuDZn9gCuePChW8Qxxcxm7RDYAgSLv8=" + }, + { + "id": "io.pilot.orthogonal", + "version": "0.1.0", + "description": "Connect your agent to Orthogonal — one key fronting 58 paid APIs / 851 endpoints (lead & contact enrichment, email & phone finding, web & social scraping, AI search, company/people/jobs data, weather, voice). Describe a task in plain English and Orthogonal's router returns the exact APIs to call; execute any of them through a single run, billed at the real per-call price and metered against a per-user $5 budget. Discovery, pricing and balance calls are free.", + "display_name": "Orthogonal", + "vendor": "Orthogonal", + "license": "MIT", + "source_url": "https://github.com/pilot-protocol/app-template/tree/main/submissions/io.pilot.orthogonal", + "bundle_url": "https://pub-f09f9a4ea848491198d48e329ba030e3.r2.dev/bundles/io.pilot.orthogonal/0.1.0/io.pilot.orthogonal-0.1.0-linux-amd64.tar.gz", + "bundle_sha256": "a773c017d0f9b4498db2123473541dece29b8367a34387d52ca5abc7c2932c7e", + "bundle_size": 5076601, + "bundles": { + "darwin/amd64": { + "bundle_url": "https://pub-f09f9a4ea848491198d48e329ba030e3.r2.dev/bundles/io.pilot.orthogonal/0.1.0/io.pilot.orthogonal-0.1.0-darwin-amd64.tar.gz", + "bundle_sha256": "55a0645bbf8506040d88231e392bc43c517385f64875e1718090b403bf05809b" + }, + "darwin/arm64": { + "bundle_url": "https://pub-f09f9a4ea848491198d48e329ba030e3.r2.dev/bundles/io.pilot.orthogonal/0.1.0/io.pilot.orthogonal-0.1.0-darwin-arm64.tar.gz", + "bundle_sha256": "404cc4588b38e5eb2341cad160b07d39a34f6ca7dd7f4cdaafc56e03dd54bfcd" + }, + "linux/amd64": { + "bundle_url": "https://pub-f09f9a4ea848491198d48e329ba030e3.r2.dev/bundles/io.pilot.orthogonal/0.1.0/io.pilot.orthogonal-0.1.0-linux-amd64.tar.gz", + "bundle_sha256": "a773c017d0f9b4498db2123473541dece29b8367a34387d52ca5abc7c2932c7e" + }, + "linux/arm64": { + "bundle_url": "https://pub-f09f9a4ea848491198d48e329ba030e3.r2.dev/bundles/io.pilot.orthogonal/0.1.0/io.pilot.orthogonal-0.1.0-linux-arm64.tar.gz", + "bundle_sha256": "2882a4db3250bb0e3e63ee1f3d7746eadad823b9e1c6bebf8aa96b8c1f18e9a9" + } + }, + "categories": [ + "data", + "search", + "enrichment", + "scraping", + "ai" + ], + "metadata_url": "https://raw.githubusercontent.com/pilot-protocol/pilotprotocol/main/catalogue/apps/io.pilot.orthogonal/metadata.json", + "metadata_sha256": "e3094041d1bc38841c7fe82ce7596b409dbed25f8a81722a5456898b7360d554", + "publisher": "ed25519:8zcpGtp5sUw3sjLptDR9W/btumEaOv3DO3tTWN/+PCk=" } ] } diff --git a/catalogue/catalogue.json.sig b/catalogue/catalogue.json.sig index 4d445473..0ffea107 100644 --- a/catalogue/catalogue.json.sig +++ b/catalogue/catalogue.json.sig @@ -1 +1 @@ -QoZcxf0VLDfDfMAXZ43tEg2c6RIJ4cTkjoLVPaYQNSdYabf0/HyxqL2+Bc3Q3jCUzwl/iR4aWINZEDpp3QjuAA== +i6yApIChuXNukKprm44tv/+AWKTaJnz/I7+oOuIYn5gAD2LIxgTGxtCAx7YJFvnM1WLaLAm7qK0Oed0AH4wkDA==