Bulk Update Prices
Updates prices in bulk for courses and learning paths
Updates prices in bulk for courses and learning paths.
POST
https://example.thoughtindustries.com/incoming/v2/content/bulkUpdatePricesExample request — update a single course price
curl -X POST "https://example.thoughtindustries.com/incoming/v2/content/bulkUpdatePrices" \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"courses": [
{
"id": "8f2a1c34-5b6d-4e7f-9a01-2b3c4d5e6f70",
"prices": [
{ "currencyCode": "USD", "unitAmount": 9900 }
]
}
]
}'Example request — multi-currency course price with suggested retail
curl -X POST "https://example.thoughtindustries.com/incoming/v2/content/bulkUpdatePrices" \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"courses": [
{
"id": "8f2a1c34-5b6d-4e7f-9a01-2b3c4d5e6f70",
"prices": [
{ "currencyCode": "USD", "unitAmount": 9900, "suggestedRetailUnitAmount": 12900 },
{ "currencyCode": "EUR", "unitAmount": 8900 }
]
}
]
}'Example request — update courses and learning paths together
curl -X POST "https://example.thoughtindustries.com/incoming/v2/content/bulkUpdatePrices" \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"courses": [
{
"id": "8f2a1c34-5b6d-4e7f-9a01-2b3c4d5e6f70",
"prices": [ { "currencyCode": "USD", "unitAmount": 9900 } ]
}
],
"learningPaths": [
{
"id": "1d9e8f70-4a3b-4c2d-8e1f-0a9b8c7d6e5f",
"prices": [ { "currencyCode": "USD", "unitAmount": 24900 } ]
}
]
}'Parameters
Requires the courses.edit.settings permission. Provide courses, learningPaths, or both — at least one item is required (an empty request returns 400 No items provided). A maximum of 1000 items total may be updated per request.
| Name | Type | Required | Location | Description |
|---|---|---|---|---|
courses | BulkUpdatePricesContentInput[] | No* | body | Course price objects to update (see below). |
learningPaths | BulkUpdatePricesContentInput[] | No* | body | Learning path price objects to update (see below). |
*At least one item across courses and learningPaths is required.
Each object in courses / learningPaths (BulkUpdatePricesContentInput):
| Field | Type | Required | Description |
|---|---|---|---|
id | uuid | Yes | UUID of the course or learning path to reprice. |
prices | PriceInput[] | Yes | One or more price entries for the content (see below). |
Each object in prices (PriceInput):
| Field | Type | Required | Description |
|---|---|---|---|
currencyCode | string | No | ISO currency code for this price entry (e.g., USD). |
unitAmount | integer | No | Unit price amount for the given currencyCode. |
suggestedRetailUnitAmount | integer | No | Suggested retail (list) price for this currency. |
annualUnitAmount | integer | No | Annual/subscription unit price for this currency. |
instructorAccessUnitAmount | integer | No | Unit price for instructor access. |
unitsAmount | integer[] | No | Tiered unit amounts. |
bulkPurchasingEnabled | boolean | No | Whether bulk (seat) purchasing is enabled for this price. |
alternativePricingType | AlternativePricingType | No | Alternative pricing model. Allowed value: membership. |
alternativePricingRef | integer | No | Reference used with alternative pricing. |
lastTierPriceUnitAmount | integer | No | Unit price applied beyond the last defined tier. |
variations | PriceVariation[] | No | Advanced per-variation pricing structures. |
seatTiers | FoxySeatTierInput[] | No | Advanced seat-tier pricing structures. |
seatPackages | SeatPackageInput[] | No | Advanced seat-package pricing structures. |
bulkPurchaseTiers | BulkPurchaseTiersInput[] | No | Advanced bulk-purchase tier structures. |
id | uuid | No | Existing price record ID (for targeting a specific price row). |
contentId | uuid | No | Content ID associated with the price (normally derived from the parent id). |
contentType | string | No | Content type associated with the price. |
Example response
{
"updatedRecordCount": 0,
"errors": [
{
"id": "00000000-0000-0000-0000-000000000000",
"identifier": "string",
"error": "string",
"record": "string"
}
]
}Response fields
| Field | Type | Description |
|---|---|---|
updatedRecordCount | integer | Total number of price records successfully updated. |
errors | BulkAssignmentUserError[] | List of errors encountered during the bulk update operation. |
errors.id | uuid | Unique identifier of the record that failed to update. |
errors.identifier | string | Human-readable identifier (such as a slug or external ID) of the failed record. |
errors.error | string | Description of the error that prevented the price update. |
errors.record | string | Name or reference of the content record that failed to update. |