# gRPC Reflection

> Inspect NoLimitNodes gRPC services with grpcurl and verify reflection before you ship.

Canonical: https://nolimitnodes.com/docs/api-reference/grpc/reflection

gRPC reflection lets a client inspect services and message types without a local proto file. Use it for development checks and service exploration. Keep the published proto files in your application build because production clients should not depend on reflection.

## Check a service

Pass your API key as metadata.

```bash

grpcurl \
  -H "x-api-key: ${NLN_API_KEY}" \
  events.nln.clr3.org:443 \
  list
```

Inspect one service after the list command succeeds.

```bash
grpcurl \
  -H "x-api-key: ${NLN_API_KEY}" \
  events.nln.clr3.org:443 \
  describe geyser.Geyser
```

Run the same check against `stream-1.nln.clr3.org:443` for Enhanced Streams.

## If reflection is unavailable

Use the published definitions:

- [Enhanced Streams proto](https://nolimitnodes.com/protos/enhanced-streams.proto)
- [Enhanced Streams descriptor set](https://nolimitnodes.com/protos/enhanced-streams.pb)
- [Program Streams proto](https://nolimitnodes.com/protos/program-streams.proto)
- [Program Streams descriptor set](https://nolimitnodes.com/protos/program-streams.pb)

The descriptor sets include imported definitions. Tools such as grpcurl, Buf, and language generators read them without contacting a reflection service.

## Deployment check

Run the repository reflection audit after each gRPC deployment.

```bash
NLN_API_KEY="YOUR_API_KEY" npm run audit:grpc-reflection
```

The check fails when a documented endpoint stops exposing its service list.
