PipedreamHQ / PipedreamHQ/pipedream
[APP] LetsFG — flights and hotels for AI agents (request base integration; we'll contribute the components)
- Dominant language
- JavaScript
- Stars
- 11.7k
- Forks
- 5.8k
- Avg merge
- 3d 10h
- Merged PRs (30d)
- 102
Description
**Name of app / service**
LetsFG — flights **and hotels** for AI agents and workflows
**Link to developer documentation**
- API docs: https://letsfg.co/developers/docs/
- Hotels: https://letsfg.co/developers/docs/hotels/
- OpenAPI: https://github.com/LetsFG/LetsFG/blob/main/openapi.yaml
- GitHub (SDKs, MCP server): https://github.com/LetsFG/LetsFG
**Is lack of support preventing you from moving forward, or do you have a workaround?**
We're the team behind LetsFG, filing on our own service's behalf. This is a request for a **base integration** so we can then contribute components ourselves via PR — per the process in [How to publish an integration app into public Pipedream](https://pipedream.com/community/t/how-to-publish-an-integration-app-into-public-pipedream/14276) and the precedent in #18894 → #19032.
---
### Auth — a single API key
`X-API-Key` header. One field:
| Field | Type | Notes |
|---|---|---|
| `api_key` | string | Developer API key from https://letsfg.co/developers |
Test request (401 without a key, 200 with one):
```
curl -X POST https://letsfg.co/developers/api/v1/flights/locations/London \
-H "X-API-Key: $KEY"
```
> **Note for anyone reading our earlier revision of this issue:** it proposed a PFS Bearer token. We've dropped that for Pipedream. LetsFG has two auth lanes — a free Bearer token for CLI/agent use, and the Developer API key — and only the API key reaches **both** flights and hotels. One field, one header, both products. A Pipedream user is building a workflow, which is exactly the Developer API's audience.
---
### Proposed components (v1 — read-only)
| Action | Endpoint | Notes |
|---|---|---|
| Search Flights | `POST /api/v1/flights/search` | Hundreds of airlines + major booking sites |
| Resolve Location | `GET /api/v1/flights/locations/{query}` | City/airport name → IATA |
| Resolve Hotel City | `POST /api/v1/hotels/destinations` | Place name → supplier city id |
| Search Hotels | `POST /api/v1/hotels/search` | Bookable, free-cancellation rates |
| Get Hotel Booking | `GET /api/v1/hotels/booking/{job_id}` | Poll a booking; returns confirmation + pay link |
All read-only (`readOnlyHint: true`, `destructiveHint: false`).
**Booking actions are deliberately excluded from v1.** `POST /hotels/book` is asynchronous — it returns a job id and takes minutes, because the rate is blocked at the supplier, the card charged, and the room committed. A synchronous Pipedream action that timed out mid-flight would leave a charged card with no confirmation returned to the user, which is the exact failure the async design exists to prevent. `POST /hotels/cancel` runs 60–90s for the same reason. We'd rather add those as a polling source (or a two-action start/poll pair) once the base integration lands and we can discuss the right pattern with you.
### Hotel commercial terms, so nothing is surprising in review
- Search is free. A payment method on file is required for hotel **search** as well as booking (a search opens a real session at the supplier), so hotel endpoints return `402` without one.
- Only free-cancellation, pay-later rates are sold.
- Booking charges 10% of the price as a non-refundable reservation fee; the balance is paid directly to the supplier via a returned pay link, by the supplier's own auto-cancellation date.
### Practicalities
- Rate limits: 20 req/min hotel search, 6 req/min hotel booking, flight search governed by prepaid credits.
- Flight search is long-running (60–90s) and hotel search up to ~120s — both well inside a Pipedream action timeout, but worth knowing.
- No webhooks today, so no triggers proposed for v1.
We're happy to write and maintain all the components and to keep them current — we just need the base integration released first so `app: "letsfg"` resolves. Thanks!
Contributor guide
Research direction
Start with the LetsFG developer documentation and its openapi.yaml, then review Pipedream's integration publication process and precedents #18894 and #19032. Done means the base integration is released so app: "letsfg" resolves, with the proposed API-key authentication and read-only flight and hotel components ready for later contribution.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- openapi
- Domain
- api
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100