# Search your articles — Shorty API

> Full-text search over the authenticated account’s own articles (matches title, description, source URL). `q` is required. Results are recency-ranked; pass `limit` (1–20, default 8) to size the page. This endpoint is page-limited rather than cursor-paginated because search is a ranked top-N, which a keyset cursor cannot express.

```http
GET /v1/articles/search
```

Full-text search over the authenticated account’s own articles (matches title, description, source URL). `q` is required. Results are recency-ranked; pass `limit` (1–20, default 8) to size the page. This endpoint is page-limited rather than cursor-paginated because search is a ranked top-N, which a keyset cursor cannot express.

## Authentication

Requires a Bearer credential — a `shk_live_` API key or an OAuth 2.1 access token with the scope for this resource. See [Authentication](/docs/api).

## Parameters

| Name | In | Required | Description |
| --- | --- | --- | --- |
| `q` | query | Yes | — |
| `limit` | query | No | — |
| `article_type` | query | No | — |

## Example request

curl:

```bash
curl -X GET https://aishorty.com/v1/articles/search?q=transformers&limit=8&article_type=article_typeValue \
  -H "Authorization: Bearer shk_live_your_key"
```

TypeScript (@aishorty/sdk):

```typescript
import { Shorty } from '@aishorty/sdk'

const shorty = new Shorty({ apiKey: process.env.SHORTY_API_KEY })

const hits = await shorty.articles.search({
    q: 'transformers',
    article_type: 'YOUTUBE_ARTICLE',
})
```

## Response · 200

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | `Article[]` | Yes | — |
| `count` | `integer` | Yes | Number of hits returned on this page. (-9007199254740991–9007199254740991) |

## Errors

On failure this endpoint returns an RFC 9457 problem body. Possible statuses:

- `400`
- `401`
- `403`
- `429`
- `500`

Switch on the problem `code`, not the status. See the [error reference](/docs/api/errors) for every code and how to fix it.
