# Import videos from a JSON feed

Learn how to import videos from a JSON feed URL in Brand Control Center, 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 Brand Control Center (BCC), 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 Brand Control Center, go to **Curate** > **Activity** > **+ New Post**.
   ![The Activity page in Brand Control Center 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center, 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center 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.*

## Review and publish imported videos

Imported videos appear in **Curate** > **Activity**, which sorts posts into four statuses: Awaiting to post, Processing, 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 Brand Control Center, 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 Brand Control Center 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).

## 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 Brand Control Center 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 Brand Control Center, 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center 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.*

### 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 |

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 Brand Control Center 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center, 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 Brand Control Center 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 Brand Control Center.](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 Brand Control Center 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 Brand Control Center, 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 Brand Control Center 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 Brand Control Center 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 Brand Control Center, 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 Brand Control Center 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 Brand Control Center 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-brand-control-center)
- [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-brand-control-center)
- [Scheduler configuration](https://begenuin.com/developers/browse-by-products/control/scheduler-in-brand-control-center)
- [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)
