# Import the OpenAPI Spec into Insomnia and Bruno

> Import the CurrencyCore OpenAPI 3.1 spec into Insomnia or Bruno, set baseUrl and apiKey environment variables, send a bearer-authenticated request, and add a CI curl smoke test.

Canonical: https://currency-core.com/docs/guides/insomnia-bruno/
Updated: 2026-11-11
Published: 2026-11-11

---
`/openapi.json` imports into Insomnia and Bruno. CurrencyCore does not publish packaged exports for either tool, and there is no hosted workspace. Import the spec, set two variables, and send a request.

## Import the spec

```bash
curl -O https://currency-core.com/openapi.json
```

**Insomnia:** application menu, **Import**, **From File**, then `openapi.json`. The URL option also works. Name the collection `CurrencyCore`.

**Bruno:** **Collection**, **Import Collection**, **OpenAPI**, then `openapi.json`. Save the collection in your repository so requests travel with the code.

The spec server is `https://api.currency-core.com/{version}`, with `version` defaulting to `v1`. If the importer keeps the placeholder, override it with `baseUrl`.

## Set baseUrl and apiKey

| Variable | Value |
|---|---|
| `baseUrl` | `https://api.currency-core.com/v1` |
| `apiKey` | `cc_test_your_key` |

In Insomnia, open **Manage Environments**; in Bruno, **Collection Settings**, then **Environments**. Add `baseUrl` and `apiKey` there.

Set collection or folder auth to **Bearer Token** with `{{apiKey}}`. Both tools then send `Authorization: Bearer <key>`. Do not use an `apikey` query parameter: CurrencyCore rejects query-string auth.

## Send one request

Create `GET {{baseUrl}}/rates/USD`. The base is fixed at `1`:

```json
{ "base": "USD", "date": "2026-11-10", "rates": { "USD": 1, "EUR": 0.8924, "INR": 94.13 } }
```

For a conversion, call `{{baseUrl}}/convert` with `from=USD`, `to=EUR,INR`, and `amount=100`; read `results[0].result`. A `401` usually means the token or environment is missing. See [Errors](/docs/errors/).

## Generated Postman collection

The build also publishes a generated Postman v2.1 collection at [`/postman_collection.json`](/postman_collection.json), plus an environment template. That artifact is Postman-specific: there are no packaged Insomnia or Bruno exports and no hosted workspace.

## CI curl smoke test

This checks auth, connectivity, and the convert envelope without a client:

```bash
#!/usr/bin/env bash
set -euo pipefail
: "${CURRENCYCORE_API_KEY:?set CURRENCYCORE_API_KEY}"
BASE_URL="${CURRENCYCORE_BASE_URL:-https://api.currency-core.com/v1}"
BODY="$(mktemp "${TMPDIR:-/tmp}/cc-smoke.XXXXXX")"
STATUS="$(curl -sS -o "$BODY" -w '%{http_code}' \
  "$BASE_URL/convert?from=USD&to=EUR&amount=1" \
  -H "Authorization: Bearer $CURRENCYCORE_API_KEY")"
if [ "$STATUS" != "200" ]; then
  echo "CurrencyCore smoke test failed: HTTP $STATUS"
  cat "$BODY"
  exit 1
fi
jq -e '.results[0].rate > 0' "$BODY" >/dev/null
rm -f "$BODY"
```

Free and test keys allow 60 requests per minute, so run this once per pipeline. The API returns no request ID; log the status, response `date`, and URL on failure.

## Usage checklist

1. Import `/openapi.json` into Insomnia or Bruno and name the collection.
2. Add `baseUrl` and `apiKey` to the active environment.
3. Set bearer auth with `{{apiKey}}`.
4. Send `GET {{baseUrl}}/rates/USD` and confirm `date` and `rates`.
5. Add the curl smoke test to CI with the key in a secret.
6. Commit the Bruno collection without the key; do not store the key in version control.

## Related

- [API reference](/docs/api/)
- [OpenAPI specification](/docs/openapi/)
- [Authentication](/docs/authentication/)
- [Errors](/docs/errors/)
- [All guides](/docs/guides/)
- [Postman collection guide](/docs/guides/postman/)
