Fieldnote Join the private beta

API contracts

Catch response drift in CI, not after deploy.

Your mobile app already encodes what it expects from GET /v2/inventory. Fieldnote reuses that as the consumer; your service runs against a provider stub and fails the build when the JSON no longer matches what ships in the OpenAPI commit.

  • . Average run in our test org: 38 seconds on GitHub Actions (Ubuntu, cache warm).
  • . Slack #api-releases only when a contract file changes on main, not on every commit noise.
Request a walkthrough
contract.yaml main
consumer: checkout-app
provider: inventory-api
pact: v4

expects:
  GET /v2/inventory?region=us-west
  200:
    body.items[].id: uuid
    body.items[].qty: int min:0

# fails at commit a4b91c3 when
# "qty" became string — caught in CI

excerpt from a real smoke config (customer identifier removed)

When teams outgrow "we'll fix it in postman"

Tied to Git

Diffs live next to openapi.yaml. Reviewers see contract + schema together.

Not another dashboard

Green or red in CI. Optional hosted trace when you need the failing JSON side by side.

Stubs you already wrote

Wire your Express or Fastify mock; we don't invent a second server.

"We were shipping mobile twice a week and the backend every day. One nullable field in production cost us a whole afternoon. After Fieldnote, the first red build was a PR that touched pagination, and we reverted before merge. Worth it for a team of eight."

Rafael C., platform lead, payments startup (Series B)

Private beta, February cohort

We onboard five companies per month. You get a shared Slack with the maintainers and migration notes from Pact if you're coming from there.

We reply within two business days. No agency spam.

About This Template

Asymmetric split layout for developer tools: story and CTA on one side, code-like panel on the other. Teal on slate-950, Inter and Jetbrains Mono. Part of the Web Examples Gallery.