Installs into .claude/skills of the current project.
Are you the author of Durindoor Embeddings?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/bloodf-durindoor-embeddings)
---
name: durindoor-embeddings
description: Generate vector embeddings through DurinDoor using a model discovered from /v1/models/embedding.
---
# DurinDoor Embeddings
## Discover
```bash
curl -H "Authorization: Bearer $DURINDOOR_KEY" "$DURINDOOR_URL/v1/models/embedding" | jq -r '.data[].id'
MODEL_ID="$(curl -s -H "Authorization: Bearer $DURINDOOR_KEY" "$DURINDOOR_URL/v1/models/embedding" | jq -r '.data[0].id')"
curl -H "Authorization: Bearer $DURINDOOR_KEY" "$DURINDOOR_URL/v1/models/info?id=$MODEL_ID"
```
## Embed text
```bash
curl -X POST "$DURINDOOR_URL/v1/embeddings" \
-H "Authorization: Bearer $DURINDOOR_KEY" \
-H "Content-Type: application/json" \
-d "{\"model\":\"$MODEL_ID\",\"input\":[\"hello\",\"world\"]}"
```
`input` accepts a string or array. Optional dimensions, encoding format, and batch limits depend on the selected model. The response uses OpenAI-compatible `data[].embedding` arrays.
## Use the default route
Leave out `model` and DurinDoor uses the first available model in the embeddings route (**Dashboard → Media Routes**). Embeddings never switch to a second model, because vectors from different models are not comparable. Pin `model` when you store vectors, so later calls use the same model.
```bash
curl -X POST "$DURINDOOR_URL/v1/embeddings" \
-H "Authorization: Bearer $DURINDOOR_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"hello"}'
```
If no connected provider serves this endpoint, the response is HTTP 400 with `error.code` set to `no_provider_for_kind`. Connect a provider, or pass `model`.
Reference: https://github.com/bloodf/durindoor/blob/main/docs/reference/api.mdx