Import and export
Import and export schemas and content as JSON or CSV, including migration from microCMS and Newt.
Export a schema to reuse its fields, and export content to copy entries. Schemas use JSON. Content uses JSON or CSV. Only owners can import or export schemas, and importing content requires the Editor role or higher. Viewers can export content.
Import a schema
- Open "Define the schema" on the API creation screen, or open "Schema" on an existing API.
- Under "Import or export schema" below the field list, select "Import" and choose a JSON file.
- Check the field count and the notes about settings that cannot be carried over.
- Select "Load into editor". The field list you are editing is replaced with the contents of the file. Nothing is saved yet.
- Adjust required settings and advanced settings, then create the API. On an existing API, select "Save changes", review the diff, and save.
If you are in the middle of adding a field, finish or cancel it before you import. The API name, endpoint, and format do not change.
A schema export contains the fields currently shown in the editor, including unsaved changes. It includes field order, IDs, display names, types, required settings, and advanced settings.
{ "format": "genko.schema", "version": 1, "fields": [ { "id": "title", "name": "Title", "type": "text", "required": true } ]}You can also import an object with fields, or an array of field definitions. A schema must have 1 to 50 fields. Files with duplicate IDs or invalid types are not loaded.
microCMS schema JSON
JSON exported from microCMS (with apiFields) is also supported.
| microCMS type | genko.me type |
|---|---|
text | Text field |
textArea | Text area |
richEditor | Rich text |
media | Image |
number | Numbers |
boolean | Boolean value |
date | Date and time |
select | Select field |
IDs, display names, and required settings carry over, and select options and multiple-selection settings are converted. Settings that cannot be converted, such as unique-value constraints, descriptions, and default values for arrays, are listed before you load the file. Files with custom fields or types other than those above cannot be imported as they are. Rebuild those fields as genko.me fields.
Infer fields from Newt content JSON
Newt does not export models (schemas). When you load exported Newt content JSON, genko.me infers the fields from the values. Choose a JSON file with an items array, or an array of entries.
| Value shape | Inferred field type |
|---|---|
true / false | Boolean value |
| Number | Numbers |
| ISO 8601 date and time | Date and time |
| String containing HTML tags | Rich text |
| String with line breaks, or longer than 120 characters | Text area |
| Other string | Text field |
Object with src or url | Image |
The JSON key is used as is for both the field ID and the display name. The importer samples up to 20 entries, so it can infer a field even if the first entry has no value for it. Arrays (references and multiple selections) and fields that are empty in all 20 sampled entries are not loaded, and the list shows why.
Inferred field types may be wrong. Review the type, display name, and required setting of every imported field before you save. _id and _sys are not treated as fields.
Export content
- Open the API, select the arrow icon at the top of the screen, and choose "Export".
- Select "Export all fields as CSV" or "Export as JSON".
An export includes every entry, regardless of the current search: drafts, published, scheduled, and unpublished. If there are more than 100 entries, the export fetches them page by page. If entries are added, deleted, or reordered during the export, it fails. Stop editing on other screens and try again.
The JSON includes the workspace name, the API and field definitions, entry IDs, status, dates and times, and field values. It does not include API keys, draft keys, or version history. For media it includes only the URL and ID, not the image or file itself.
Import content
- Create the API to import into and make its schema match the file.
- Select the arrow icon at the top of the screen, choose "Import", and select a CSV or JSON file. You can also drop a file onto the dialog.
- Check the validation result and entry count. Under "Status after import", choose "Draft" or "Published", then select the import button.
- When the import finishes, review the entries and publish them.
To get a template, open "CSV and file format help" and select "Download import CSV template".
Besides JSON exported from genko.me, you can import an entries or contents array, or a plain array of field values.
{ "contents": [ { "title": "First post" }, { "title": "Next post" } ]}A file can be up to 10 MB and contain up to 1,000 entries. Exports are also limited to 10 MB. Every entry is validated against the schema first, and nothing is saved if a file has unknown fields or is missing required values. The server checks permissions, field values, and plan limits again when saving.
Export and import by language
For APIs with multiple languages enabled, the export dialog has a "Language to export" setting. The main language exports every entry, as usual. An additional language exports only entries that have a version in that language, drafts included. CSV and JSON are both supported, and JSON adds lang to the usual format. Image and file contents and version history are not included.
To import into an additional language, choose "Language to import" and import the file. For list APIs, only rows whose entry ID matches a main-language entry are imported. Rows that do not match are skipped and listed with their count and IDs, and no new main-language entry is created. If the same ID appears more than once in the file, only the first row is used and the duplicates are reported. For object APIs, the file must contain one object, and it is not imported if its ID does not match the main-language object's ID.
If the language version does not exist yet, it is created from the main language and then filled with the file's values. If it exists, its values are replaced. The "Draft" or "Published" status you choose in the dialog is applied, and the status and dates in the file are ignored. If the import fails partway, versions already saved stay as they are. Check the reported ID and import the rest again. Newt image migration and image ZIPs also work here, but only for rows with matching IDs. Storage and media permissions are checked as in a normal import.
To combine translations that you managed in separate APIs, export the content from the original API, enable the additional language on the destination API, and import it there. Both APIs must have the same format and the same field IDs and types, and each entry must have the same ID in both. Import as drafts first, check the count and content, and then publish. Multilingual content has the full setup.
Newt content JSON
You can import a JSON response from Newt's Content API (with an items array) as it is, with no reformatting. A JSON file that is just an array of entries also works.
{ "skip": 0, "limit": 100, "total": 1, "items": [ { "_id": "68c0a1b2c3d4e5f600000001", "_sys": { "createdAt": "2026-09-01T00:00:00.000Z" }, "title": "First post", "body": "<p>Post body</p>" } ]}Keys other than _id and _sys are read as field values, and _id becomes the entry ID. If your field IDs match the Newt keys, the file imports as it is.
"Move Newt images to genko.me" is on by default. If you import while Newt is still running (until November 24, 2026), images in image fields and in body text are copied to genko.me media and the references are replaced. After the import, images that could not be fetched are listed with their entry, field, URL, and reason. Those image fields are left empty, and entries whose required image could not be moved are not saved. Image URLs in body text stay as they were, so edit those by hand.
Import images from a ZIP after Newt closes
Newt shuts down on November 24, 2026, and its image URLs stop working after that. To move images after Newt closes, import Newt's image ZIP together with the JSON. You can also use it for images that could not be fetched from their URLs.
- Open your space settings in Newt and download the ZIP with "Batch Download Assets" under "General". If the ZIP is split into several files, save all of them.
- After you select the content JSON, add the ZIP files under "Add Newt image ZIP (optional/multiple)".
- Run the import.
- Matching: The last two parts of the image URL (
{folder}/{file}inhttps://{space}.assets.newt.so/v1/{folder}/{file}) are matched against the same folder and file names in the ZIP. Extra parent folders inside the ZIP do not matter. If the same image is in more than one ZIP, the first match is used. - Order: Images found in the ZIP are read from the ZIP. Images not in the ZIP are fetched from their URLs only if "Move Newt images to genko.me" is on. If you add a ZIP and turn that setting off, only the images in the ZIP are moved.
- Read in your browser: Your browser opens the ZIP, extracts only the images it needs one at a time, and uploads them the same way as a normal upload. Unused images are not read, and the ZIP itself is not uploaded. The server checks plan limits and storage when saving, as for any upload.
- Limits: Images can be up to 50 MB each, in jpg, jpeg, png, webp, gif, or avif format. Other files and oversized images are not moved, and the list after the import shows why.
- If a ZIP cannot be read: If a file cannot be opened as a ZIP, its name is shown and the import continues with the other ZIPs. Images that are password protected, corrupted, or use an unsupported compression method are listed as images that could not be moved. If fetching by URL is on, genko.me tries the URL instead.
Non-image files such as PDFs, references and relations, and publish status and dates are not migrated.
Inheriting content ID
"Keep entry IDs" is on by default. If the file has entry IDs, they are imported as they are. If your site URLs use entry IDs, you do not need to set up redirects.
- Allowed IDs: Up to 64 characters: letters, numbers, hyphens, and underscores. Files with IDs that contain characters not allowed in URLs, such as
/or spaces, are not imported. - Duplicate IDs: If an entry with the same ID already exists in the API, the import stops at that entry and shows the duplicate ID. Entries saved before that point are kept.
- If you turn it off: New IDs are generated and the IDs in the file are ignored. Turn it off if you want to import the same file again.
- No ID in the file: New IDs are generated.
IDs must be unique within an API. Different APIs can use the same ID.
Impact on existing content
- List format: Import only adds entries and never changes existing ones. If you import the same file with "Keep entry IDs" turned off, the entries are added again as new entries.
- Object format: You can import only one object. Existing content is replaced after you confirm, and the entry ID of the destination does not change. If you choose "Draft", the object is unpublished, so export anything you need first.
- Status and dates: The status in the file is ignored, and the status you choose in the dialog is applied. "Published" entries go live as soon as they are saved. Scheduled publish and unpublish times and creation dates are not carried over. An import is not a backup restore that keeps the original values.
- Media and references: Import does not copy file contents or rewrite reference IDs. Use media and entries that already exist in the same workspace. A genko.me JSON export that contains media or references from another workspace cannot be imported as it is. Register them again in the new workspace.
Content from microCMS must be converted to genko.me field value formats. For an image, for example, you need the media ID registered in genko.me, not just the URL. See also Response values.
If import fails partway through
Entries are saved one at a time. If a network error or plan limit stops the import, the screen shows how many entries were saved and the ID of the entry where it stopped. Entries that were saved are kept. The last entry may have been saved before the connection dropped. Check the list, then import only the missing entries in a separate file. Keep the screen open while the import runs.
CSV input format
"Download import CSV template" gives you a CSV with the API's field IDs and sample rows. Replace the sample rows with your entries and import it. UTF-8 with or without BOM, CRLF or LF line endings, and line breaks inside quoted cells are supported.
The first row is id followed by each field ID. The "Content ID" column in the microCMS template, which has line breaks in its header, is recognized too. If the id column has a value, it becomes the entry ID. Blank rows get new IDs, and so does every row when "Keep entry IDs" is off. When you replace an existing object, keep the destination's ID.
| Field | Cell content |
|---|---|
| Text, rich text | A string or HTML. Put cells that contain line breaks or commas in quotation marks |
| Number | 2026, 1.5, etc. |
| Boolean value | true / false (uppercase TRUE / FALSE are also accepted) |
| Date and time | 2026-01-01T00:00:00Z etc. |
| Single selection | Choice values |
| Multiple selection, multiple references | Comma-separated values in the cell, or a JSON array |
| Single reference | The ID of an entry that exists in the destination |
| Images, files, integration blocks | JSON in the format genko.me stores |
Blank cells are treated as unset. If a required value is missing, an error appears before anything is saved. Rows with the wrong number of columns, duplicate headers, and unknown fields are rejected too.
Putting a microCMS image URL in the CSV does not copy the file. Register the media in genko.me first and replace the URL with a value that includes the media ID. Reference IDs are not converted either. CSV exports entry IDs and field values only. To keep status and dates, use JSON.
Last updated: October 6, 2026