Skip to main content
https://.thoughtindustries.com

Bulk Update Prices

Updates prices in bulk for courses and learning paths

Updates prices in bulk for courses and learning paths.

POSThttps://example.thoughtindustries.com/incoming/v2/content/bulkUpdatePrices

Example 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.

NameTypeRequiredLocationDescription
coursesBulkUpdatePricesContentInput[]No*bodyCourse price objects to update (see below).
learningPathsBulkUpdatePricesContentInput[]No*bodyLearning path price objects to update (see below).

*At least one item across courses and learningPaths is required.

Each object in courses / learningPaths (BulkUpdatePricesContentInput):

FieldTypeRequiredDescription
iduuidYesUUID of the course or learning path to reprice.
pricesPriceInput[]YesOne or more price entries for the content (see below).

Each object in prices (PriceInput):

FieldTypeRequiredDescription
currencyCodestringNoISO currency code for this price entry (e.g., USD).
unitAmountintegerNoUnit price amount for the given currencyCode.
suggestedRetailUnitAmountintegerNoSuggested retail (list) price for this currency.
annualUnitAmountintegerNoAnnual/subscription unit price for this currency.
instructorAccessUnitAmountintegerNoUnit price for instructor access.
unitsAmountinteger[]NoTiered unit amounts.
bulkPurchasingEnabledbooleanNoWhether bulk (seat) purchasing is enabled for this price.
alternativePricingTypeAlternativePricingTypeNoAlternative pricing model. Allowed value: membership.
alternativePricingRefintegerNoReference used with alternative pricing.
lastTierPriceUnitAmountintegerNoUnit price applied beyond the last defined tier.
variationsPriceVariation[]NoAdvanced per-variation pricing structures.
seatTiersFoxySeatTierInput[]NoAdvanced seat-tier pricing structures.
seatPackagesSeatPackageInput[]NoAdvanced seat-package pricing structures.
bulkPurchaseTiersBulkPurchaseTiersInput[]NoAdvanced bulk-purchase tier structures.
iduuidNoExisting price record ID (for targeting a specific price row).
contentIduuidNoContent ID associated with the price (normally derived from the parent id).
contentTypestringNoContent type associated with the price.

Example response

{
  "updatedRecordCount": 0,
  "errors": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "identifier": "string",
      "error": "string",
      "record": "string"
    }
  ]
}

Response fields

FieldTypeDescription
updatedRecordCountintegerTotal number of price records successfully updated.
errorsBulkAssignmentUserError[]List of errors encountered during the bulk update operation.
errors.iduuidUnique identifier of the record that failed to update.
errors.identifierstringHuman-readable identifier (such as a slug or external ID) of the failed record.
errors.errorstringDescription of the error that prevented the price update.
errors.recordstringName or reference of the content record that failed to update.