Contents

Settings

Where decided checks' documents are kept.

The LoupeSettings object

Attributes

  • folio_keep required Type: "never" "altered" "decided"
  • folio_folder optional Type: string

    The folder in Folio, needed unless folio_keep is never.

  • folio_class optional Type: string null

    The retention class's id; the folder's own when null.

  • loupe_version optional Type: string null

    The Loupe version your checks run, such as 1.5.6, or null for always the latest. Leave it out of a change to keep it as it is.

  • latest_loupe_version optional Type: string

    The newest Loupe version.

  • loupe_versions optional Type: string[]

    Every Loupe version you can choose

LoupeSettings on its own page

The LoupeSettings object
{
  "folio_keep": "altered",
  "folio_folder": "Fraud cases",
  "folio_class": null,
  "loupe_version": "1.5.6",
  "latest_loupe_version": "1.6.0",
  "loupe_versions": [
    "1.5.6",
    "1.6.0"
  ]
}

Read Loupe's settings

GET /loupe/settings

Needs loupe:checks:read: See document checks and their findings

Whether a check's documents go to Folio by themselves once someone decides, and where.

Returns

  • 200 Type: LoupeSettings
    The settings
  • 400 Type: Problem
    invalid_request, invalid_version, idempotency_key_required or invalid_signature
  • 401 Type: Problem
    unauthorized
  • 403 Type: Problem
    permission_denied, org_suspended, or address_not_allowed (your organisation only accepts requests from the addresses it has listed)
  • 404 Type: Problem
    not_found
  • 421 Type: Problem
    wrong_region
  • 429 Type: Problem
    rate_limited or quota_exceeded
  • default Type: Problem
    internal
GET /loupe/settings · curl
curl "https://api.unforged.sh/loupe/settings" \
  -H "Authorization: Bearer $UNFORGED_KEY" \
  -H "Unforged-Version: 2026-10-14"
GET /loupe/settings · Python
import requests

r = requests.get(
    "https://api.unforged.sh/loupe/settings",
    headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json())
GET /loupe/settings · Node.js
const res = await fetch('https://api.unforged.sh/loupe/settings', {
  method: 'GET',
  headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json());
Response 200
{
  "folio_keep": "altered",
  "folio_folder": "Fraud cases",
  "folio_class": null,
  "loupe_version": "1.5.6",
  "latest_loupe_version": "1.6.0",
  "loupe_versions": [
    "1.5.6",
    "1.6.0"
  ]
}

Save Loupe's settings

PUT /loupe/settings

Needs loupe:settings:manage: Loupe settings: webhooks

With folio_keep set to altered, a check's documents and its evidence pack go to folio_folder in Folio when someone marks them as altered; with decided, whatever they decide. never leaves it to whoever is looking at the check.

Request body

LoupeSettings

  • folio_keep required Type: "never" "altered" "decided"
  • folio_folder optional Type: string

    The folder in Folio, needed unless folio_keep is never.

  • folio_class optional Type: string null

    The retention class's id; the folder's own when null.

  • loupe_version optional Type: string null

    The Loupe version your checks run, such as 1.5.6, or null for always the latest. Leave it out of a change to keep it as it is.

  • latest_loupe_version optional Type: string

    The newest Loupe version.

  • loupe_versions optional Type: string[]

    Every Loupe version you can choose

Returns

  • 200 Type: LoupeSettings
    Saved
  • 400 Type: Problem
    invalid_request, invalid_version, idempotency_key_required or invalid_signature
  • 401 Type: Problem
    unauthorized
  • 403 Type: Problem
    permission_denied, org_suspended, or address_not_allowed (your organisation only accepts requests from the addresses it has listed)
  • 404 Type: Problem
    not_found
  • 421 Type: Problem
    wrong_region
  • 429 Type: Problem
    rate_limited or quota_exceeded
  • default Type: Problem
    internal
PUT /loupe/settings · curl
curl -X PUT "https://api.unforged.sh/loupe/settings" \
  -H "Authorization: Bearer $UNFORGED_KEY" \
  -H "Unforged-Version: 2026-10-14" \
  -H "Content-Type: application/json" \
  -d '{
  "folio_keep": "altered",
  "folio_folder": "Fraud cases",
  "folio_class": null,
  "loupe_version": "1.5.6",
  "latest_loupe_version": "1.6.0",
  "loupe_versions": [
    "1.5.6",
    "1.6.0"
  ]
}'
PUT /loupe/settings · Python
import requests

r = requests.put(
    "https://api.unforged.sh/loupe/settings",
    headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
    json={
        "folio_keep": "altered",
        "folio_folder": "Fraud cases",
        "folio_class": None,
        "loupe_version": "1.5.6",
        "latest_loupe_version": "1.6.0",
        "loupe_versions": [
            "1.5.6",
            "1.6.0"
        ]
    },
)
print(r.json())
PUT /loupe/settings · Node.js
const res = await fetch('https://api.unforged.sh/loupe/settings', {
  method: 'PUT',
  headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14', 'Content-Type': 'application/json' },
  body: JSON.stringify({
    "folio_keep": "altered",
    "folio_folder": "Fraud cases",
    "folio_class": null,
    "loupe_version": "1.5.6",
    "latest_loupe_version": "1.6.0",
    "loupe_versions": [
      "1.5.6",
      "1.6.0"
    ]
  }),
});
console.log(await res.json());
Response 200
{
  "folio_keep": "altered",
  "folio_folder": "Fraud cases",
  "folio_class": null,
  "loupe_version": "1.5.6",
  "latest_loupe_version": "1.6.0",
  "loupe_versions": [
    "1.5.6",
    "1.6.0"
  ]
}