Skip to content

Authentication

API keys

Create keys in Settings → Integrations → Public API.

PrefixUse
af_test_Local and staging
af_live_Production only

The full secret is shown once at creation. Store it in your server secrets manager or environment variables.

bash
export AF_API_KEY="af_test_••••"

Request header

http
Authorization: Bearer af_test_••••

Alternate (equivalent):

http
X-AF-Api-Key: af_test_••••

Scopes

Keys are deny-by-default. Grant only what the integration needs.

ScopeAllows
products:readList active products
fees:readCoverage check + fee/turnaround preview
quotes:writeCreate quotes (Open Quote queue). Does not accept quotes via API key.
quotes:readRead public-safe quote status; lookup by id or external_reference
files:writeUpload documents to a quote/order
orders:writeCreate draft orders (later wave)
orders:readRead order milestones (later wave)
scheduling:readRead booking options (later wave)
scheduling:writeBook/confirm inspection (later wave)
webhooks:manageRegister webhook endpoints via API (optional; UI always available)

Missing scope → 403 with insufficient_scope.

Invalid, revoked, or wrong-environment keys → 401 with invalid_api_key.

Who can create keys

Tenant users with company configuration permission (Owner / Company Admin). Keys are bound to the tenant, not to the creating user.

Rotation

  1. Create a new key with the same scopes.
  2. Deploy the new secret to your servers.
  3. Revoke the old key.

Revocation is immediate.

IP allowlist (optional)

When configured on a key, requests from other IPs return 403 ip_not_allowed. Use for fixed server egress IPs. Skip for Zapier/serverless unless you know their ranges.

Sanity check

http
GET /public/v1/me
Authorization: Bearer af_test_••••

Returns tenant slug/name and the key’s scopes (never the secret).

Browser apps

Do not put API keys in frontend JavaScript, mobile apps, or public repos.

Pattern:

text
Browser form → Your backend → Appraiser Flow Public API

Your backend holds AF_API_KEY and enforces your own auth/CAPTCHA/rate limits for end users.

API base for Try-it: https://staging-api.appraiserflow.ai