halyard
NewUsage-based billing export

The control plane for every API you ship

Halyard puts keys, rate limits, usage and logs behind one gateway. Ship an endpoint in minutes and see every request it serves.

Free up to 1M requests a month

Stop stitching your API stack together from five vendors.

Gateways, key stores, rate limiters and log pipelines usually live in different places. Halyard runs them as one system with one source of truth.

  • Key scopes

    Keys that know their scope. Issue, rotate and revoke keys per environment, each with only the access it needs.

  • Rate limits

    Limits at the edge. Quotas are enforced before traffic reaches your origin, so a burst never becomes an outage.

  • Routing

    One gateway, every region. Requests are routed to the nearest healthy origin and rerouted the moment one fails.

  • Usage

    Usage you can bill on. Per-key request counts, bucketed by the hour and ready for invoicing.

Teams shipping on Halyard

  • vantra
  • Orbitly
  • QUILLBRIDGE
  • Tidewell
  • nimbra
  • Larkspur
  • fernway
  • COBALT ROW
Who ships on Halyard

From a first endpoint to a fleet of agents. Startups, agent platforms and enterprises run on the same gateway, with the same keys and the same limits.

Where startupsstart

Free tier, no card. Your first protected endpoint goes live in minutes.

1M

Requests a month on the free tier, with keys, limits and logs included from the first call.

  • Deploy from a repo or an OpenAPI file
  • Test and live keys per environment
  • Upgrade by usage, never by seat

Where agentplatforms deploy

One key per agent, a spend cap on every key, and a 429 instead of a surprise invoice.

100k

Keys per project. Each one carries its own scopes, rate limit and spend cap.

  • Mint keys from your platform's API
  • Caps in requests, tokens or dollars
  • Revoke one agent without touching the rest

Where enterprisesscale

SSO, signed audit logs and request data that stays in the region you pick.

12regions

Pin a project to a region and its request data, logs and usage never leave it.

  • SAML, OIDC and SCIM provisioning
  • Audit log streamed to your SIEM
  • Per-region keys and limits
eu-central-1Frankfurt
Request data
stays in EU
Audit log
streamed, signed
Sign-in
SAML · OIDC · SCIM
Build and ship

Ship endpoints in minutes. Change limits and keys without a redeploy.

Halyard sits in front of your origin, so routing, limits and credentials go out as config: staged, observable and easy to reverse.

Deploy endpoints from a repoPush to main, get a live route

Point Halyard at a repo and an OpenAPI file. Every push builds a versioned route with its keys and limits already attached.

  • OpenAPI
  • gRPC
  • GraphQL
  • REST
acme/orders-api/Deploymentsmain · 8f3c21a

Deploy orders-api

Triggered by a push to main · 3 files changed

$ halyard deploy --env production
▸ Reading halyard.yaml
✓ openapi.yaml parsed · 14 routes
✓ Key policy orders-prod attached
✓ Limit 600 req/min · sliding window
▸ Propagating0/31 regions
✓ Live at api.acme.dev/v1 in 38s
MethodRoutep50Status
GET/v1/orders4 msReady
POST/v1/orders7 msReady
GET/v1/orders/{id}3 msReady
DELETE/v1/orders/{id}5 msReady

Roll out limits safelyShadow first, then enforce

Run a new limit in shadow mode and see exactly what it would have blocked. Enforce it for 5%, 25% or all traffic when the numbers look right.

acme/Rate limits/orders-write

Roll out a new limit

1,200 req/min per key · sliding window · edge

Enforce forShadow0% of traffic
Requests per key · last hournew limit
-60m-45m-30m-15mnow
0.8%Would be limited
3 of 412Keys affected
+0.2 msAdded p95

Rotate keys with zero downtimeOverlap windows, not outages

Issue a new key and keep the old one valid for a window you choose. Halyard revokes it once its traffic has moved over.

acme/Keys/billing-service

Rotate production key Rotating

Overlap window 24h · revoke when old-key traffic reaches zero

Issued+6h+12h+18hRevoke
hk_live_…a91fCurrent · ci-bot
hk_live_…7c2eNew · billing:*
Traffic on new key
0%
New key issued+0m
First verified request on the new key+2m
Old key traffic under 1%+19h
Old key revoked · 0 failed requestsscheduled
SDKs

Ten lines to a protected endpoint

Declare the route, its scopes and its limit next to the handler. Halyard enforces them at the edge before your code runs.

src/charges.ts10 lines
1import { Halyard } from "@halyard/sdk";
2
3const halyard = new Halyard({ token: process.env.HALYARD_TOKEN });
4
5export default halyard.route("/v1/charges", {
6  auth: { scopes: ["charges:write"] },
7  limit: { requests: 100, per: "1m", by: "key" },
8  usage: { meter: "charges" },
9  handler: async (req) => createCharge(await req.json()),
10});
Responsewaiting

POST/v1/charges

ratelimit-limit
100
ratelimit-remaining
99
ratelimit-reset
60s
x-halyard-key
hk_live_8f2c
Typed end to endScopes and meters are checked at build time in TypeScript and Go.
Same config everywhereEvery SDK writes the same route spec, so curl and code never drift.
Headers you can readEach response carries the remaining quota and reset time for its key.

Gateway

Every request, accounted for. Keys, limits and logs in one control plane.

  • Keys that know their scope. Issue, rotate and revoke per environment without touching a deploy.

  • Limits at the edge. Rate limits and quotas enforced before traffic reaches your origin.

  • Usage you can bill on. Per-key counts turn into invoice lines, exported straight to your billing.

  • Live logsus-east · edge
    1. 12:04:21200GET /v1/keys/verify4ms
    2. 12:04:21200POST /v1/ratelimit6ms
    3. 12:04:22429GET /v1/orders2ms
    4. 12:04:22200GET /v1/keys/verify3ms
    5. 12:04:23401PUT /v1/apis/agent5ms
    6. 12:04:23200GET /v1/usage9ms
    7. 12:04:24200POST /v1/keys11ms
    8. 12:04:24200GET /v1/keys/verify3ms
    9. 12:04:25429GET /v1/orders2ms
    10. 12:04:25200GET /v1/analytics14ms

    Logs that explain themselves. Every decision traced back to the key, limit and rule that made it.

Integrations

Plugs into the stack you already run

Send logs, usage and alerts to the tools your team already watches. Each connector is a toggle in the dashboard or one line of config.

  • PostgreSQLDatabase
  • KafkaEvent stream
  • DatadogObservability
  • OpenTelemetryTraces
  • StripeBilling
  • OktaIdentity
  • PagerDutyOn-call
  • GrafanaDashboards
  • halyardLogs, usage and alerts out to every tool on the wall
  • PrometheusMetrics
  • CloudflareEdge
  • VercelDeploys
  • GitHubCI and keys
  • SnowflakeWarehouse
  • SentryErrors
  • RedisCache
  • DiscordAlerts

Not on the wall? Webhooks and a REST API cover the rest.

Browse integrations

Observe

See every request as it happens

Volume, latency and status codes for every key and route in one view. Hover any minute to see what the gateway served.

Security

Built for your security review

Halyard sits in front of your traffic, so we hold it to the bar your auditors will. These are the targets the platform is designed and run to.

  • Design target

    SOC 2 Type II

    Audit-ready controls. Access, change and incident controls built to the SOC 2 Type II criteria for security, availability and confidentiality.

  • Design target

    AES-256

    Encrypted end to end. AES-256 at rest and TLS 1.3 in transit. API keys are stored as salted hashes, never in plain text.

  • Design target

    US · EU · APAC

    Data stays in region. Pin a workspace to one region. Its logs, usage and key material are processed and stored there and nowhere else.

  • Design target

    99.99%

    Uptime target. Every edge runs in more than one zone, and traffic fails over to the next healthy region without a config change.

These are targets, not a live status feed. We send current audit status and subprocessors on request.

Request the security pack
Customer story
Mara OkaforCTO, Tidewell

We had keys in one service, limits in another and logs in a third. Moving all of it behind Halyard took an afternoon, and on-call finally got quiet.

Pricing

Pay for requests, not seats

One price per request, the same features on every plan. Drag the slider to see what your traffic would cost.

  1. Start free

    Your first million requests each month cost nothing, with every gateway feature switched on.

  2. Pay per million after that

    Pro is $29 a month with 5M requests included. Past that, each million costs $4, dropping to $2 at volume.

  3. Never per seat or per key

    Invite the whole team and issue as many keys as you need. Only traffic shows up on the bill.

Estimate Pro/mo
  • Pro platform feeIncludes 5M requests$29
  • 5M to 50M$4.00 per million$80
  • 50M to 250M$3.00 per million$0
  • 250M to 1B$2.00 per million$0

Works out to $4.36 per million requests.

25 million requests per month: $109 per month on Pro.

Ship your next API on Halyard

Free for your first million requests each month. After that you pay per million, with no gateway to run yourself. See pricing