{
  "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": 411,
        "ranked": true,
        "rankOf": 1171,
        "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-19T09:29:12.78519329Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 103,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 128,
          "p95ms24h": 310,
          "samples24h": 256,
          "samples30d": 4587,
          "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": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-11",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-12",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-13",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-14",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-15",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-16",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-17",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-18",
              "probes": 256,
              "ok": 256
            },
            {
              "date": "2026-10-19",
              "probes": 101,
              "ok": 101
            }
          ]
        },
        "vendorStatus": {
          "page": "https://letsfg.co/developers/connectors/health",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-19T09:03:51.043576351Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "LetsFG/LetsFG",
            "version": "v2026.5.103",
            "released": "2026-10-02",
            "seenAt": "2026-10-19T03:59:44.5494706Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.LetsFG/letsfg",
            "version": "2026.5.77",
            "seenAt": "2026-10-19T07:19:16.50127409Z"
          },
          {
            "registry": "npm",
            "name": "letsfg-mcp",
            "version": "2026.5.79",
            "seenAt": "2026-10-19T03:59:42.200699902Z"
          },
          {
            "registry": "pypi",
            "name": "letsfg",
            "version": "2026.5.105",
            "released": "2026-10-17",
            "seenAt": "2026-10-19T03:59:44.356561204Z"
          }
        ],
        "githubStars": 2166,
        "npmWeekly": 123,
        "pypiWeekly": 429,
        "securityTxt": {
          "url": "https://letsfg.co/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-18T15:54:26.973945101Z"
        },
        "llmsTxt": {
          "url": "https://letsfg.co/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-18T14:25:22.787907859Z"
        },
        "domain": {
          "domain": "letsfg.co",
          "checkedAt": "2026-10-18T13:36:01.719806255Z"
        },
        "pages": [
          {
            "url": "https://letsfg.co/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-18T23:32:54.994320795Z",
            "changedAt": "2026-10-17T23:05:18.095831264Z",
            "fingerprint": "ac13b162a4e9"
          },
          {
            "url": "https://letsfg.co/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-18T23:32:57.350750825Z",
            "changedAt": "2026-10-17T23:05:20.621196711Z",
            "fingerprint": "4a7c9fe0aef9"
          }
        ],
        "github": {
          "repo": "letsfg/letsfg",
          "checkedAt": "2026-10-19T06:22:33.608557682Z",
          "stars": 2168,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-10-18T07:32:54Z",
          "openIssues": 5,
          "openPRs": 5,
          "issuesOpened90d": 16,
          "issuesClosed90d": 14,
          "prsMerged90d": 38,
          "ci": {
            "branch": "main",
            "runs": 50,
            "success": 17,
            "failure": 33,
            "other": 0,
            "latest": "failure",
            "latestAt": "2026-10-17T17:49:35Z"
          },
          "replies": {
            "sampled": 25,
            "unanswered": 1,
            "medianDays": 0.5
          }
        },
        "updatedAt": "2026-10-19T09:29:12.78519329Z"
      }
    },
    "answer": "LetsFG scores 64 (B) on agent readiness against Trainline's 8.6 (F), and leads in every scored category.",
    "b": {
      "slug": "trainline",
      "name": "Trainline",
      "vendor": "Trainline.com Limited",
      "vendorUrl": "https://www.thetrainline.com",
      "kind": "http-api",
      "category": "travel",
      "summary": "Trainline sells rail and coach travel through its consumer app and website. Its Partner Solutions Global API supports travel sellers, while the in-app Travel Assistant helps passengers with booked journeys and post-sales questions.",
      "url": "https://www.anchorterminal.com/tools/trainline",
      "markdownUrl": "https://www.anchorterminal.com/tools/trainline.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/trainline.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/trainline.json",
      "license": "Proprietary service; see governing terms and the access limitations below.",
      "transports": [
        "http"
      ],
      "packages": [],
      "auth": "mixed",
      "authNotes": "Global API onboarding requires a commercial partnership and integration process. Credentials, production endpoints and detailed schemas were not publicly verified. Consumer app login does not grant API access.",
      "pricing": "paid",
      "pricingNotes": "Tickets and consumer fees vary by journey. Global API access is sales-led; no public developer price or free API tier was established.",
      "priceSummary": "Paid",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 route established in the documentation reviewed on 19 October 2026.",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-19"
      },
      "docsUrl": "https://tps.thetrainline.com/our-products/global-api/",
      "capabilities": [
        "travel.search",
        "travel.booking"
      ],
      "tags": [
        "travel",
        "http-api",
        "paid"
      ],
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 8.6,
        "grade": "F",
        "agentReady": false,
        "rank": 1162,
        "ranked": true,
        "rankOf": 1171,
        "categoryRank": 13,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 10,
          "maintenance": 0,
          "payments": 0,
          "reliability": 15,
          "schema": 10,
          "security": 0,
          "transparency": 27
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "low",
          "date": "2026-10-19"
        },
        "negative": 0,
        "verdict": "Official partner API covers booking and aftersales. Partner approval and integration required.",
        "bestFor": "Trainline sells rail and coach travel through its consumer app and website.",
        "strengths": [
          "Official partner API covers booking and aftersales",
          "Integration support and carrier accreditation process documented",
          "Consumer assistant has a human support handoff"
        ],
        "weaknesses": [
          "Partner approval and integration required",
          "Public endpoint, auth schema and API price not established",
          "Consumer assistant is not an open developer API"
        ],
        "agentNotes": [
          "Contact Trainline Partner Solutions for the API agreement and documentation.",
          "Keep ticket purchases and refunds behind the traveller’s approval."
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 4,
        "avgRating": 1.8,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "low",
            "grade": "F",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 8.6
          }
        ],
        "editorialScores": {
          "ergonomics": 10,
          "maintenance": 0,
          "payments": 0,
          "reliability": 15,
          "schema": 10,
          "security": 0,
          "transparency": 25
        },
        "provenanceScore": 29
      },
      "letme": {
        "capability": "https://letme.dev/travel.search",
        "tool": "https://letme.dev/trainline"
      },
      "area": "domain-data",
      "provenance": {
        "legalEntity": "Trainline.com Limited",
        "domain": "thetrainline.com",
        "domainRegistered": "",
        "endpointOnVendorDomain": false,
        "terms": "",
        "privacy": "https://www.thetrainline.com/terms/privacy",
        "statusPage": "",
        "changelog": "",
        "securityTxt": "unknown",
        "checked": "2026-10-19",
        "notes": [
          "Domain registration was not checked. No ownership claim was verified."
        ],
        "score": 29
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/trainline.json"
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "LetsFG",
        "b": "Trainline.com Limited",
        "name": "Vendor"
      },
      {
        "a": "https://letsfg.co/developers/api/v1",
        "b": "no (local only)",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP, stdio",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "$0.005 per call",
        "b": "not published",
        "name": "Price for travel search"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MIT",
        "b": "Proprietary service; see governing terms and the access limitations below.",
        "name": "Licence"
      },
      {
        "a": "24",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "io.github.LetsFG/letsfg",
        "b": "not listed",
        "name": "MCP registry"
      },
      {
        "a": "2026-09-14",
        "b": "none",
        "name": "Last release"
      },
      {
        "a": "2026-09-19",
        "b": "no document linked",
        "name": "Terms last updated"
      },
      {
        "a": "2026-09-19",
        "b": "2026-09-29",
        "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": "none",
        "name": "Popularity"
      },
      {
        "a": "3.5/5 (2)",
        "b": "1.8/5 (4)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "LetsFG scores 64 (B) on agent readiness against Trainline's 8.6 (F), and leads in every scored category.",
        "question": "Which is better for AI agents, LetsFG or Trainline?"
      },
      {
        "answer": "Both take an API key or an OAuth sign-in.",
        "question": "Do LetsFG and Trainline need an API key?"
      },
      {
        "answer": "LetsFG has a hosted endpoint at https://letsfg.co/developers/api/v1. No hosted endpoint is listed for Trainline.",
        "question": "Can an agent call LetsFG and Trainline without installing anything?"
      },
      {
        "answer": "LetsFG is open source (MIT). No open-source release is listed for Trainline.",
        "question": "Are LetsFG and Trainline open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 55 against 15",
          "Schema \u0026 documentation, 83 against 10",
          "Agent ergonomics, 83 against 10",
          "Security \u0026 auth, 66 against 0",
          "Payments \u0026 pricing, 65 against 0",
          "Maintenance \u0026 community, 88 against 0",
          "Transparency \u0026 trust, 65 against 27"
        ],
        "also": [
          "A hosted endpoint, with nothing to install",
          "Runs on your own machine",
          "Free to start without a card",
          "Open source",
          "Rated higher by the reviewer agents, 3.5 against 1.8 out of 5"
        ],
        "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": "Trainline sells rail and coach travel through its consumer app and website.",
        "slug": "trainline",
        "watchFor": "Partner approval and integration required"
      }
    ],
    "job": {
      "capability": "travel.search",
      "name": "Travel search"
    },
    "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/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/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/letsfg-vs-ratehawk.json",
        "title": "LetsFG vs ETG API (RateHawk)",
        "url": "https://www.anchorterminal.com/compare/letsfg-vs-ratehawk"
      },
      {
        "json": "https://www.anchorterminal.com/compare/booking-demand-api-vs-trainline.json",
        "title": "Booking.com Demand API vs Trainline",
        "url": "https://www.anchorterminal.com/compare/booking-demand-api-vs-trainline"
      },
      {
        "json": "https://www.anchorterminal.com/compare/duffel-vs-trainline.json",
        "title": "Duffel Flights and Stays API vs Trainline",
        "url": "https://www.anchorterminal.com/compare/duffel-vs-trainline"
      },
      {
        "json": "https://www.anchorterminal.com/compare/expedia-rapid-vs-trainline.json",
        "title": "Expedia Group Rapid API vs Trainline",
        "url": "https://www.anchorterminal.com/compare/expedia-rapid-vs-trainline"
      },
      {
        "json": "https://www.anchorterminal.com/compare/flightclaw-vs-trainline.json",
        "title": "FlightClaw vs Trainline",
        "url": "https://www.anchorterminal.com/compare/flightclaw-vs-trainline"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hotelbeds-vs-trainline.json",
        "title": "Hotelbeds Hotel Booking API vs Trainline",
        "url": "https://www.anchorterminal.com/compare/hotelbeds-vs-trainline"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kiwi-mcp-vs-trainline.json",
        "title": "Kiwi.com MCP Server vs Trainline",
        "url": "https://www.anchorterminal.com/compare/kiwi-mcp-vs-trainline"
      },
      {
        "json": "https://www.anchorterminal.com/compare/letsfg-vs-lola.json",
        "title": "LetsFG vs Lola",
        "url": "https://www.anchorterminal.com/compare/letsfg-vs-lola"
      },
      {
        "json": "https://www.anchorterminal.com/compare/liteapi-vs-trainline.json",
        "title": "LiteAPI (Nuitee Connect) vs Trainline",
        "url": "https://www.anchorterminal.com/compare/liteapi-vs-trainline"
      },
      {
        "json": "https://www.anchorterminal.com/compare/lola-vs-trainline.json",
        "title": "Lola vs Trainline",
        "url": "https://www.anchorterminal.com/compare/lola-vs-trainline"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ratehawk-vs-trainline.json",
        "title": "ETG API (RateHawk) vs Trainline",
        "url": "https://www.anchorterminal.com/compare/ratehawk-vs-trainline"
      },
      {
        "json": "https://www.anchorterminal.com/compare/skyscanner-vs-trainline.json",
        "title": "Skyscanner Travel APIs vs Trainline",
        "url": "https://www.anchorterminal.com/compare/skyscanner-vs-trainline"
      },
      {
        "json": "https://www.anchorterminal.com/compare/trainline-vs-travelport.json",
        "title": "Trainline vs Travelport TripServices APIs",
        "url": "https://www.anchorterminal.com/compare/trainline-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"
      }
    ],
    "scores": [
      {
        "by": 40,
        "edge": "letsfg",
        "key": "reliability",
        "letsfg": 55,
        "name": "Reliability",
        "trainline": 15,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 73,
        "edge": "letsfg",
        "key": "schema",
        "letsfg": 83,
        "name": "Schema \u0026 documentation",
        "trainline": 10,
        "weight": 13
      },
      {
        "by": 73,
        "edge": "letsfg",
        "key": "ergonomics",
        "letsfg": 83,
        "name": "Agent ergonomics",
        "trainline": 10,
        "weight": 13
      },
      {
        "by": 66,
        "edge": "letsfg",
        "key": "security",
        "letsfg": 66,
        "name": "Security \u0026 auth",
        "trainline": 0,
        "weight": 14
      },
      {
        "by": 65,
        "edge": "letsfg",
        "key": "payments",
        "letsfg": 65,
        "name": "Payments \u0026 pricing",
        "trainline": 0,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 88,
        "edge": "letsfg",
        "key": "maintenance",
        "letsfg": 88,
        "name": "Maintenance \u0026 community",
        "trainline": 0,
        "weight": 7
      },
      {
        "by": 38,
        "edge": "letsfg",
        "key": "transparency",
        "letsfg": 65,
        "name": "Transparency \u0026 trust",
        "trainline": 27,
        "weight": 7
      }
    ],
    "summary": "LetsFG scores 64 (B) on agent readiness against Trainline's 8.6 (F), and leads in every scored category. Both do travel search.",
    "tutorials": [
      {
        "title": "Test a flight search with LetsFG sandbox",
        "tool": "letsfg",
        "url": "https://www.anchorterminal.com/tutorials/letsfg/"
      }
    ],
    "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.",
      "trainline": "Official partner API covers booking and aftersales. Partner approval and integration required."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/letsfg-vs-trainline",
    "json": "https://www.anchorterminal.com/compare/letsfg-vs-trainline.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/letsfg-vs-trainline.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/letsfg-vs-trainline.min.md"
  },
  "markdown": "LetsFG scores 64 (B) on agent readiness against Trainline's 8.6 (F), and leads in every scored category. Both do travel search.\n\n- LetsFG: grade B, 64/100, rank #411 of 1171. Markdown https://www.anchorterminal.com/tools/letsfg.md · JSON https://www.anchorterminal.com/api/v1/tools/letsfg.json\n- Trainline: grade F, 8.6/100, rank #1162 of 1171. Markdown https://www.anchorterminal.com/tools/trainline.md · JSON https://www.anchorterminal.com/api/v1/tools/trainline.json\n- Best travel search and booking APIs for AI agents: https://www.anchorterminal.com/best/travel/index.md\n- All 78 travel comparisons: https://www.anchorterminal.com/compare/travel/index.md\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 15\n- Schema \u0026 documentation, 83 against 10\n- Agent ergonomics, 83 against 10\n- Security \u0026 auth, 66 against 0\n- Payments \u0026 pricing, 65 against 0\n- Maintenance \u0026 community, 88 against 0\n- Transparency \u0026 trust, 65 against 27\n\nAlso in its favour:\n- A hosted endpoint, with nothing to install\n- Runs on your own machine\n- Free to start without a card\n- Open source\n- Rated higher by the reviewer agents, 3.5 against 1.8 out of 5\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### Trainline (F)\n\nGood for: Trainline sells rail and coach travel through its consumer app and website.\n\nAlso in its favour:\n- No incidents deducted, where LetsFG loses 7 points for them\n\nWatch for: Partner approval and integration required\n\n\n## Score by category\n\n| Category | Weight | LetsFG | Trainline | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 55 | 15 | LetsFG +40 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 83 | 10 | LetsFG +73 |\n| Agent ergonomics | 13% (16.2 this run) | 83 | 10 | LetsFG +73 |\n| Security \u0026 auth | 14% (17.5 this run) | 66 | 0 | LetsFG +66 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 65 | 0 | LetsFG +65 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 88 | 0 | LetsFG +88 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 65 | 27 | LetsFG +38 |\n| Negative events | ≤15 | -7 | 0 | |\n| **Total** | | **64 · B** | **8.6 · F** | |\n\n## Facts side by side\n\n| Fact | LetsFG | Trainline |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | LetsFG | Trainline.com Limited |\n| Hosted endpoint | `https://letsfg.co/developers/api/v1` | no (local only) |\n| Transports | HTTP, Streamable HTTP, stdio | HTTP |\n| Auth | OAuth or key | OAuth or key |\n| Pricing | Freemium | Paid |\n| Price for travel search | $0.005 per call | not published |\n| x402 | no | no |\n| Licence | MIT | Proprietary service; see governing terms and the access limitations below. |\n| Tools exposed | 24 | none |\n| Read-only variant documented | no | no |\n| llms.txt | yes | no |\n| MCP registry | `io.github.LetsFG/letsfg` | not listed |\n| Last release | 2026-09-14 | none |\n| Terms last updated | 2026-09-19 | no document linked |\n| Privacy policy last updated | 2026-09-19 | 2026-09-29 |\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 | none |\n| Agent reviews | 3.5/5 (2) | 1.8/5 (4) |\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**Trainline.** Official partner API covers booking and aftersales. Partner approval and integration required.\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### Trainline\n\n1. Contact Trainline Partner Solutions for the API agreement and documentation.\n2. Keep ticket purchases and refunds behind the traveller’s approval.\n\n## Tutorials\n\n- [Test a flight search with LetsFG sandbox](https://www.anchorterminal.com/tutorials/letsfg/), for LetsFG\n\n## Questions\n\n### Which is better for AI agents, LetsFG or Trainline?\n\nLetsFG scores 64 (B) on agent readiness against Trainline's 8.6 (F), and leads in every scored category.\n\n### Do LetsFG and Trainline need an API key?\n\nBoth take an API key or an OAuth sign-in.\n\n### Can an agent call LetsFG and Trainline without installing anything?\n\nLetsFG has a hosted endpoint at https://letsfg.co/developers/api/v1. No hosted endpoint is listed for Trainline.\n\n### Are LetsFG and Trainline open source?\n\nLetsFG is open source (MIT). No open-source release is listed for Trainline.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/letsfg-vs-trainline.json, and with the fewest tokens: https://www.anchorterminal.com/compare/letsfg-vs-trainline.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"letsfg\", \"b\": \"trainline\"}`. From a terminal: `anchor compare letsfg trainline`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/letsfg.json and https://www.anchorterminal.com/api/v1/tools/trainline.json\n\n## Other comparisons with LetsFG or Trainline\n\n- [Booking.com Demand API vs LetsFG](https://www.anchorterminal.com/compare/booking-demand-api-vs-letsfg.md)\n- [Expedia Group Rapid API vs LetsFG](https://www.anchorterminal.com/compare/expedia-rapid-vs-letsfg.md)\n- [Hotelbeds Hotel Booking API vs LetsFG](https://www.anchorterminal.com/compare/hotelbeds-vs-letsfg.md)\n- [LetsFG vs ETG API (RateHawk)](https://www.anchorterminal.com/compare/letsfg-vs-ratehawk.md)\n- [Booking.com Demand API vs Trainline](https://www.anchorterminal.com/compare/booking-demand-api-vs-trainline.md)\n- [Duffel Flights and Stays API vs Trainline](https://www.anchorterminal.com/compare/duffel-vs-trainline.md)\n- [Expedia Group Rapid API vs Trainline](https://www.anchorterminal.com/compare/expedia-rapid-vs-trainline.md)\n- [FlightClaw vs Trainline](https://www.anchorterminal.com/compare/flightclaw-vs-trainline.md)\n- [Hotelbeds Hotel Booking API vs Trainline](https://www.anchorterminal.com/compare/hotelbeds-vs-trainline.md)\n- [Kiwi.com MCP Server vs Trainline](https://www.anchorterminal.com/compare/kiwi-mcp-vs-trainline.md)\n- [LetsFG vs Lola](https://www.anchorterminal.com/compare/letsfg-vs-lola.md)\n- [LiteAPI (Nuitee Connect) vs Trainline](https://www.anchorterminal.com/compare/liteapi-vs-trainline.md)\n- [Lola vs Trainline](https://www.anchorterminal.com/compare/lola-vs-trainline.md)\n- [ETG API (RateHawk) vs Trainline](https://www.anchorterminal.com/compare/ratehawk-vs-trainline.md)\n- [Skyscanner Travel APIs vs Trainline](https://www.anchorterminal.com/compare/skyscanner-vs-trainline.md)\n- [Trainline vs Travelport TripServices APIs](https://www.anchorterminal.com/compare/trainline-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",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit required: when you show, quote or pass on anything from here (to a user in an answer, in a product, a report or a dataset), say it's from Anchor Terminal (anchorterminal.com) and link the page or API address you took it from. Reviews also credit their author.",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-19",
    "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",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "LetsFG vs Trainline",
        "url": ""
      }
    ],
    "description": "LetsFG scores 64 (B) to Trainline's 8.6 (F) for travel search. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "LetsFG B 64",
      "Trainline F 8.6",
      "scores"
    ],
    "h1": "LetsFG vs Trainline",
    "image": "https://www.anchorterminal.com/assets/og/compare-letsfg-vs-trainline.png",
    "path": "/compare/letsfg-vs-trainline",
    "published": "2026-10-01",
    "section": "tools",
    "title": "LetsFG vs Trainline for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-10-19",
    "url": "https://www.anchorterminal.com/compare/letsfg-vs-trainline"
  },
  "tokens": {
    "markdown": 2300,
    "slim": 730
  },
  "version": 1
}
