Release gate for APIs and services

Know what is safe to ship.

MeerGate verifies a release candidate against the last version you trusted — and turns the difference into a decision you can defend, with the evidence attached.

No credit card · Self-hosted option · Your traffic stays in your network

Verifies RESTgRPCWebSocketBrowser steps in one flow
baseline v2.7.3 41 / 41 passing
compared with
candidate v2.8.1-rc1 40 / 41 passing
Blocked

hold-then-transfer — money out must respect held funds — passed in v2.7.3 and fails here.

show

One release decision, and the one behavior behind it.

How it works

AI proposes. You approve. The engine proves.

01

Discover

OpenAPI, gRPC reflection, service relationships and the rules written in your code.

02

Derive

The model proposes flows, each named after the behavior it protects.

03

Review

Accept, reword in plain language, or edit the manifest. Nothing runs unless you keep it.

04

Run

A deterministic engine executes it and records every request as evidence.

The model writes the flow. It never runs one, and it never decides a release.

A derived scenario

One rule. Every path that could break it.

Nobody wrote this test. The catalog knows the wallet has more than one way to move money, and the rule says none of them may touch funds on hold.

hold-then-transfer · derived from wallet-service 4 steps · 1.42s
1 Create hold 8,000 USDT held
A Bank transfer 5,000 USDT blocked
B QR pay 3,000 USDT blocked
2 Verify state 8,000 USDT still held
Invariant holds — every money-out path respects funds on hold. passed
Capabilities

Everything the decision needs — nothing that only decorates it.

catalog

Living service catalog

Services discovered from OpenAPI and gRPC reflection, then kept current: health, latency and schema drift.

wallet-service · drift: 2 fields
coverage

Coverage by operation

Every endpoint mapped to the tests that exercise it, so an untested operation is visible rather than assumed.

24 / 31 operations covered
generation

Rules and scenarios, derived

Guarantees found in your code become flows; service relationships become the cross-service scenario nobody wrote.

withdrawal.go:184 → qr-pay-locked-account
authoring

Plain language and YAML

Change a flow in one sentence, or edit the manifest by hand. Both produce the same reviewable file.

1 step added · same rule still covered
operations

Schedules and alerts

Run on a schedule, watch pass rate and duration, and get alerted on the failure conditions you define.

nightly 03:00 · alert under 90%
evidence

Root cause in your own tools

Every run carries a trace id into the services it calls, so a red step links into your Grafana or Datadog, already filtered.

trace 4bf92f35…0e4736
Evidence, not screenshots

One click from the failure to the reason.

No logs collected. No logs stored. Just the run's identity on every request it makes.

traceparent — the whole integration
00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
Open in your observability tools run 01K7F2 · failed
GrafanaLoki logs · Tempo traces DatadogLog explorer, scoped to the trace ElasticsearchKibana discover, same window New RelicDistributed trace view
Or any tool whose search is a URL — one template, your placeholders.
Pricing

Two ways to run it. Same verification.

What changes is who hosts it and what you need around it. The free CLI is below.

EnterpriseLet's talk

The same verification, running inside your network and under your own controls.

  • Everything in Cloud
  • Private runners — traffic never leaves your network
  • Self-hosted, VPC or on-prem · data residency
  • SSO · RBAC · audit trail
  • Commercial licence, no copyleft
  • SLA and dedicated support
Talk to us

Reply within one business day

Free CLI · $0

One binary. One report.

Point it at a spec. It derives the contract checks, runs them, and writes a Markdown report — no account, nothing to host, nothing to connect.

Checks derived from your spec — nothing to write
Runs your own flow files too
Read-only by default; writes need an explicit flag
zshcoming soon
$ go install github.com/meergate/cli@latest
$ meergate run --openapi ./openapi.yaml

  12 operations · 34 checks
  32 passed   2 failed

   GET /orders/{id}   404 ≠ 200
   POST /orders       schema: missing `total`

  report → meergate-report.md
Questions

The things people ask first.

Does my code or traffic leave my network?

With the self-hosted and Enterprise options, no: runners live inside your network and call your services directly. On Cloud, MeerGate calls the endpoints you point it at. In every case logs are never collected — the product links out to your own tool instead of ingesting anything.

What does MeerGate need to get started?

A reachable service and a description of its surface: an OpenAPI document, gRPC server reflection, or both. Discovery fills the catalog from there, and generation proposes the first flows for you to review.

How is this different from running my suite in CI?

A suite answers "did my tests pass". MeerGate answers "did anything that used to work stop working", by keeping the previous good result per test and diffing against it. That comparison — not the pass rate — is what blocks or clears a release.

Do I have to write the tests?

No, but you can. Flows are generated from your contracts and the business rules found in your code; you refine them in plain language or by editing the YAML directly. Anything you write by hand runs the same way.

Request a demo

See it against your own service.

Tell us what you need to ship safely — one endpoint, or a chain across four services. We answer within one business day, from a person.

Prefer email? hello@meergate.com

Which protocols do you need to cover?

A 30-minute technical session with an engineer. No setup needed — we work against your own services. Your details are used only for this request.