Import entity records from CSV

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Creates records in one of the app's entities from a CSV file, and returns the records it created.

Send the file as multipart/form-data in a field named file. The first row has to be a header row with no blank or repeated column names. Commas, semicolons, and tabs all work as the delimiter, and the file can be up to 10 MB.

Base44 pairs each of the entity's fields with the column of the same name, ignoring case, spaces, and punctuation. For any field it can't pair by name, an AI model picks a matching column or leaves the field out. Columns that match no field are ignored, and every required field needs a column.

The import is all or nothing. Every row is checked against the entity's schema before anything is written, and if one row fails, no records are created. A file Base44 can't import still returns a successful response, with status set to error and the reason in details, so read status before output.

Each row becomes a new record, so importing the same file twice creates every record twice. Row-level security applies, so the whole call is rejected when the entity's rls create rule doesn't cover one of the rows. Imported records don't trigger the app's webhooks, automations, or workflows.

<Note>This endpoint accepts a personal API key belonging to a user with access to the app. A read-only key is refused, and workspace API keys are not accepted.</Note>

post/api/apps/{app_id}/entities/{entity_name}/import

Path parameters

app_idstring required

ID of the app that owns the entity.

ID of the app that owns the entity.

entity_namestring required

Name of the entity, exactly as List entity schemas reports it. Don't pass User here. It doesn't fail, but it reads and writes a separate, disconnected set of records stored under that name, not the app's real user accounts, which are managed through their own endpoints.

Name of the entity, exactly as List entity schemas reports it. Don't pass User here. It doesn't fail, but it reads and writes a separate, disconnected set of records stored under that name, not the app's real user accounts, which are managed through their own endpoints.

Response

The import's outcome, including when the file couldn't be imported.

status'success' | 'error' required

Whether the import went through. Either "success" or "error". On error no records were created.

detailsstring nullable required

What happened, in plain language. On error it says why the file couldn't be imported, for example a required field no column matched.

Example response

{
  "status": "success",
  "details": "Successfully imported 2 entities with RLS enforcement",
  "output": [
    {
      "id": "6886b8d390dc7e2f4a2c91b3",
      "created_date": "2026-06-01T09:23:41.481000Z",
      "updated_date": "2026-06-01T09:23:41.481000Z",
      "created_by": "jane@acme.com",
      "created_by_id": "6874b0c2e1a94d0031bb77de",
      "is_sample": false,
      "amount": 4200,
      "status": "draft",
      "customer_email": "jane@acme.com"
    }
  ]
}

Changes

Changed in 1 of the 33 revisions of this API.1