Quickstart

1. Grab an API key

Visit exayard.com/settings/profile/security and create a key scoped to what you need (e.g. read:projects + write:estimates).

2. Call /v1/me

curl https://api.exayard.com/v1/me \
  -H "Authorization: Bearer sk_live_..."

Or use the TypeScript SDK:

import { Exayard } from '@exayard/sdk'

const exa = new Exayard({ apiKey: process.env.EXAYARD_API_KEY! })
const me = await exa.me.get()

Or the CLI:

exayard login --api-key sk_live_...
exayard projects:list --org org_...

3. Handle errors

Every non-2xx response is RFC 9457 application/problem+json. The SDK turns it into a typed ExayardError:

import { Exayard, ExayardError } from '@exayard/sdk'

try {
  await exa.projects.create({ organizationId: 'org_...', name: 'Demo' })
} catch (err) {
  if (err instanceof ExayardError && err.isRateLimited()) {
    // Honor RateLimit-Policy reset before retrying
  }
  if (err instanceof ExayardError && err.isInsufficientScope()) {
    console.error('Need scope:', err.param)
  }
  throw err
}

4. Subscribe to webhooks

Register an endpoint once, then verify deliveries on your side. See Subscribe to webhooks for the full flow.