# Nngroup — 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.

> Search and access Nielsen Norman Group's extensive library of UX research, articles, reports, and courses to find best practices and guidelines on any UX topic. Quickly discover curated insights organized by topic to inform your design and research decisions.

**Category:** Education | **Website:** [nngroup.com/](https://nngroup.com/) | **Docs:** [parse.bot/marketplace/04b61031-e8fa-470c-a973-2baa1757a703/nngroup-com-api](https://parse.bot/marketplace/04b61031-e8fa-470c-a973-2baa1757a703/nngroup-com-api)

Pay-per-use API proxy for Locus Pro. Each call burns credits from your workspace balance.

## Access

**Base URL:** `https://api.paywithlocus.com/api/wrapped/credits/nngroup/`
**Auth:** `Authorization: Bearer <LOCUS_CREDITS_SECRET_KEY>` (an `lcr_` secret key or a scoped `lcac_` agent credential)
**Required header:** `Idempotency-Key: <fresh UUID per call>`. A retry with the same key replays the stored result without a new charge.
**Response:** the provider response after any endpoint-specific normalization. `X-Locus-Credits-Charged` carries the charge and `X-Locus-Credits-Balance` the remaining balance. Insufficient credits return `402` before the provider is called.
**Pricing:** estimated costs below are USD. Locus debits the credit equivalent at your workspace rate.

Full call contract: https://docs.paywithlocus.com/api-reference/introduction

> Using a Pay With Locus wallet key (`claw_` prefix)? Wallet routes are documented separately: https://docs.paywithlocus.com/wrapped-apis/for-agents

## Endpoints

### Get article

Retrieve full content of a single article, report, video, or course page by its URL slug. Attempts an Algolia index lookup first; falls back to fetching and parsing the HTML page directly. The Algolia path returns the full indexed record; the HTML path returns title, body HTML, URL, and a generic type label.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `slug` | string | Yes | URL path segment for the content (e.g. 'articles/usability-101-introduction-to-usability') |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/credits/nngroup/get-article \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"slug":"<string>"}'
```

### List all reports

Retrieve paginated list of all research reports in the NN/g catalog. Reports include full body text from the index. Returns newest reports first.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number (0-indexed) |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/credits/nngroup/list-all-reports \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"page":"<integer>"}'
```

### List all topics

Retrieve the complete list of UX topic categories with the number of content items in each. Topics are returned in descending order of article count. Use topic names from this list as input to list_articles_by_topic.

**Estimated cost:** Metered

_No parameters required._

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/credits/nngroup/list-all-topics \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{}'
```

### List articles by topic

List all content items tagged with a specific topic. Returns paginated results. Topic names must match exactly as returned by list_all_topics (case-sensitive). Optionally filter by content type.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number (0-indexed) |
| `topic` | string | Yes | Topic name exactly as returned by list_all_topics (e.g. 'Ecommerce', 'Web Usability') |
| `type` | string | No | Filter results to a single content type |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/credits/nngroup/list-articles-by-topic \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"page":"<integer>","topic":"<string>","type":"<string>"}'
```

### List live courses

List all upcoming live online UX training courses and conference events. Includes both individual courses and multi-day UX Conference agendas. Returns newest/soonest events first.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number (0-indexed) |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/credits/nngroup/list-live-courses \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"page":"<integer>"}'
```

### Search articles

Full-text search across NN/g's content catalog (articles, videos, reports, courses). Returns paginated results ranked by relevance. Each item includes metadata (title, type, authors, publication date, topics) but may have an empty document_body for non-article types. Optionally filter by content type.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `page` | integer | No | Page number (0-indexed) |
| `query` | string | Yes | Search keyword or phrase |
| `type` | string | No | Filter results to a single content type |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/credits/nngroup/search-articles \
  -H "Authorization: Bearer $LOCUS_CREDITS_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"page":"<integer>","query":"<string>","type":"<string>"}'
```

## Next steps

- [All wrapped API providers](https://paywithlocus.com/wapi/index.md): pick another provider.
- [Find and call tools](https://paywithlocus.com/agent/tools.md): price ceilings, async results, and errors.
- [Credits and billing](https://paywithlocus.com/agent/billing.md): what a call costs and how to add credits.
- [Agent docs index](https://paywithlocus.com/agent/index.md): every Locus agent page.