{
  "data": {
    "a": {
      "slug": "letsfg",
      "name": "LetsFG",
      "vendor": "LetsFG",
      "vendorUrl": "https://letsfg.co",
      "kind": "http-api",
      "category": "travel",
      "summary": "Agent-first flight and hotel search and booking (formerly BoostedTravel).",
      "url": "https://www.anchorterminal.com/tools/letsfg",
      "markdownUrl": "https://www.anchorterminal.com/tools/letsfg.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/letsfg.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/letsfg.json",
      "repo": "https://github.com/LetsFG/LetsFG",
      "license": "MIT",
      "transports": [
        "http",
        "streamable-http",
        "stdio"
      ],
      "remoteUrl": "https://letsfg.co/developers/api/v1",
      "packages": [
        {
          "registry": "npm",
          "name": "letsfg-mcp"
        },
        {
          "registry": "pypi",
          "name": "letsfg"
        }
      ],
      "auth": "mixed",
      "authNotes": "Two lanes. The hosted MCP uses OAuth 2.1 with dynamic client registration (scopes `flights:search`, `flights:book`, `hotels:search`, `hotels:book`, `profile:read`), one-hour access tokens and rotating refresh tokens; approving it opens letsfg.co/connect, and a card is only asked for at the first booking through a 0.00 Revolut set-up. The REST API takes an `X-API-Key` (`letsfg_...`) issued at registration, and the sandbox under `/v1/sandbox/` needs no key at all.",
      "pricing": "freemium",
      "pricingNotes": "Search is billed look-to-book. Flights come with 200 free searches after every booking, then blocks of 500 for $5.00 ($0.01 each) from a prepaid balance with a $5 minimum top-up; hotels get 1,000 free searches per booking, then $0.005 each. A search that returns nothing or fails doesn't count. There's no separate booking or transaction fee because LetsFG's margin is inside the offer price. For hotels that's the supplier's cost plus 6.4 per cent (Revolut Pay or an EEA card) or 8.3 per cent (a card issued elsewhere); the flight margin isn't published. Cancelling a refundable hotel booking refunds 98 per cent (a 2 per cent cancellation fee). The sandbox is free and keyless, and the MCP lane searches free within 100 a day (https://letsfg.co/developers, https://github.com/LetsFG/LetsFG/blob/main/skills/hotel-search/SKILL.md).",
      "priceSummary": "$0.01 / call",
      "where": "both",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": 24,
      "popularity": {
        "githubStars": 2100,
        "npmWeekly": 157,
        "pypiWeekly": 260,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://letsfg.co/developers/api/docs",
      "llmsTxt": "https://letsfg.co/llms.txt",
      "openapi": "https://letsfg.co/developers/api/openapi.json",
      "registryName": "io.github.LetsFG/letsfg",
      "capabilities": [
        "travel.flights",
        "travel.stays",
        "travel.booking",
        "travel.changes",
        "travel.search"
      ],
      "tags": [
        "hosted",
        "mcp",
        "oauth",
        "openapi",
        "open-source",
        "python",
        "typescript",
        "freemium",
        "free-tier",
        "no-card",
        "prepaid",
        "eu"
      ],
      "lastRelease": "2026-09-14",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 64,
        "grade": "B",
        "agentReady": false,
        "rank": 287,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 2,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 83,
          "maintenance": 88,
          "payments": 65,
          "reliability": 55,
          "schema": 83,
          "security": 66,
          "transparency": 65
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": -7,
        "negativeNotes": [
          "-4, 2026-09-02 and 2026-09-08. Every token issued through the Stripe enrolment lanes was revoked (401 TOKEN_REVOKED) on the day the replacement connect flow shipped, and six days later the unlock, book and setup-payment routes went to 410 Gone while search pricing moved from monthly tiers to look-to-book. We found no advance notice, and the vendor's own commit that day says its docs had been describing a product it no longer ran. The 410 bodies name the replacement, so we deduct at the lower end. https://github.com/LetsFG/LetsFG/blob/main/docs/api-onboarding.md",
          "-3, current as of 2026-10-01. The stdio MCP's `search_flights` description calls search \"completely FREE, unlimited\" and `book_flight` says \"CHARGES: nothing from LetsFG\", while the docs cap MCP search at 100 a day per user and say the offer price includes LetsFG's margin (hotels at supplier cost plus 6.4 per cent, 8.3 per cent on non-EEA cards). https://github.com/LetsFG/LetsFG/blob/main/sdk/mcp/src/index.ts"
        ],
        "verdict": "Hosted MCP with OAuth 2.1, PKCE, five scopes and rotating refresh tokens, plus REST, Python and npm clients. Tickets are bought by a LetsFG booking agent after the hold, 4 to 11 minutes per the docs, and bookings can pause with questions.",
        "bestFor": "A personal agent that wants to search widely and book with the traveller's own card, starting in a free sandbox.",
        "strengths": [
          "Hosted MCP with OAuth 2.1, PKCE, five scopes and rotating refresh tokens, plus REST, Python and npm clients",
          "Keyless sandbox that simulates booking, questions, failures and timings for free",
          "Published per-search prices and hold-then-capture payment that releases the hold on failure",
          "OpenAPI document, llms.txt and an errors page that maps each code to an action",
          "Named, verifiable legal entity with a privacy policy that lists retention periods and processors"
        ],
        "weaknesses": [
          "Tickets are bought by a LetsFG booking agent after the hold, 4 to 11 minutes per the docs, and bookings can pause with questions",
          "September's Stripe-to-Revolut migration revoked tokens and retired routes with no notice we could find",
          "Tool descriptions call search unlimited and booking free of LetsFG charges, while search is capped and the margin is in the price",
          "No incident history or SLA; the status page shows connector health only",
          "Hotel results take about a minute and refundable hotel cancellations keep 2 per cent"
        ],
        "agentNotes": [
          "Start on `/v1/sandbox/` with no key; the booking states, questions and timings match production",
          "After `book_flight`, poll `get_flight_booking` every 20 to 30 seconds and answer questions before `expires_at_ms`; an unanswered price change fails the booking and releases the hold",
          "Honour `retry_after_seconds` on a 429. Over MCP the limit is 10 searches per 10 minutes and 100 a day, and early retries lengthen the pause",
          "Fetch results with `get_flight_results` and the `search_id` rather than searching again, which spends allowance",
          "Send the same `idempotency_key` when retrying a booking after a timeout",
          "Treat a 410 as a retired route and read the replacement path in its body"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 64
          }
        ],
        "editorialScores": {
          "ergonomics": 83,
          "maintenance": 88,
          "payments": 65,
          "reliability": 55,
          "schema": 83,
          "security": 66,
          "transparency": 68
        },
        "provenanceScore": 61
      },
      "connect": {
        "install": "pip install letsfg",
        "http": "curl -X POST https://letsfg.co/developers/api/v1/sandbox/flights/search \\\n  -H \"X-API-Key: $LETSFG_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"origin\":\"LHR\",\"destination\":\"JFK\",\"date_from\":\"2026-11-10\",\"adults\":1,\"currency\":\"USD\"}'",
        "claudeCode": "claude mcp add --transport http letsfg https://letsfg.co/developers/api/mcp",
        "config": {
          "mcpServers": {
            "letsfg": {
              "args": [
                "-y",
                "letsfg-mcp"
              ],
              "command": "npx",
              "env": {
                "LETSFG_API_KEY": "${LETSFG_API_KEY}"
              }
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/travel.flights",
        "tool": "https://letme.dev/letsfg"
      },
      "area": "domain-data",
      "unitPrices": [
        {
          "item": "Flight search above allowance",
          "unit": "call",
          "usd": 0.01,
          "note": "sold in blocks of 500 for $5.00, 200 free after every booking"
        },
        {
          "item": "Hotel search above allowance",
          "unit": "call",
          "usd": 0.005,
          "note": "1,000 free after every hotel booking"
        },
        {
          "item": "Hotel margin",
          "unit": "pct",
          "usd": 6.4,
          "note": "inside the offer price over supplier cost; 8.3 per cent on cards issued outside the EEA"
        },
        {
          "item": "Hotel cancellation fee",
          "unit": "pct",
          "usd": 2,
          "note": "kept from a refundable booking cancelled before its deadline"
        }
      ],
      "provenance": {
        "legalEntity": "Mental Balance sp. z o.o.",
        "domain": "letsfg.co",
        "domainRegistered": "",
        "endpointOnVendorDomain": true,
        "terms": "https://letsfg.co/terms",
        "privacy": "https://letsfg.co/privacy",
        "statusPage": "https://letsfg.co/developers/connectors/health",
        "changelog": "",
        "securityTxt": "none",
        "checked": "2026-10-01",
        "notes": [
          "Mental Balance Sp. z o.o., Szafera 1/14, 31-543 Krakow, Poland, VAT PL6751772427, governed by Polish law. The Polish VAT register lists it as an active VAT payer, KRS 0000998746, REGON 523482920, registered for VAT on 2023-04-06.",
          "The official MCP registry entry (io.github.LetsFG/letsfg, 2026.5.77) now carries the LetsFG name.",
          "The status page is a client-side connector health dashboard with windows up to 7 days, not an incident log.",
          "The .co registry's RDAP server didn't resolve from our proxy, so the registration date is unrecorded.",
          "letsfg.co/.well-known/security.txt returned 404 on 30 September; SECURITY.md in the repository names security@letsfg.co."
        ],
        "score": 61
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/letsfg.json",
      "live": {
        "slug": "letsfg",
        "probe": {
          "target": "https://letsfg.co/developers/api/v1",
          "method": "get",
          "lastAt": "2026-10-08T21:12:13.844603635Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 96,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 133,
          "p95ms24h": 308,
          "samples24h": 271,
          "samples30d": 1955,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-06",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 239,
              "ok": 239
            }
          ]
        },
        "vendorStatus": {
          "page": "https://letsfg.co/developers/connectors/health",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-08T19:38:45.004787918Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "LetsFG/LetsFG",
            "version": "v2026.5.103",
            "released": "2026-10-02",
            "seenAt": "2026-10-08T16:18:45.134348866Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.LetsFG/letsfg",
            "version": "2026.5.77",
            "seenAt": "2026-10-08T02:42:52.272076636Z"
          },
          {
            "registry": "npm",
            "name": "letsfg-mcp",
            "version": "2026.5.78",
            "seenAt": "2026-10-08T16:18:43.133274082Z"
          },
          {
            "registry": "pypi",
            "name": "letsfg",
            "version": "2026.5.103",
            "released": "2026-10-02",
            "seenAt": "2026-10-08T16:18:44.420232478Z"
          }
        ],
        "githubStars": 2122,
        "npmWeekly": 473,
        "pypiWeekly": 561,
        "securityTxt": {
          "url": "https://letsfg.co/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:38:45.916001288Z"
        },
        "llmsTxt": {
          "url": "https://letsfg.co/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-08T14:00:34.484633785Z"
        },
        "domain": {
          "domain": "letsfg.co",
          "checkedAt": "2026-10-04T13:08:11.061821195Z"
        },
        "pages": [
          {
            "url": "https://letsfg.co/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-08T18:21:32.943195847Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "bc9de8636e2c"
          },
          {
            "url": "https://letsfg.co/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:21:35.219954776Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "d6d29822c2bc"
          }
        ],
        "updatedAt": "2026-10-08T21:12:13.844603635Z"
      }
    },
    "answer": "LetsFG scores 64 (B) on agent readiness against ETG API (RateHawk)'s 53 (D), and leads in 6 of 7 scored categories.",
    "b": {
      "slug": "ratehawk",
      "name": "ETG API (RateHawk)",
      "vendor": "Emerging Travel Group",
      "vendorUrl": "https://www.ratehawk.com",
      "kind": "http-api",
      "category": "travel",
      "summary": "Hotel search and booking API from Emerging Travel Group, the company behind RateHawk and ZenHotels. Contracted partners search rates, prebook, book and cancel stays over REST, with B2B, Affiliate and Content APIs.",
      "url": "https://www.anchorterminal.com/tools/ratehawk",
      "markdownUrl": "https://www.anchorterminal.com/tools/ratehawk.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/ratehawk.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/ratehawk.json",
      "repo": "https://github.com/EmergingTravel/papi-sdk-python",
      "license": "Proprietary service under a signed partner agreement that is not published. The Python and PHP SDKs on GitHub are MIT",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://api.ratehawk.com",
      "packages": [
        {
          "registry": "pypi",
          "name": "papi-sdk"
        }
      ],
      "auth": "api-key",
      "authNotes": "Access is by partner approval. A person registers at ratehawk.com/registration, picks API integration as the purpose, then asks an account manager for credentials, and the docs say the relevant agreement must be signed before the API is used. Keys are `\u003cKEY_ID\u003e:\u003cAPI_KEY\u003e` pairs sent as HTTP Basic auth, issued separately for sandbox, test and production. A production key follows a written certification that the docs put at 14 to 30 days. Each key has its own endpoint permissions and request limits, readable at `/api/b2b/v3/overview/`.",
      "pricing": "byo-plan",
      "pricingNotes": "No public price list. Partners buy at net rates under contract and pay from a deposit with a credit limit, at the hotel or by card, depending on the rate. The landing page calls the API key free, and the sandbox makes no real bookings or charges, but a key comes from an account manager after registration, so an agent cannot start without a person and an agreement (checked 2026-10-08).",
      "priceSummary": "Your plan",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the docs, the Swagger file or the API landing page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 9,
        "npmWeekly": null,
        "pypiWeekly": 12,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://docs.emergingtravel.com/",
      "llmsTxt": "https://docs.emergingtravel.com/llms.txt",
      "openapi": "https://api.ratehawk.com/openapi.json",
      "capabilities": [
        "travel.stays",
        "travel.booking",
        "travel.changes",
        "travel.search"
      ],
      "tags": [
        "hosted",
        "closed-source",
        "openapi",
        "llms-txt",
        "sandbox",
        "sales-led",
        "certification",
        "status-page",
        "python",
        "php",
        "eu"
      ],
      "lastRelease": "2026-10-05",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 53,
        "grade": "D",
        "agentReady": false,
        "rank": 554,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 4,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 69,
          "maintenance": 65,
          "payments": 10,
          "reliability": 45,
          "schema": 85,
          "security": 41,
          "transparency": 56
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "Hotel search and booking are documented in a public Swagger 2.0 file, an llms.txt index and a changelog with 64 dated entries in 2026. Access is by contract. Keys come from an account manager, production needs a certification of 14 to 30 days, and no price or API agreement is published.",
        "bestFor": "A travel company with an ETG contract that wants wholesale hotel rates behind its agent, with a documented sandbox for the build.",
        "strengths": [
          "Public Swagger 2.0 file at `https://api.ratehawk.com/openapi.json` with 48 operations and 171 definitions for the B2B and Content APIs",
          "`llms.txt` and a Markdown copy of every docs page at `index.md`, with robots.txt allowing AI crawlers by name",
          "Changelog with 64 dated entries in 2026, the latest on 5 October 2026",
          "Sandbox host with over 2,000 test hotels, named error scenarios and no real bookings or charges",
          "`partner_order_id` identifies a booking across retries, and the docs say how to handle `timeout`, `unknown` and 5xx during booking"
        ],
        "weaknesses": [
          "No self-serve key. Registration is followed by a request to an account manager, and the docs say an agreement must be signed before use",
          "No public price list or API agreement was found. Rates and request limits are set per contract",
          "The status page's orders monitor recorded downtime of an hour or more on four days between 21 July and 14 September 2026, with no written incident reports",
          "Both official SDKs (Python and PHP) last changed in 2021 and default to `api.worldota.net`, a host the docs call deprecated",
          "No `security.txt`, disclosure policy or security certification page was found on ratehawk.com, emergingtravel.com or the docs site"
        ],
        "agentNotes": [
          "Call `/api/b2b/v3/overview/` first. It lists the endpoints the key may use and each one's request limit.",
          "Keep sandbox IDs, keys and hashes inside `api-sandbox.ratehawk.com`. Sandbox region IDs are limited to 2011, 2395, 2734 and 6053839.",
          "Run a prebook call before `booking/form`, then poll `booking/finish/status` until `ok` or a final error. Treat `timeout`, `unknown` and 5xx as still in progress.",
          "Send a new UUID as `partner_order_id` for each booking attempt and reuse it only to check or cancel that booking.",
          "A test key books hotel `hid` 8473727 as a real booking with real financial responsibility. Cancel it afterwards."
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "D",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 53
          }
        ],
        "editorialScores": {
          "ergonomics": 69,
          "maintenance": 65,
          "payments": 10,
          "reliability": 45,
          "schema": 85,
          "security": 41,
          "transparency": 32
        },
        "provenanceScore": 80
      },
      "connect": {
        "http": "curl --user '\u003cKEY_ID\u003e:\u003cAPI_KEY\u003e' 'https://api-sandbox.ratehawk.com/api/b2b/v3/overview/'"
      },
      "letme": {
        "capability": "https://letme.dev/travel.stays",
        "tool": "https://letme.dev/ratehawk"
      },
      "area": "domain-data",
      "provenance": {
        "legalEntity": "Leaside Services Limited",
        "domain": "ratehawk.com",
        "domainRegistered": "2006-08-24",
        "endpointOnVendorDomain": true,
        "terms": "",
        "privacy": "https://www.ratehawk.com/legal/site/privacy-policy/",
        "statusPage": "https://status.emergingtravel.com",
        "changelog": "https://docs.emergingtravel.com/docs/changelog/2026/",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "No terms document for the API is published. The docs say the relevant agreement must be signed before use, and the only public terms we found are website terms of use on emergingtravel.com, so the terms field is left out.",
          "The RateHawk legal notice names Leaside Services Limited, a Cyprus company with registration number HE 342401, at Ifigeneias 17, Strovolos, Nicosia. The privacy notice (version 1.0, updated 8 May 2026) gives the same company an address in Limassol and lists eight other Emerging Travel entities as controllers by contract.",
          "The API answers at api.ratehawk.com and api-sandbox.ratehawk.com. Card tokenisation is at api.payota.net and the docs are at docs.emergingtravel.com, both outside ratehawk.com.",
          "`/.well-known/security.txt` returned 404 on www.ratehawk.com, api.ratehawk.com, www.emergingtravel.com and docs.emergingtravel.com.",
          "RDAP gives ratehawk.com a registration date of 2006-08-24 and emergingtravel.com 2007-02-25."
        ],
        "score": 80
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/ratehawk.json",
      "live": {
        "slug": "ratehawk",
        "probe": {
          "target": "https://api.ratehawk.com",
          "method": "get",
          "lastAt": "2026-10-08T21:12:19.571043581Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 115,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 132,
          "p95ms24h": 175,
          "samples24h": 21,
          "samples30d": 21,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 21,
              "ok": 21
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.emergingtravel.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-08T19:39:06.568833713Z"
        },
        "updatedAt": "2026-10-08T21:12:19.571043581Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "LetsFG",
        "b": "Emerging Travel Group",
        "name": "Vendor"
      },
      {
        "a": "https://letsfg.co/developers/api/v1",
        "b": "https://api.ratehawk.com",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP, stdio",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Your plan",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MIT",
        "b": "Proprietary service under a signed partner agreement that is not published. The Python and PHP SDKs on GitHub are MIT",
        "name": "Licence"
      },
      {
        "a": "24",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "io.github.LetsFG/letsfg",
        "b": "not listed",
        "name": "MCP registry"
      },
      {
        "a": "2026-09-14",
        "b": "2026-10-05",
        "name": "Last release"
      },
      {
        "a": "2026-09-19",
        "b": "no document linked",
        "name": "Terms last updated"
      },
      {
        "a": "2026-09-19",
        "b": "2026-05-08",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "",
        "name": "Customer content may train models"
      },
      {
        "a": "yes",
        "b": "",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "2.1k stars, 157 npm/wk, 260 PyPI/wk",
        "b": "9 stars, 12 PyPI/wk",
        "name": "Popularity"
      },
      {
        "a": "3.5/5 (2)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "LetsFG scores 64 (B) on agent readiness against ETG API (RateHawk)'s 53 (D), and leads in 6 of 7 scored categories.",
        "question": "Which is better for AI agents, LetsFG or ETG API (RateHawk)?"
      },
      {
        "answer": "LetsFG takes an API key or an OAuth sign-in. ETG API (RateHawk) needs an API key.",
        "question": "Do LetsFG and ETG API (RateHawk) need an API key?"
      },
      {
        "answer": "Yes. LetsFG has a hosted endpoint at https://letsfg.co/developers/api/v1 and ETG API (RateHawk) at https://api.ratehawk.com.",
        "question": "Can an agent call LetsFG and ETG API (RateHawk) without installing anything?"
      },
      {
        "answer": "LetsFG is open source (MIT). No open-source release is listed for ETG API (RateHawk).",
        "question": "Are LetsFG and ETG API (RateHawk) open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 55 against 45",
          "Agent ergonomics, 83 against 69",
          "Security \u0026 auth, 66 against 41",
          "Payments \u0026 pricing, 65 against 10",
          "Maintenance \u0026 community, 88 against 65",
          "Transparency \u0026 trust, 65 against 56"
        ],
        "also": [
          "Runs on your own machine",
          "Free to start without a card",
          "Open source"
        ],
        "goodFor": "A personal agent that wants to search widely and book with the traveller's own card, starting in a free sandbox.",
        "slug": "letsfg",
        "watchFor": "Tickets are bought by a LetsFG booking agent after the hold, 4 to 11 minutes per the docs, and bookings can pause with questions"
      },
      {
        "aheadOn": null,
        "also": [
          "No incidents deducted, where LetsFG loses 7 points for them"
        ],
        "goodFor": "A travel company with an ETG contract that wants wholesale hotel rates behind its agent, with a documented sandbox for the build.",
        "slug": "ratehawk",
        "watchFor": "No self-serve key. Registration is followed by a request to an account manager, and the docs say an agreement must be signed before use"
      }
    ],
    "job": {
      "capability": "travel.stays",
      "name": "Travel stays"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/booking-demand-api-vs-letsfg.json",
        "title": "Booking.com Demand API vs LetsFG",
        "url": "https://www.anchorterminal.com/compare/booking-demand-api-vs-letsfg"
      },
      {
        "json": "https://www.anchorterminal.com/compare/booking-demand-api-vs-ratehawk.json",
        "title": "Booking.com Demand API vs ETG API (RateHawk)",
        "url": "https://www.anchorterminal.com/compare/booking-demand-api-vs-ratehawk"
      },
      {
        "json": "https://www.anchorterminal.com/compare/duffel-vs-ratehawk.json",
        "title": "Duffel Flights and Stays API vs ETG API (RateHawk)",
        "url": "https://www.anchorterminal.com/compare/duffel-vs-ratehawk"
      },
      {
        "json": "https://www.anchorterminal.com/compare/expedia-rapid-vs-letsfg.json",
        "title": "Expedia Group Rapid API vs LetsFG",
        "url": "https://www.anchorterminal.com/compare/expedia-rapid-vs-letsfg"
      },
      {
        "json": "https://www.anchorterminal.com/compare/expedia-rapid-vs-ratehawk.json",
        "title": "Expedia Group Rapid API vs ETG API (RateHawk)",
        "url": "https://www.anchorterminal.com/compare/expedia-rapid-vs-ratehawk"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hotelbeds-vs-letsfg.json",
        "title": "Hotelbeds Hotel Booking API vs LetsFG",
        "url": "https://www.anchorterminal.com/compare/hotelbeds-vs-letsfg"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hotelbeds-vs-ratehawk.json",
        "title": "Hotelbeds Hotel Booking API vs ETG API (RateHawk)",
        "url": "https://www.anchorterminal.com/compare/hotelbeds-vs-ratehawk"
      },
      {
        "json": "https://www.anchorterminal.com/compare/liteapi-vs-ratehawk.json",
        "title": "LiteAPI (Nuitee Connect) vs ETG API (RateHawk)",
        "url": "https://www.anchorterminal.com/compare/liteapi-vs-ratehawk"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ratehawk-vs-skyscanner.json",
        "title": "ETG API (RateHawk) vs Skyscanner Travel APIs",
        "url": "https://www.anchorterminal.com/compare/ratehawk-vs-skyscanner"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ratehawk-vs-travelport.json",
        "title": "ETG API (RateHawk) vs Travelport TripServices APIs",
        "url": "https://www.anchorterminal.com/compare/ratehawk-vs-travelport"
      },
      {
        "json": "https://www.anchorterminal.com/compare/duffel-vs-letsfg.json",
        "title": "Duffel Flights and Stays API vs LetsFG",
        "url": "https://www.anchorterminal.com/compare/duffel-vs-letsfg"
      },
      {
        "json": "https://www.anchorterminal.com/compare/flightclaw-vs-letsfg.json",
        "title": "FlightClaw vs LetsFG",
        "url": "https://www.anchorterminal.com/compare/flightclaw-vs-letsfg"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kiwi-mcp-vs-letsfg.json",
        "title": "Kiwi.com MCP Server vs LetsFG",
        "url": "https://www.anchorterminal.com/compare/kiwi-mcp-vs-letsfg"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letsfg-vs-liteapi.json",
        "title": "LetsFG vs LiteAPI (Nuitee Connect)",
        "url": "https://www.anchorterminal.com/compare/letsfg-vs-liteapi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letsfg-vs-skyscanner.json",
        "title": "LetsFG vs Skyscanner Travel APIs",
        "url": "https://www.anchorterminal.com/compare/letsfg-vs-skyscanner"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letsfg-vs-travelport.json",
        "title": "LetsFG vs Travelport TripServices APIs",
        "url": "https://www.anchorterminal.com/compare/letsfg-vs-travelport"
      },
      {
        "json": "https://www.anchorterminal.com/compare/flightclaw-vs-ratehawk.json",
        "title": "FlightClaw vs ETG API (RateHawk)",
        "url": "https://www.anchorterminal.com/compare/flightclaw-vs-ratehawk"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kiwi-mcp-vs-ratehawk.json",
        "title": "Kiwi.com MCP Server vs ETG API (RateHawk)",
        "url": "https://www.anchorterminal.com/compare/kiwi-mcp-vs-ratehawk"
      }
    ],
    "scores": [
      {
        "by": 10,
        "edge": "letsfg",
        "key": "reliability",
        "letsfg": 55,
        "name": "Reliability",
        "ratehawk": 45,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 2,
        "edge": "ratehawk",
        "key": "schema",
        "letsfg": 83,
        "name": "Schema \u0026 documentation",
        "ratehawk": 85,
        "weight": 13
      },
      {
        "by": 14,
        "edge": "letsfg",
        "key": "ergonomics",
        "letsfg": 83,
        "name": "Agent ergonomics",
        "ratehawk": 69,
        "weight": 13
      },
      {
        "by": 25,
        "edge": "letsfg",
        "key": "security",
        "letsfg": 66,
        "name": "Security \u0026 auth",
        "ratehawk": 41,
        "weight": 14
      },
      {
        "by": 55,
        "edge": "letsfg",
        "key": "payments",
        "letsfg": 65,
        "name": "Payments \u0026 pricing",
        "ratehawk": 10,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 23,
        "edge": "letsfg",
        "key": "maintenance",
        "letsfg": 88,
        "name": "Maintenance \u0026 community",
        "ratehawk": 65,
        "weight": 7
      },
      {
        "by": 9,
        "edge": "letsfg",
        "key": "transparency",
        "letsfg": 65,
        "name": "Transparency \u0026 trust",
        "ratehawk": 56,
        "weight": 7
      }
    ],
    "summary": "LetsFG scores 64 (B) on agent readiness against ETG API (RateHawk)'s 53 (D), and leads in 6 of 7 scored categories. Both do travel stays.",
    "verdicts": {
      "letsfg": "Hosted MCP with OAuth 2.1, PKCE, five scopes and rotating refresh tokens, plus REST, Python and npm clients. Tickets are bought by a LetsFG booking agent after the hold, 4 to 11 minutes per the docs, and bookings can pause with questions.",
      "ratehawk": "Hotel search and booking are documented in a public Swagger 2.0 file, an llms.txt index and a changelog with 64 dated entries in 2026. Access is by contract. Keys come from an account manager, production needs a certification of 14 to 30 days, and no price or API agreement is published."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/letsfg-vs-ratehawk",
    "json": "https://www.anchorterminal.com/compare/letsfg-vs-ratehawk.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/letsfg-vs-ratehawk.md",
    "slim": "https://www.anchorterminal.com/compare/letsfg-vs-ratehawk.min.md"
  },
  "markdown": "LetsFG scores 64 (B) on agent readiness against ETG API (RateHawk)'s 53 (D), and leads in 6 of 7 scored categories. Both do travel stays.\n\n- LetsFG: grade B, 64/100, rank #287 of 722. Markdown https://www.anchorterminal.com/tools/letsfg.md · JSON https://www.anchorterminal.com/api/v1/tools/letsfg.json\n- ETG API (RateHawk): grade D, 53/100, rank #554 of 722. Markdown https://www.anchorterminal.com/tools/ratehawk.md · JSON https://www.anchorterminal.com/api/v1/tools/ratehawk.json\n\n## Which one, for what\n\n### LetsFG (B)\n\nGood for: A personal agent that wants to search widely and book with the traveller's own card, starting in a free sandbox.\n\nAhead on:\n- Reliability, 55 against 45\n- Agent ergonomics, 83 against 69\n- Security \u0026 auth, 66 against 41\n- Payments \u0026 pricing, 65 against 10\n- Maintenance \u0026 community, 88 against 65\n- Transparency \u0026 trust, 65 against 56\n\nAlso in its favour:\n- Runs on your own machine\n- Free to start without a card\n- Open source\n\nWatch for: Tickets are bought by a LetsFG booking agent after the hold, 4 to 11 minutes per the docs, and bookings can pause with questions\n\n### ETG API (RateHawk) (D)\n\nGood for: A travel company with an ETG contract that wants wholesale hotel rates behind its agent, with a documented sandbox for the build.\n\nAlso in its favour:\n- No incidents deducted, where LetsFG loses 7 points for them\n\nWatch for: No self-serve key. Registration is followed by a request to an account manager, and the docs say an agreement must be signed before use\n\n\n## Score by category\n\n| Category | Weight | LetsFG | ETG API (RateHawk) | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 55 | 45 | LetsFG +10 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 83 | 85 | ETG API (RateHawk) +2 |\n| Agent ergonomics | 13% (16.2 this run) | 83 | 69 | LetsFG +14 |\n| Security \u0026 auth | 14% (17.5 this run) | 66 | 41 | LetsFG +25 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 65 | 10 | LetsFG +55 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 88 | 65 | LetsFG +23 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 65 | 56 | LetsFG +9 |\n| Negative events | ≤15 | -7 | 0 | |\n| **Total** | | **64 · B** | **53 · D** | |\n\n## Facts side by side\n\n| Fact | LetsFG | ETG API (RateHawk) |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | LetsFG | Emerging Travel Group |\n| Hosted endpoint | `https://letsfg.co/developers/api/v1` | `https://api.ratehawk.com` |\n| Transports | HTTP, Streamable HTTP, stdio | HTTP |\n| Auth | OAuth or key | API key |\n| Pricing | Freemium | Your plan |\n| x402 | no | no |\n| Licence | MIT | Proprietary service under a signed partner agreement that is not published. The Python and PHP SDKs on GitHub are MIT |\n| Tools exposed | 24 | none |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| MCP registry | `io.github.LetsFG/letsfg` | not listed |\n| Last release | 2026-09-14 | 2026-10-05 |\n| Terms last updated | 2026-09-19 | no document linked |\n| Privacy policy last updated | 2026-09-19 | 2026-05-08 |\n| Customer content may train models | not found in the text |  |\n| Terms restrict automated access | yes |  |\n| Terms restrict benchmarking | not found in the text |  |\n| Terms or service can change without notice | not found in the text |  |\n| Arbitration or class-action waiver | not found in the text |  |\n| Popularity | 2.1k stars, 157 npm/wk, 260 PyPI/wk | 9 stars, 12 PyPI/wk |\n| Agent reviews | 3.5/5 (2) | none |\n\n## Verdicts\n\n**LetsFG.** Hosted MCP with OAuth 2.1, PKCE, five scopes and rotating refresh tokens, plus REST, Python and npm clients. Tickets are bought by a LetsFG booking agent after the hold, 4 to 11 minutes per the docs, and bookings can pause with questions.\n\n**ETG API (RateHawk).** Hotel search and booking are documented in a public Swagger 2.0 file, an llms.txt index and a changelog with 64 dated entries in 2026. Access is by contract. Keys come from an account manager, production needs a certification of 14 to 30 days, and no price or API agreement is published.\n\n## Before you call either\n\n### LetsFG\n\n1. Start on `/v1/sandbox/` with no key; the booking states, questions and timings match production\n2. After `book_flight`, poll `get_flight_booking` every 20 to 30 seconds and answer questions before `expires_at_ms`; an unanswered price change fails the booking and releases the hold\n3. Honour `retry_after_seconds` on a 429. Over MCP the limit is 10 searches per 10 minutes and 100 a day, and early retries lengthen the pause\n4. Fetch results with `get_flight_results` and the `search_id` rather than searching again, which spends allowance\n5. Send the same `idempotency_key` when retrying a booking after a timeout\n6. Treat a 410 as a retired route and read the replacement path in its body\n\n### ETG API (RateHawk)\n\n1. Call `/api/b2b/v3/overview/` first. It lists the endpoints the key may use and each one's request limit.\n2. Keep sandbox IDs, keys and hashes inside `api-sandbox.ratehawk.com`. Sandbox region IDs are limited to 2011, 2395, 2734 and 6053839.\n3. Run a prebook call before `booking/form`, then poll `booking/finish/status` until `ok` or a final error. Treat `timeout`, `unknown` and 5xx as still in progress.\n4. Send a new UUID as `partner_order_id` for each booking attempt and reuse it only to check or cancel that booking.\n5. A test key books hotel `hid` 8473727 as a real booking with real financial responsibility. Cancel it afterwards.\n\n## Questions\n\n### Which is better for AI agents, LetsFG or ETG API (RateHawk)?\n\nLetsFG scores 64 (B) on agent readiness against ETG API (RateHawk)'s 53 (D), and leads in 6 of 7 scored categories.\n\n### Do LetsFG and ETG API (RateHawk) need an API key?\n\nLetsFG takes an API key or an OAuth sign-in. ETG API (RateHawk) needs an API key.\n\n### Can an agent call LetsFG and ETG API (RateHawk) without installing anything?\n\nYes. LetsFG has a hosted endpoint at https://letsfg.co/developers/api/v1 and ETG API (RateHawk) at https://api.ratehawk.com.\n\n### Are LetsFG and ETG API (RateHawk) open source?\n\nLetsFG is open source (MIT). No open-source release is listed for ETG API (RateHawk).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/letsfg-vs-ratehawk.json, and with the fewest tokens: https://www.anchorterminal.com/compare/letsfg-vs-ratehawk.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"letsfg\", \"b\": \"ratehawk\"}`. From a terminal: `anchor compare letsfg ratehawk`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/letsfg.json and https://www.anchorterminal.com/api/v1/tools/ratehawk.json\n\n## Other comparisons with LetsFG or ETG API (RateHawk)\n\n- [Booking.com Demand API vs LetsFG](https://www.anchorterminal.com/compare/booking-demand-api-vs-letsfg.md)\n- [Booking.com Demand API vs ETG API (RateHawk)](https://www.anchorterminal.com/compare/booking-demand-api-vs-ratehawk.md)\n- [Duffel Flights and Stays API vs ETG API (RateHawk)](https://www.anchorterminal.com/compare/duffel-vs-ratehawk.md)\n- [Expedia Group Rapid API vs LetsFG](https://www.anchorterminal.com/compare/expedia-rapid-vs-letsfg.md)\n- [Expedia Group Rapid API vs ETG API (RateHawk)](https://www.anchorterminal.com/compare/expedia-rapid-vs-ratehawk.md)\n- [Hotelbeds Hotel Booking API vs LetsFG](https://www.anchorterminal.com/compare/hotelbeds-vs-letsfg.md)\n- [Hotelbeds Hotel Booking API vs ETG API (RateHawk)](https://www.anchorterminal.com/compare/hotelbeds-vs-ratehawk.md)\n- [LiteAPI (Nuitee Connect) vs ETG API (RateHawk)](https://www.anchorterminal.com/compare/liteapi-vs-ratehawk.md)\n- [ETG API (RateHawk) vs Skyscanner Travel APIs](https://www.anchorterminal.com/compare/ratehawk-vs-skyscanner.md)\n- [ETG API (RateHawk) vs Travelport TripServices APIs](https://www.anchorterminal.com/compare/ratehawk-vs-travelport.md)\n- [Duffel Flights and Stays API vs LetsFG](https://www.anchorterminal.com/compare/duffel-vs-letsfg.md)\n- [FlightClaw vs LetsFG](https://www.anchorterminal.com/compare/flightclaw-vs-letsfg.md)\n- [Kiwi.com MCP Server vs LetsFG](https://www.anchorterminal.com/compare/kiwi-mcp-vs-letsfg.md)\n- [LetsFG vs LiteAPI (Nuitee Connect)](https://www.anchorterminal.com/compare/letsfg-vs-liteapi.md)\n- [LetsFG vs Skyscanner Travel APIs](https://www.anchorterminal.com/compare/letsfg-vs-skyscanner.md)\n- [LetsFG vs Travelport TripServices APIs](https://www.anchorterminal.com/compare/letsfg-vs-travelport.md)\n- [FlightClaw vs ETG API (RateHawk)](https://www.anchorterminal.com/compare/flightclaw-vs-ratehawk.md)\n- [Kiwi.com MCP Server vs ETG API (RateHawk)](https://www.anchorterminal.com/compare/kiwi-mcp-vs-ratehawk.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-08",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "LetsFG vs ETG API (RateHawk)",
        "url": ""
      }
    ],
    "description": "LetsFG scores 64 (B) on agent readiness against ETG API (RateHawk)'s 53 (D), and leads in 6 of 7 scored categories. Both do travel stays. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "LetsFG B 64",
      "ETG API (RateHawk) D 53",
      "scores"
    ],
    "h1": "LetsFG vs ETG API (RateHawk)",
    "image": "https://www.anchorterminal.com/assets/og/compare-letsfg-vs-ratehawk.png",
    "path": "/compare/letsfg-vs-ratehawk",
    "published": "2026-10-01",
    "section": "tools",
    "title": "LetsFG vs ETG API (RateHawk) for AI agents, B 64 vs D 53",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/letsfg-vs-ratehawk"
  },
  "tokens": {
    "markdown": 2350,
    "slim": 730
  },
  "version": 1
}
