PipedreamHQ / PipedreamHQ/pipedream

[APP] LetsFG — flights and hotels for AI agents (request base integration; we'll contribute the components)

Open
#21,544 2 comments 0 reactions 0 assignees View on GitHub
app enhancement triaged
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.