---
title: Bulk Operations
url: https://docs.kaltura.com/docs/rich-media-cms-apis/content-management/categories-bulk-operations
---

## Bulk Operations


Use bulk upload actions to create categories, assign members, or assign entries in batch via CSV.

### Bulk Category Creation


```bash
curl -X POST "$KALTURA_SERVICE_URL/service/category/action/addFromBulkUpload" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "bulkUploadData[objectType]=KalturaBulkUploadCsvJobData" \
  --form "fileData=@categories.csv"
```


**CSV columns:** `name`, `parentId`, `referenceId`, `description`, `tags`, `privacy`, `contributionPolicy`, `appearInList`, `privacyContext`

Response: A `KalturaBulkUpload` job object.

### Bulk Membership Assignment


```bash
curl -X POST "$KALTURA_SERVICE_URL/service/categoryUser/action/addFromBulkUpload" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "bulkUploadData[objectType]=KalturaBulkUploadCsvJobData" \
  --form "fileData=@category_members.csv"
```


**CSV columns:** `categoryId`, `userId`, `permissionLevel`, `status`

### Bulk Content Assignment


```bash
curl -X POST "$KALTURA_SERVICE_URL/service/categoryEntry/action/addFromBulkUpload" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "bulkUploadData[objectType]=KalturaBulkUploadCsvJobData" \
  --form "fileData=@category_entries.csv"
```


**CSV columns:** `categoryId`, `entryId`

### Tracking Bulk Job Status


```bash
curl -X POST "$KALTURA_SERVICE_URL/service/bulk/action/get" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "id=$BULK_JOB_ID"
```


| Status Value | Name | Description |
|-------------|------|-------------|
| 0 | PENDING | Job queued |
| 1 | UPLOADING | File is being uploaded |
| 2 | UPLOADED | File uploaded, processing not started |
| 3 | PROCESSING | Job is in progress |
| 4 | PROCESSED | Job completed (check `errorCount` for partial failures) |
| 5 | ABORTED | Job was cancelled |
