---
title: "Reva: Validate requests with OpenAPI in Node.js"
description: "Validating API requests shouldn't be a hassle. Why write validation code by hand when we have OpenAPI documents that describe every endpoint? To address this problem we built Reva, a simple Node.js request validator based on OpenAPI."
author: "Elias Meire"
published: "2022-01-27T16:09+01:00"
updated: "2025-03-26T11:23:19.998Z"
url: "https://www.apideck.com/blog/reva-validate-openapi-nodejs"
tags: ["Guides & Tutorials"]
---

# Reva: Validate requests with OpenAPI in Node.js

Validating API requests shouldn't be a hassle. Why write validation code by hand when we have OpenAPI documents that describe every endpoint? To address this problem we built Reva, a simple Node.js request validator based on OpenAPI.

As an API-first company, we try to deliver the best developer experience possible with our APIs. API validation has a huge role to play in DX. Developers should get immediate and precise feedback when their requests aren't valid. Reva leverages our [public OpenAPI specifications](https://github.com/apideck-libraries/openapi-specs) to do exactly that.

Here are some highlights of [`@apideck/reva`](https://github.com/apideck-libraries/reva "Apideck Reva GitHub")

- ✅ **Complete**: Reva validates [all OpenAPI parameter types](https://swagger.io/docs/specification/describing-parameters "OpenAPI parameter docs") and request body
- 😄 **Human-readable** error messages powered by our [better-ajv-errors](https://github.com/apideck-libraries/better-ajv-errors "Apideck better AJV errors GitHub") package.
- 🧩 Flexible: works with **any Node.js framework** and serverless provider
- 🪶 Small footprint: **< 50kB**
- 👩‍💻 High quality **TypeScript** definitions

Ready to try it out? Install Reva through npm.

```
npm i @apideck/reva
```

## Using Reva

After installing Reva, import the `Reva` class, and create a new instance.

To validate a request you need a request object and an OpenAPI operation. No need to load a complete OpenAPI document to validate a single endpoint.

A request can have the following properties: `body`, `queryParameters`, `pathParameters` and `headers`. None of them are required. You can, for example, use Reva to only validate query parameters.

```
import { Reva } from '@apideck/reva';

const reva = new Reva();

const result = reva.validate({
  operation, // OpenAPI operation
  request: {
    headers: { 'X-My-Header': 'value', Cookie: 'Key=Value' },
    pathParameters; { id: 'ed55e7a3' },
    queryParameters; { search: 'foo' },
    body: {},
  },
});

if (result.ok) {
  // Valid request!
} else {
  // Invalid request, result.errors contains validation errors
  console.log(result.errors);
}
```

Detailed docs can be found on [GitHub](https://github.com/apideck-libraries/reva "Apideck Reva GitHub").

## Feedback welcome

We built Reva to solve our own need for easy validation based on OpenAPI. We hope you find it useful too. Any feedback is welcome, looking forward to collaborate further on GitHub.