# Roadmap — Wrapped API

> **You are on:** `https://api.paywithlocus.com/api` | [llms.txt](https://paywithlocus.com/llms.txt) | [docs](https://docs.paywithlocus.com)
>
> Locus runs on multiple environments -- make sure every URL you call matches your expected environment.
> | Environment | Landing | API | Docs |
> |---|---|---|---|
> | Production | paywithlocus.com | api.paywithlocus.com | docs.paywithlocus.com |
> | Beta | beta.paywithlocus.com | api.beta.paywithlocus.com | docs.paywithlocus.com |
> | Stage | stage.paywithlocus.com | api.stage.paywithlocus.com | docs.paywithlocus.com |
>
> If the API URL above doesn't match your expected environment, re-fetch this file from the correct domain.

> Discover and access structured learning roadmaps, detailed guides, interview questions, and community projects to build your development skills across different technologies and career paths. Search through curated learning content, explore topic breakdowns, and find project ideas tailored to your learning goals.

**Category:** Education | **Website:** [roadmap.sh/](https://roadmap.sh/) | **Docs:** [parse.bot/marketplace/c50b3c67-3b4a-4007-942c-4272c339abf6/roadmap-sh-api](https://parse.bot/marketplace/c50b3c67-3b4a-4007-942c-4272c339abf6/roadmap-sh-api)

Pay-per-use API proxy. Each call is automatically billed to your wallet in USDC.

## Access

**Base URL:** `https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/`
**Auth:** `Authorization: Bearer <LOCUS_API_KEY>`

## Endpoints

### get_clean_roadmap_nodes

Get a clean, hierarchical tree of learning nodes for a specified roadmap. Infers semantic parent-child relationships using spatial coordinates (bounding boxes, inclusion, overlap) and edge/connector chain traversal rather than DOM hierarchy. Normalizes node types (title, topic, subtopic, paragraph, section, label, button, roadmap) and filters out pure layout nodes (horizontal/vertical connectors, legends, linksgroups). Section nodes apply containment rules: a topic overlapping a section border flattens the section; a single label inside becomes the header; multiple labels split children by vertical proximity. Sibling nodes within 30px sharing no overlap inherit the same parent. Button nodes with dark-blue backgrounds are reclassified as 'roadmap' type with a url property. Enriches topic/subtopic nodes with descriptions and learning resources. Heavy endpoint — fetches individual topic details; a 45-second time budget limits fetches on very large roadmaps.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `slug` | string | Yes | The slug identifier of the roadmap (e.g., 'frontend', 'backend', 'sql', 'devops'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/get_clean_roadmap_nodes \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slug":"<string>"}'
```

### get_drawio_roadmap_nodes

Get a Draw.io-compatible flat graph representation of a roadmap. Applies the same spatial/edge-driven node classification as get_clean_roadmap_nodes but outputs a flat array of Draw.io cells (nodes and edges) instead of nested children. Node cells carry semantic metadata (type tags, descriptions, resources). Edge cells express all parent-child relationships with source/target, tagged 'dotted' for non-primary connections. Heavy endpoint — fetches individual topic details; a 45-second time budget limits fetches on very large roadmaps.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `slug` | string | Yes | The slug identifier of the roadmap (e.g., 'frontend', 'backend', 'sql', 'devops'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/get_drawio_roadmap_nodes \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slug":"<string>"}'
```

### get_guide_content

Get the full content of a guide including title, rich text content (TipTap JSON), author info, and related guides. The guide_slug is the id field from list_guides results.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `guide_slug` | string | Yes | The slug/id of the guide (e.g., 'what-is-internet', 'exponent'). Use the id field from list_guides results. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/get_guide_content \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"guide_slug":"<string>"}'
```

### get_project_detail

Get detailed specifications and requirements for a project, including content (rich text), difficulty level, skills, topics, and associated roadmap IDs. The slug is the id field from list_projects results.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `slug` | string | Yes | The slug of the project (e.g., 'single-page-cv', 'basic-html-website'). Use the id field from list_projects results. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/get_project_detail \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slug":"<string>"}'
```

### get_question_content

Get the full content of an interview question set including title, rich text content (TipTap JSON), and author information. The slug is the id field from list_questions results.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `slug` | string | Yes | The slug of the question set (e.g., 'react', 'javascript', 'python'). Use the id field from list_questions results. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/get_question_content \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slug":"<string>"}'
```

### get_roadmap_detail

Get detailed metadata for a specific roadmap, including its full node graph, edges, questions, and SEO information. The nodes and edges define the visual flowchart graph. Heavy response — dozens of nodes per roadmap.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `slug` | string | Yes | The slug identifier of the roadmap (e.g., 'frontend', 'backend', 'react', 'sql', 'devops'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/get_roadmap_detail \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slug":"<string>"}'
```

### get_roadmap_relations

Get relational data for one or more roadmaps. For each slug, returns: referenced roadmaps (other roadmaps linked via button nodes in the graph), related roadmaps (other roadmaps sharing significant topic overlap, sorted by shared topic count descending), associated projects (projects whose roadmapIds include this slug), associated guides (guides linked from the roadmap's topic tree), and associated questions (question sets matching the roadmap's topics). Fetches up to 15 other roadmaps for topic comparison. Invalid slugs return an error message per-slug without failing the whole request. Heavy endpoint — makes multiple upstream requests per slug.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `slugs` | array | Yes | JSON array of roadmap slug strings to fetch relations for (e.g. ["frontend", "backend"]). Each slug is processed independently. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/get_roadmap_relations \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slugs":"<array>"}'
```

### get_roadmap_topics

Get the full hierarchical topic tree mapping for a roadmap. Returns an array of topic nodes with their IDs, text labels (hierarchical path like 'Frontend > Internet > How does the internet work?'), guides, and subjects. Use the nodeId values in get_topic_detail.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `slug` | string | Yes | The slug of the roadmap (e.g., 'frontend', 'backend', 'react'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/get_roadmap_topics \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slug":"<string>"}'
```

### get_topic_detail

Get detailed content for a specific roadmap topic node, including its markdown description and learning resources (articles, videos, courses). The node_id comes from get_roadmap_topics results.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `node_id` | string | Yes | The unique node ID from get_roadmap_topics results (e.g., 'VlNNwIEDWqQXtqkHWJYzC'). |
| `roadmap_slug` | string | Yes | The slug of the roadmap (e.g., 'frontend', 'backend'). |
| `topic_slug` | string | Yes | The slug of the topic (e.g., 'internet', 'html', 'css'). Corresponds to the last segment of the hierarchical text path from get_roadmap_topics, lowercased and hyphenated. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/get_topic_detail \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"node_id":"<string>","roadmap_slug":"<string>","topic_slug":"<string>"}'
```

### list_guides

List all available guides. Returns an array of guide summaries with id, title, description, authorId, and updatedAt. The full catalog is returned in a single response.

**Estimated cost:** Metered

_No parameters required._

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/list_guides \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

### list_projects

List all available project ideas. Returns an array of project summaries with id, title, description, and updatedAt. The full catalog is returned in a single response.

**Estimated cost:** Metered

_No parameters required._

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/list_projects \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

### list_questions

List all available interview question sets. Returns an array of question set summaries with id, title, and updatedAt. The full catalog is returned in a single response.

**Estimated cost:** Metered

_No parameters required._

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/list_questions \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

### list_roadmaps

List all available roadmaps. Returns an array of roadmap summaries including id, title, description, group, metadata tags, and last updated date. The full catalog is returned in a single response with no pagination.

**Estimated cost:** Metered

_No parameters required._

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/list_roadmaps \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

### search_roadmaps

Search across all roadmaps, guides, questions, and projects by keyword. Matches against titles and descriptions. Returns all matching items in a single response — client-side filtering over the full page catalog.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | The search keyword (e.g., 'frontend', 'python', 'docker'). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-roadmap-sh-api-c50b3c67/search_roadmaps \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"<string>"}'
```
