---
title: "Run the app's full extraction pipeline over a shared link (TikTok, Instagram, Reels, YouTube, a blog, a maps link) and s"
method: POST
path: "/actions/import_from_url"
tags: ["ai"]
---

# Run the app's full extraction pipeline over a shared link (TikTok, Instagram, Reels, YouTube, a blog, a maps link) and s

`POST /actions/import_from_url`

## Request

- Base URL: `https://findinghorizons.ca/api/v1`
- URL: `https://findinghorizons.ca/api/v1/actions/import_from_url`
- Auth: OAuth 2 (authorization code, authorization URL `https://findinghorizons.ca/api/mcp/authorize`, token URL `https://findinghorizons.ca/api/mcp/oauth/token`, scopes: `ai:import`)

Run the app's full extraction pipeline over a shared link (TikTok, Instagram, Reels, YouTube, a blog, a maps link) and save what it finds as import candidates on the traveller's account. This is one of only two MCP tools that spends the app owner's AI budget rather than yours: it needs the `ai:import` scope, it counts against your daily import cap, and it is tightly rate-limited. It reads any language. Country comes from reverse geocoding and category from Google's own types — never from a model — so a result is a verified place, not a model's guess.

## Headers

- `Idempotency-Key` string, required
- `X-FH-Task` string

## Request body

- object
  - `url` string: The link to extract from
  - `text` string: Optional pasted caption/description to extract from instead of, or as well as, the link
  - `title` string: Optional title from the share sheet
  - `imageUrl` string: With text only: an https picture of the place, kept as its thumbnail (≤3 MB)
  - `imageBase64` string: With text only: the picture as base64 (e.g. one you generated), ≤3 MB
  - `imageIsGenerated` boolean: true when that picture is AI-generated — the app labels it
  - `today` string: The traveller's own date, YYYY-MM-DD, where the action needs one
  - `expectedVersion` integer: For a change to a trip: the planVersion you last read

## Response `200`

Done — { ok, api, action, result, card, operation? }

## Other responses

- `202`: Waiting for the traveller's approval in Finding Horizons
- `400`: Bad body / missing Idempotency-Key
- `401`: No or invalid token
- `403`: Scope not granted
- `409`: Conflict: the plan changed since expectedVersion, or the same key is still running
- `422`: The action said no
- `429`: Rate limited

---

[API](https://skmtc.dev/findinghorizons/apis/finding-horizons-api.md) · [All operations](https://skmtc.dev/findinghorizons/apis/finding-horizons-api/llms.txt) · [OpenAPI document](https://skmtc.dev/findinghorizons/apis/finding-horizons-api/revisions/e347f6070173?raw)
