# Get learning course

Fetch available public course metadata and rendered syllabus entries, with explicit coverage; does not establish a complete syllabus or lesson-playback access.

- Platform: [LinkedIn](https://docs.upscrape.com/docs/platforms/linkedin)
- Capability ID: `linkedin.learning.course.get`
- Cost: 1 credit per request
- Maximum runtime: 60 seconds
- Execute endpoint: `POST https://data.upscrape.com/execute`

## Request

Use the exact public capability ID in the shared execute envelope.

```bash
curl --request POST \
  --url https://data.upscrape.com/execute \
  --header "Authorization: Bearer $UPSCRAPE_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Prefer: wait=30" \
  --data '{
  "input": {
    "url": "https://www.linkedin.com/learning/python-essential-training-18764650"
  },
  "capability": "linkedin.learning.course.get"
}'
```

## Input


| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `url` | `string` | Yes | LinkedIn Learning course URL. Topic, browse and search routes are rejected; only course pages are supported. |

### Example input

```json
{
  "url": "https://www.linkedin.com/learning/python-essential-training-18764650"
}
```

## Response

Successful output is returned in `results[0].data`.

Raw platform output is intentionally open-ended and may evolve with the upstream source.

### Illustrative sample output

This example shows one response. Values and optional fields vary with the data available.

```json
{
  "course_id": "18764650",
  "coverage": {
    "limitations": [
      "Course marketing metadata and syllabus are public; lesson video playback and authenticated progress are not returned."
    ],
    "missing_fields": [],
    "source": "linkedin_public_learning_course",
    "status": "complete_public",
    "truncated_fields": []
  },
  "description": "Get a comprehensive overview of the Python programming language and gain enough command of Python 3 to create well-designed scripts and maintain existing projects.",
  "duration": "PT4H23M9S",
  "duration_seconds": 15789,
  "enrollments": 645558,
  "image_url": "https://media.licdn.com/dms/image/v2/D560DAQEruxcXLwzu_A/learning-public-crop_675_1200/B56Z1oT93iKkAY-/0/1775571558434?e=2147483647&v=beta&t=[redacted:token]",
  "instructors": [
    {
      "headline": "O'Reilly / Wiley Author | LinkedIn Learning Instructor | Principal Software Engineer @ GLG",
      "image_url": "[redacted]",
      "name": "Example Instructor 1",
      "profile_url": "https://www.linkedin.com/in/example-instructor-1"
    }
  ],
  "language": "en",
  "level": "Beginner",
  "published_at": "2023-01-25",
  "rating": 4.7,
  "rating_count": 17471,
  "slug": "python-essential-training",
  "syllabus": [
    {
      "description": "Meet the instructor and preview key topics in this course, including data types, control flow, classes, object-oriented programming, and modules. This video shows a practical, crash-course approach to Python fundamentals and how to start coding confidently.",
      "duration": "PT50S",
      "duration_seconds": 50,
      "name": "Getting started with Python"
    },
    {
      "description": "This course is for anyone who wants to learn programming. Basic computer skills are required.",
      "duration": "PT2M55S",
      "duration_seconds": 175,
      "name": "Who this course is for"
    },
    {
      "description": "In this video, learn about the resources needed for this course so you can follow along.",
      "duration": "PT1M15S",
      "duration_seconds": 75,
      "name": "Resources for this course"
    }
  ],
  "syllabus_count": 3,
  "title": "Python Essential Training",
  "topics": [
    "Python (Programming Language)"
  ],
  "url": "https://www.linkedin.com/learning/python-essential-training-18764650"
}
```
### Illustrative output fields

Derived from the sample above for orientation only. These fields are not a fixed response schema.

| Path | Observed type | Example |
| --- | --- | --- |
| `course_id` | `string` | 18764650 |
| `coverage` | `object` | 5 fields |
| `coverage.limitations` | `array` | 1 items |
| `coverage.missing_fields` | `array` | 0 items |
| `coverage.source` | `string` | linkedin_public_learning_course |
| `coverage.status` | `string` | complete_public |
| `coverage.truncated_fields` | `array` | 0 items |
| `description` | `string` | Get a comprehensive overview of the Python programming language and gai… |
| `duration` | `string` | PT4H23M9S |
| `duration_seconds` | `integer` | 15789 |
| `enrollments` | `integer` | 645558 |
| `image_url` | `string` | https://media.licdn.com/dms/image/v2/D560DAQEruxcXLwzu_A/learning-publi… |
| `instructors` | `array` | 1 items |
| `instructors` | `array` | 1 items |
| `language` | `string` | en |
| `level` | `string` | Beginner |
| `published_at` | `string` | 2023-01-25 |
| `rating` | `number` | 4.7 |
| `rating_count` | `integer` | 17471 |
| `slug` | `string` | python-essential-training |
| `syllabus` | `array` | 3 items |
| `syllabus` | `array` | 3 items |
| `syllabus_count` | `integer` | 3 |
| `title` | `string` | Python Essential Training |
| `topics` | `array` | 1 items |
| `topics` | `array` | 1 items |
| `url` | `string` | https://www.linkedin.com/learning/python-essential-training-18764650 |

## Execution behavior

A `200` response completed inline. A `202` response was queued; poll `GET /jobs/{id}` until the job reaches `completed` or `failed`. Use an `Idempotency-Key` when retrying must not create a duplicate logical job.

## Related documentation

- [Authentication](https://docs.upscrape.com/docs/api/authentication)
- [Jobs and results](https://docs.upscrape.com/docs/api/jobs)
- [Errors and retries](https://docs.upscrape.com/docs/api/errors)
- [Idempotency](https://docs.upscrape.com/docs/api/idempotency)
