# Classic REST API

Each service here also has a newer version in the [REST API](https://dev.nominal.io/api.md), which lists every service. Use the newer version where you can.

Call these services as you would the REST API, with the same base URL and API key.

## Services

### Data

- [Containerized extractor service](https://dev.nominal.io/api/legacy/containerized-extractor-service.md)
- [Ingest service](https://dev.nominal.io/api/legacy/ingest-service.md)
- [Streaming session service](https://dev.nominal.io/api/legacy/streaming-session-service.md)
- [Units service](https://dev.nominal.io/api/legacy/units-service.md)

### Metadata

- [Asset service](https://dev.nominal.io/api/legacy/asset-service.md)
- [Comments service](https://dev.nominal.io/api/legacy/comments-service.md)
- [Event service](https://dev.nominal.io/api/legacy/event-service.md)

### Access and administration

- [Workspace service](https://dev.nominal.io/api/legacy/workspace-service.md)

## Errors

A failed request gets an HTTP error status and a JSON body like this one:

```json
{
  "errorCode": "NOT_FOUND",
  "errorName": "Catalog:DatasetNotFound",
  "errorInstanceId": "<error instance id>",
  "parameters": {}
}
```

`errorName` says which error it is, and each service’s page lists the errors it defines. `errorCode` is its kind, such as `NOT_FOUND` or `INVALID_ARGUMENT`.
