Features

Markdown

CMS import connectors

Guided migration from an external CMS into Externa collections using the existing AI remote JSON import path — not a second sync engine.

Related

Pipeline details: AI imports & sync. Host allowlist: AI configuration / Environment variables. Webhook alternative: AI API.

Profiles

ImportRemoteJson accepts optional profile:

ProfileReshape before flatten
directusDrop Directus system fields (user_created, date_*, …); promote first translation scalars (title, body, …) onto the row
wordpressUnwrap { rendered: "…" } envelopes on first-level keys (title, content, excerpt)

Without profile, behavior is unchanged: extract list → flatten (nested → JSON string).

Recipe (Directus)

  1. Allowlist the CMS host in AI_REMOTE_IMPORT_HOSTS.
  2. Dry-run:
ImportRemoteJson
  url=https://cms.example/items/pages
  profile=directus
  dry_run=true
  upsert_key=slug
  auth_bearer=…
  1. Confirm proposed fields / preview rows (zero writes).
  2. Re-run with dry_run=false (or omit). Large payloads queue via ImportCollectionJob.

AI chat presets: Import from Directus URL / Import from WordPress REST.

Recipe (WordPress REST)

Same flow with profile=wordpress and a /wp-json/wp/v2/posts (or custom post type) URL. Application Passwords: pass auth_header as Basic … when Bearer is not used.

Limits & gaps

TopicDetail
Row capsSync/async thresholds (~200 queue, max 500 per call) — chunk URLs or repeat
MediaFeatured images / file UUIDs are not auto-downloaded into Externa File rows in v1
RelationsStored as JSON strings unless you reshape upstream
LocalesDirectus translations[] → first locale scalars only; full locale matrix is out of scope
Write-backOne-way import only

Prefer outbound webhooks + CI when the goal is rebuild/purge, not content migration.