# Import videos from a JSON feed

Learn how to import videos from a JSON feed URL in your Business Account, review the AI-mapped fields, and run the import once or on a recurring schedule.

Direct Import pulls videos from your own API's JSON endpoint, so you don't upload them one by one and no engineering work is needed. Octo, Genuin's Supervised Intelligence interface, maps your API's fields to Genuin's system fields, even when they use non-standard names.

You can import once, or set a scheduler that imports hourly, daily, weekly, or monthly. Each scheduler saves imported videos as drafts for review, publishes them immediately, or posts them on a separate schedule. Genuin deduplicates videos, filters them by duration, and parses the feed data on its backend.

Feed imports are part of content curation in your Business Account, under the rules that Control sets for every post. For the product as a whole, see [Control: what it does and where to start](https://begenuin.com/developers/browse-by-products/control/control-what-it-does-and-where-to-start). For the AI that maps your fields, see [Supervised Intelligence: what it does and where to start](https://begenuin.com/developers/browse-by-products/supervised-intelligence/supervised-intelligence-what-it-does-and-where-to-start).

## Add the JSON feed URL

1. In your Business Account, go to **Curate** > **Activity** > **+ New Post**.
   ![The Activity page in your Business Account with status tiles for Awaiting to post, Processing, Scheduled to post, Approved, and Rejected, and the + New Post button highlighted.](https://cdn.sanity.io/images/lnrtvsvr/development/ed6fb86c204538242ff86cbdbb5fbfac177e9b21-1877x912.jpg)
   *Step 1: Click + New Post on the Activity page to open the import options.*
2. Select **Direct Import**.
   ![The Import Videos page in your Business Account with three import options, Social Import, Direct Import, and Clip it, and Direct Import highlighted.](https://cdn.sanity.io/images/lnrtvsvr/development/63209a497387d0c55fd269edcae5c95cf0a1280d-1394x803.jpg)
   *Step 2: Direct Import takes a link or an upload from any source.*
3. From the dropdown, choose **JSON**. The dropdown offers RSS/MRSS, XML, and JSON, and you must select one of them.
   ![The Direct Import page in your Business Account with the source type dropdown open, listing RSS/MRSS, XML, and JSON, and JSON highlighted.](https://cdn.sanity.io/images/lnrtvsvr/development/1cbe02b4ff6f265f8ef7f1630cecb905cdd7d4c5-1440x878.jpg)
   *Step 3: Choose JSON from the source type dropdown.*
4. Paste your JSON endpoint URL. Genuin starts validating the URL immediately.
   ![The Direct Import page in your Business Account with JSON selected, an example endpoint URL pasted, a loading spinner in the URL field, and the upload area disabled.](https://cdn.sanity.io/images/lnrtvsvr/development/dcebb80cf68d9b8c78d19ca797f8bca15271d407-1440x879.jpg)
   *Step 4: Validation starts as soon as you paste the URL, and the upload area is disabled.*

While a URL is in the field, the upload section is disabled. Remove the URL to re-enable it.

Validation runs three checks in order: format, duplicate scheduler, and accessibility. The URL must pass all three before Genuin maps its fields.

## Review the AI-mapped fields

After the URL passes validation, Octo maps the feed's fields to Genuin's system fields. An animation plays with the message "AI is mapping the required fields…", and mapping takes about 10–15 seconds.

![The JSON Field Validation panel in your Business Account with a validated endpoint URL and the message that AI is mapping the required fields in about 10–15 seconds.](https://cdn.sanity.io/images/lnrtvsvr/development/196de1050c72df8499a485b3a8e1a2efcf372484-1440x880.jpg)
*AI mapping starts once the URL passes validation.*

Genuin maps these fields automatically: `video_id`, `video_url`, `title`, `description`, `duration`, `thumbnail`, and `published_at`. Each AI-mapped field is highlighted for about 2 seconds and shows a match rate (%) label.

To override a mapping, choose a different field from its dropdown. Verify every AI-mapped field before you import because required fields must be mapped.

![The JSON Field Validation panel in your Business Account marked Fields matched, with system fields such as video_id mapped to feed fields, each showing a match rate like 97% Match.](https://cdn.sanity.io/images/lnrtvsvr/development/c5cfc1648164e23df1080c52173a8e851321d968-1440x879.jpg)
*Check each AI mapping and its match rate before you import.*

### Check the field reference (Optional)

We recommend checking the field reference before you import because it shows which fields your feed must provide. Click the **here** link in the notice that the system expects a specific JSON format to open the **Field Reference** window.

![The notice in the Direct Import form in your Business Account that the system expects a specific JSON format, with its here link highlighted above the Authorization and Query Parameter settings.](https://cdn.sanity.io/images/lnrtvsvr/development/d6d7d91e715c00e0ab6b5db258f3f10b86350469-1303x570.jpg)
*The here link in the notice opens the field reference.*

![The Field Reference window in Business Account listing id, title, video_url, duration, description, thumbnail, and published_at, each marked Required or Optional with its type and purpose.](https://cdn.sanity.io/images/lnrtvsvr/development/c482b41d633a8ec33949fa75c9c32a645cd45d2c-1440x901.jpg)
*The required fields are id, video_url, and duration.*

| Field | Required |
| --- | --- |
| id | Required |
| title | Optional |
| video_url | Required |
| duration | Required |
| description | Optional |
| thumbnail | Optional |
| published_at | Optional |

### Add authorization and query parameters (Optional)

- **Authorization**: select the toggle, then choose **Basic Auth** and enter a username and password, or choose **Bearer Token** and enter the token. When the toggle is on, its fields are required.
- **Query Parameter**: select the toggle, then add a **Key**, a **Value**, and a **Max Value**. Use pagination for large feeds.
  ![The Direct Import form in your Business Account with the Authorization toggle on, showing Auth type, Username, and Password, and the Query Parameter toggle on, showing Key, Value, and Max Value.](https://cdn.sanity.io/images/lnrtvsvr/development/ba8416261377f92b862f1e99045c37168f7b9ba1-1302x1363.jpg)
  *Turn on Authorization or Query Parameter only when your feed needs them.*

## Choose the destination and import

1. Under **Import in**, choose a community and a group. The **Import** button stays disabled until you select both.
   ![The Import in bar of the Direct Import form in your Business Account with a community and a group selected, and the Import button highlighted next to Schedule.](https://cdn.sanity.io/images/lnrtvsvr/development/4bc78e65982cf4cf0afd18a7c12925808bfe92c0-1440x880.jpg)
   *Step 1: Choose a community and a group under Import in, then click Import.*
2. Click **Import** to open the import options.
3. Choose how to run the import:
   - **Direct Import** runs a one-time import and doesn't create a scheduler. Genuin shows "Your videos are being imported from your JSON".
   - **Import & Schedule** runs the import immediately and creates a scheduler. Genuin shows "Your scheduler was successfully set and videos are being imported".
     ![The Import and schedule? dialog in your Business Account, noting the scheduler would run daily at 11am and save drafts, with Direct Import highlighted next to Import & Schedule.](https://cdn.sanity.io/images/lnrtvsvr/development/64a8acbc9540363e5a6351ccc3539b63c9e9865f-1440x901.jpg)
     *Step 3: Direct Import runs the import once, without a scheduler.*
     ![The Activity page in your Business Account with a Videos are being imported notification at the top right and the new import listed under Processing.](https://cdn.sanity.io/images/lnrtvsvr/development/84e59ab599888c52e6c7489b63ceedab1feb37d8-1447x879.jpg)
     *Step 3: The notification confirms the import, and the job appears under Processing.*
     ![The Import and schedule? dialog in your Business Account with the Import & Schedule button highlighted, which imports now and adds the URL to a scheduler.](https://cdn.sanity.io/images/lnrtvsvr/development/7da536ad89e91cf3de93c4ddec4dc104dba99157-1440x901.jpg)
     *Step 3: Import & Schedule runs the import now and creates a scheduler.*
     ![The Activity page in your Business Account with a notification that the scheduler was set and videos are being imported, and the import listed under Processing.](https://cdn.sanity.io/images/lnrtvsvr/development/1833843503c18a0db5088ca7836b7022bdda3b75-1447x879.jpg)
     *Step 3: The notification after the import starts and the scheduler is set.*

In the **Community** and **Group** dropdowns under **Import in**, you choose communities first, then one or more groups in each. Both lists include AI-generated and manually created options, with **Select All** at the top and a button at the bottom to create a new one. Below the selectors, Business Account shows how many community-group combinations you've picked.

## Review and publish imported videos

Imported videos appear in **Curate** > **Activity**, which sorts posts into five tabs: Awaiting to post, Processing, Scheduled to post, Approved, and Rejected. Each imported video appears in the **Processing** tab first, then moves to **Awaiting to post**.

1. Go to **Curate** > **Activity**.
   ![The Awaiting to post tab of the Activity page in your Business Account, showing a Direct Import batch of 100 imported videos with Select All, Approve, Move, and Reject.](https://cdn.sanity.io/images/lnrtvsvr/development/195d4a4ca1cca4eaf25283e147e3306509f3cbf0-1393x880.jpg)
   *Step 1: Imported videos wait in Awaiting to post for your review.*
2. Click a video to open the **Post Details** view.
3. Click **Approve & Post** to publish the video, or **Reject** to decline it.
4. Click **Next** to move to the next post. **Next** moves across posts, even across import tasks.
   ![The Post Details page in your Business Account for an imported video, with About, Analytics, a video preview, description, transcript, and links, and the Reject and Approve & Post buttons highlighted.](https://cdn.sanity.io/images/lnrtvsvr/development/27caf970999f89ed57c30518db7d3707f7de26b5-1395x814.jpg)
   *Step 4: Approve & Post publishes the video, and Reject declines it.*

If a scheduled import fails, Activity shows an error message and a retry option. Learn more about review in [Moderation Baselines and Queue](https://begenuin.com/developers/browse-by-products/control/moderation-baselines-and-queue).

In **Awaiting to post**, each video also offers **Move** and **Schedule**. **Move** needs a community and group other than the current one, from the same brand owner, or Business Account shows an error. A scheduled video shows in both **Awaiting to post** and **Scheduled to post** until its time, then moves to **Approved**.

To see only feed imports, click **Filter** and select **Direct Import** under **Module**.

## Create a scheduler from the Scheduler panel

Besides **Import & Schedule**, you can create a scheduler directly from the Scheduler panel. This flow sets the import frequency and the posting option together.

1. On the **Direct Import** page, click **Schedule** to open the **Scheduler** panel. Under **Manage Schedulers**, click **+ Add URL**, then choose **Add JSON**.
   ![The Scheduler panel in your Business Account under Manage Schedulers, with the + Add URL menu open on Scheduler 1, listing Add RSS/MRSS, Add XML, and Add JSON.](https://cdn.sanity.io/images/lnrtvsvr/development/ef579a2acca69434bc7ed846f649126858507503-1440x880.jpg)
   *Step 1: Add JSON adds a JSON feed to the scheduler.*
2. Add the JSON URL.
   ![Scheduler 1 in the Scheduler panel in your Business Account, with the Scheduler Name field and a new JSON source row highlighted below it.](https://cdn.sanity.io/images/lnrtvsvr/development/265a136bee57b45dc716e5fda8da1e35b9665d6e-1440x880.jpg)
   *Step 2: Open the JSON source row to enter the feed URL.*
3. Wait for validation and AI mapping, which take about 10–15 seconds.
   ![The JSON panel of a scheduler in your Business Account with an endpoint URL in the Add JSON field and the message that AI is mapping the required fields.](https://cdn.sanity.io/images/lnrtvsvr/development/a85376ce50b8202075a3d5bbab9fc158f9016b33-1440x880.jpg)
   *Step 3: Genuin validates the URL and maps the fields.*
4. Configure the field mapping, authorization, and query parameters.
   ![The JSON panel of a scheduler in your Business Account with matched fields and match rates, the Authorization and Query Parameter settings turned on, and the Save button highlighted.](https://cdn.sanity.io/images/lnrtvsvr/development/a41501516747626e9f40954912b262ded9fa8ec9-720x1264.jpg)
   *Step 4: Check the mapping and settings, then click Save.*
5. Choose the **Import frequency**: **Hourly**, **Daily**, **Weekly**, or **Monthly**.
   ![The Scheduler panel in your Business Account with Import frequency set to Hourly, showing Repeat Every, Starting at, and Time zone, and Schedule publishing unavailable under Posting.](https://cdn.sanity.io/images/lnrtvsvr/development/51fadd3d1f3f20d61d9d30fea66350f107348b5a-680x940.jpg)
   *Step 5: Hourly imports repeat at a set interval from a start time.*
   ![The Scheduler panel in your Business Account with Import frequency set to Daily, a Time of 11:00 AM, a Time zone, and the Day field disabled.](https://cdn.sanity.io/images/lnrtvsvr/development/8bd464217513466f4036e5ebd4f7233e54925cf4-680x940.jpg)
   *Step 5: Daily imports run at one time each day.*
   ![The Scheduler panel in your Business Account with Import frequency set to Weekly, Day set to Monday, Time set to 11:00 AM, and a Time zone.](https://cdn.sanity.io/images/lnrtvsvr/development/6a58e43eb80735bc8dd8292f8d0393c4d2c6fe01-685x942.jpg)
   *Step 5: Weekly imports run on one day of the week.*
   ![The Scheduler panel in your Business Account with Import frequency set to Monthly, Day set to 30th, and a notice that the import runs on the last available day in shorter months.](https://cdn.sanity.io/images/lnrtvsvr/development/02c010f40471eb7ace487b0ad134262bf8e31fcd-686x1011.jpg)
   *Step 5: Monthly imports run on one day of the month, or on its last day when that date doesn't exist.*
6. Choose a posting option:
   - **Save as drafts (manual posting)**: imported videos wait for manual review.
   - **Auto publish immediately**: imported videos are published automatically after import.
   - **Schedule publishing**: videos post on their own schedule, separate from the import schedule.
     ![The Posting section of a scheduler in your Business Account with Schedule publishing selected and a Post frequency of Daily at 03:00 PM, after a daily import at 11:00 AM.](https://cdn.sanity.io/images/lnrtvsvr/development/43267c62f66e6cbc84f7e20970961e7f55bf7077-675x1038.jpg)
     *Step 6: Schedule publishing adds a separate post frequency, here 4 hours after the import.*

Auto-published videos appear in the **Approved** tab as soon as the import completes. With **Schedule publishing**, videos wait in **Awaiting to post** and **Scheduled to post**, tagged **Scheduled**, until their posting time.

### Import and posting schedules

The import frequency decides when Genuin fetches the feed and which posting frequencies you can pair with it.

| Import frequency | When Genuin fetches the feed | Posting frequencies allowed |
| --- | --- | --- |
| Daily | Every day at the selected time | Daily, weekly, or monthly |
| Weekly | On the selected day and time | Weekly or monthly |
| Monthly | On the selected date | Monthly only |

Hourly imports can only save drafts or auto-publish; scheduled publishing isn't available for them. Across all four frequencies, that makes 14 import and posting combinations, and JSON feeds support all 14.

The posting time must be at least 4 hours after the import time. Genuin posts only after the import runs, and it keeps the time gap you set. For example, you can pair a daily import with weekly posting, a weekly import with monthly posting, or a monthly import with monthly posting.

Keep your import and posting schedules aligned, and review your draft workflows to keep quality high.

![The Scheduler panel in your Business Account after saving, showing Scheduler 1 as Daily, 11:00 AM, All Communities, All Groups, and Schedule publishing, with a Scheduler set successfully notification.](https://cdn.sanity.io/images/lnrtvsvr/development/3486ef2872524dede55d4910e77a40c9c2c0bc2c-1443x881.jpg)
*A saved scheduler lists its import frequency, time, destinations, and posting option.*

### Example setups

| Goal | Setup |
| --- | --- |
| Test a new API | Run a one-time Direct Import and review the videos before you publish them |
| Publish every day without review | Schedule a daily import at 11 AM with Auto publish immediately |
| Review every video before it goes live | Import daily with Save as drafts (manual posting), then review before publishing |
| Publish campaign content on a slower cadence | Import weekly and publish monthly |

## Edit a scheduler

1. On the **Direct Import** page, click **Schedule**, then click the pencil icon on the scheduler you want to change.
   ![The Direct Import page in your Business Account with the Schedule (1) button highlighted next to Import in the bar at the bottom of the form.](https://cdn.sanity.io/images/lnrtvsvr/development/a8ce477e5556ddb4d3f48166b3ddef23c8956517-1440x878.jpg)
   *Step 1: Click Schedule to open the Scheduler panel.*
   ![The Scheduler panel in your Business Account with Scheduler 1 summarized as Daily, 11:00 AM, 4 Communities, 7 Groups, Schedule publishing, and JSON, and its pencil icon highlighted.](https://cdn.sanity.io/images/lnrtvsvr/development/01d10c5e00f3ae4fb1a69fbebaaac33058b6d245-1440x880.jpg)
   *Step 1: Click the pencil icon to edit a scheduler.*
2. (Optional) Change the JSON URL. Genuin re-validates the URL and re-runs AI mapping on its fields.
   ![Scheduler 1 open for editing in your Business Account, with its JSON source row highlighted above the Import frequency, Import in, and Posting settings.](https://cdn.sanity.io/images/lnrtvsvr/development/3806507c3db2c997a9db83ccc1ad541903eda8e4-1440x882.jpg)
   *Step 2: Open the JSON source row to change the feed URL.*
   ![The JSON panel of a scheduler in your Business Account with a new feed URL validated and the JSON Field Validation table showing matched fields and match rates.](https://cdn.sanity.io/images/lnrtvsvr/development/8f8205c1820cd07e37d3703cf6972e57e40b7232-1440x882.jpg)
   *Step 2: A new URL is re-validated and its fields are remapped.*
3. (Optional) Change the authorization or the query parameters.
   ![The Authorization settings with Auth type, Username, and Password, and the Query Parameter settings with Key, Value, and Max Value, above the Cancel and Save buttons in your Business Account.](https://cdn.sanity.io/images/lnrtvsvr/development/30bf677ee8fe1c0329ef0e37fc0b72d223945366-675x405.jpg)
   *Step 3: Change the authorization or query parameters, then save.*
4. (Optional) Change the posting configuration.
   ![Scheduler 1 in your Business Account with its Posting section highlighted, showing Schedule publishing selected and a Post frequency of Daily at 03:00 PM.](https://cdn.sanity.io/images/lnrtvsvr/development/5f0e2a89a7a7cccec8d196e97af18d0a1e44f0f8-720x1031.jpg)
   *Step 4: Change the posting option and post frequency in the Posting section.*
5. In the confirmation prompt, click **Apply changes** to save your edits, or **Cancel** to discard them. Genuin shows "Scheduler updated successfully."
   ![The Apply posting changes? dialog in your Business Account, saying the changes apply only to future imports, with the Cancel and Apply changes buttons.](https://cdn.sanity.io/images/lnrtvsvr/development/dbcbe7e063e40b6e03f065fd9e6a743b09b993e0-684x304.jpg)
   *Step 5: Posting changes apply only to future imports.*
   ![The Scheduler panel in your Business Account with a Scheduler updated successfully notification above the updated Scheduler 1 summary.](https://cdn.sanity.io/images/lnrtvsvr/development/5f60e378b32e387882a77e200476c04aee15f7e5-1452x882.jpg)
   *Step 5: The notification after you apply changes.*

## Delete a scheduler

1. Click the trash icon on the scheduler.
   ![The Scheduler panel in your Business Account with Scheduler 1 and its trash icon highlighted next to the pencil icon.](https://cdn.sanity.io/images/lnrtvsvr/development/e11f8d273f3e46fc898035be174291f2ad57f41b-720x284.jpg)
   *Step 1: The trash icon deletes a scheduler.*
2. Click **Delete Scheduler** to confirm.
   ![The Delete scheduler? dialog in your Business Account, warning that all future content fetching for the scheduler stops and can't be undone, with Delete Scheduler highlighted.](https://cdn.sanity.io/images/lnrtvsvr/development/1927aab5f9b9dbad14790f1a176f4b1a8ebeb3c8-1440x883.jpg)
   *Step 2: Deleting a scheduler stops its future imports and can't be undone.*

## Add more schedulers

Click **+ Add Scheduler** to add another scheduler. The new scheduler appears at the top of the list.

![The Manage Schedulers section in your Business Account with the + Add Scheduler menu open, listing Add RSS/MRSS, Add XML, and Add JSON.](https://cdn.sanity.io/images/lnrtvsvr/development/40bdcca632aea00771b043339d09065c6ebd6f4d-716x211.jpg)
*+ Add Scheduler asks which feed type to add.*

![The Scheduler panel in your Business Account with a new Scheduler 1 at the top showing an RSS Feed source, an empty Add RSS Feed field, and Authorisation and Query Parameter toggles.](https://cdn.sanity.io/images/lnrtvsvr/development/bcdf4adb4249b6ff107e59d19a4593887e773923-720x761.jpg)
*The new scheduler appears at the top of the list.*

## Limitations

- **Video duration**: you can import videos up to 300 seconds long. Genuin rejects longer videos during import.
- **One scheduler per URL**: each brand can have one scheduler per URL. The duplicate scheduler check rejects a URL that already has one.
- **Concurrent imports**: you can run up to 3 imports at the same time.
- **Validation**: the URL must pass all three validation stages, required fields must be mapped, and a community and group are mandatory.
- **Schema changes**: a change to your feed's schema might break its scheduled imports. After you change your API, review the scheduler's field mapping.

## See also

- [Schedule recurring imports from an RSS or MRSS feed](https://begenuin.com/developers/browse-by-products/control/how-do-i-set-a-scheduler-for-importing-videos-from-rss-mrss-feed-urls-in-the-business-account)
- [Import videos from an RSS or MRSS feed](https://begenuin.com/developers/browse-by-products/control/how-do-i-import-videos-from-rss-mrss-feed-urls-in-the-business-account)
- [Scheduler configuration](https://begenuin.com/developers/browse-by-products/control/scheduler-in-business-account)
- [Sync videos between social media and Genuin](https://begenuin.com/developers/browse-by-products/control/how-to-sync-and-post-content-between-social-media-and-genuin)
- [Post a video to a group](https://begenuin.com/developers/developer-resources/api/post-and-share-a-video-within-a-group-using-the-post-video-api)
