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

List Alternate Purchase Paths

List live alternate purchase paths on a content item. Admin view; no learner visibility filter.

Returns every live (not soft-deleted) alternate purchase path on a content item, in displayOrder ascending then createdAt ascending. This is the admin view — it does not apply learner visibility rules. For the storefront CTA, use Get visible alternate purchase path.

contentId is a course UUID (ti.courses). A learning path UUID is not a valid source; learning paths are valid only as ti_item targets.

GEThttps://example.thoughtindustries.com/v3/admin/content/:contentId/alternate-purchase-paths

This endpoint is served by the v3 API. Its full path is https://{instance}.thoughtindustries.com/v3/admin/content/{contentId}/alternate-purchase-paths, not the /incoming/v2 base URL used by the rest of this reference. Use the full URL shown in the examples below.

Example request

curl "https://{instance}.thoughtindustries.com/v3/admin/content/3a131ac3-1a74-420d-b4da-ae10b18b2c68/alternate-purchase-paths" \
  -H 'Authorization: Bearer YOUR_API_KEY'

Parameters

Requires the settings.alternatePurchasePaths permission. A company API key satisfies this. A manager session needs that permission on the role.

NameTypeRequiredLocationDescription
contentIduuidYespathSource course UUID.

Example response

Note the data wrapper — v3 endpoints nest their payload under data. List returns an array, not { items, page }.

{
  "data": [
    {
      "id": "443d8182-d461-4568-a777-918ca729fd85",
      "courseId": "3a131ac3-1a74-420d-b4da-ae10b18b2c68",
      "displayOrder": 0,
      "label": "Subscribe for unlimited access",
      "targetType": "ti_item",
      "targetId": "7a6b5c4d-3e2f-1a0b-9c8d-7e6f5a4b3c2d",
      "targetUrl": null,
      "targetUrlTitle": null,
      "hidePrimaryCta": false,
      "createdAt": "2026-09-15T14:22:01.000Z",
      "updatedAt": "2026-09-15T14:22:01.000Z"
    }
  ]
}

An unknown or cross-company contentId returns 404 — it does not return 200 with []. An empty configured set on a real course returns 200 with "data": [].

Response fields

FieldTypeDescription
data[].iduuidEntry ID.
data[].courseIduuidSource course UUID.
data[].displayOrderintegerSort key. Default 0.
data[].labelstringCTA label. Rich-text HTML sanitized on write.
data[].targetTypestringti_item or external_url.
data[].targetIduuid | nullTarget TI item UUID when targetType is ti_item.
data[].targetUrlstring | nullTarget URL when targetType is external_url.
data[].targetUrlTitlestring | nullDisplay title for an external-URL target.
data[].hidePrimaryCtabooleanWhen true, hide the primary purchase CTA.
data[].createdAtdatetimeCreation timestamp (ISO 8601).
data[].updatedAtdatetimeLast update timestamp (ISO 8601).

Errors

An unknown, deleted, or cross-company course returns 404:

{
  "code": "RESOURCE_NOT_FOUND",
  "message": "Content item with identifier \"3a131ac3-1a74-420d-b4da-ae10b18b2c68\" was not found",
  "category": "NOT_FOUND",
  "timestamp": "2026-09-15T14:22:01.000Z",
  "statusCode": 404,
  "metadata": {
    "resource": "Content item",
    "identifier": "3a131ac3-1a74-420d-b4da-ae10b18b2c68"
  }
}

A missing or invalid API key returns 401 with code: "UNAUTHENTICATED". A manager session without settings.alternatePurchasePaths returns 403 with code: "FORBIDDEN" and message: "Insufficient permissions: settings.alternatePurchasePaths required". category on those auth errors is CLIENT_ERROR. There is no metadata.

Rate limit

This endpoint has no per-endpoint rate limiter.