API Basics

The Nirmata API model is composed of resources. Each resource type is described by a class and is made up of attributes and relations. Each resource has a modelIndex that indicates its class, and a uri that describes how it can be queried. At runtime, each resource can contain relations to other resources. The relations can be parent-child relations or reference relations.

The Nirmata API is accessible at:

https://www.nirmata.io/api/
```text

**Note:** trying the API URL in a browser will return an empty page, as the
required HTTP headers are not specified. You can use a REST client, like
Postman (<https://www.getpostman.com/>), to try and learn the API.

## Authentication

To authenticate your account, you can use HTTP BASIC authentication or
an API Key:

    Authorization BASIC <Bas64 user:password>

or:

    Authorization NIRMATA-API <your api key>

Since the Nirmata API is only accessible via HTTPS, your credentials are
sent over an encrypted connection.

To manage your API Key, login to Nirmata and navigate to *Settings ->
Account -> Generate API Key*. An API key is associated with a User
account. When you authenticate an application using the API key, it will
get the role and privileges associated with the account.

A best practice recommendation is to create separate accounts for each
application, and provide the minimum required role and privileges to the
account.

## Operations

  Operation | HTTP Method | URI Syntax | Description
  ----------|-------------|------------|------------
  Create    | POST        | /{modelIndex} | Creates a new resource. The *modelIndex* is the resource name.
            |             |  /{parent}/{id}/{relation} | Create a new resource, as child of the '{parent}/{id}' resource
  Retrieve  | GET          | /{modelIndex}        |        Returns all resources of type specified by 'modelIndex'
            |               | /{modelIndex}/{id}  |        Returns a single resource
  Update    | PUT          | /{modelIndex}/{id}   |       Updates a resource
  Delete    |  DELETE      |  /{modelIndex}/{id}  |     Deletes a resource
  Discover  |  OPTIONS     | /                    |      Returns the class definitions for all resources
            |              | /{modelIndex}        |       Returns the class definition for a single resource

### HTTP Response Status Codes

The following table lists common HTTP response codes used by the API:

  HTTP Status Code | Description
  ------------------|-----------------
  200      |         The operation succeeded
  401      |         The user authentication failed
  403      |         The request was not permitted
  406      |         The request results in an invalid configuration
  500      |         The request caused a server error

### Resources

The following are some of the commonly used endpoints available via the
API:

 -   catalog/api/applications
 -   catalog/api/application/{id}/import
 -   catalog/api/application/{id}/export
 -   catalog/api/application/{id}/run
 -   catalog/api/deployments
 -   catalog/api/statefulSets
 -   catalog/api/podTemplateSpecs
 -   catalog/api/podSpecs
 -   catalog/api/volumes
 -   catalog/networkPolicies
 -   catalog/api/services
 -   catalog/api/ingresses
 -   catalog/api/configMaps
 -   catalog/api/secrets
 -   environments/api/environments
 -   environments/api/applications
 -   environments/api/application/{id}/import
 -   environments/api/application/{id}/export
 -   environments/api/deployments
 -   environments/api/statefulSets
 -   environments/api/podTemplateSpecs
 -   environments/api/podSpecs
 -   environments/api/volumes
 -   environments/networkPolicies
 -   environments/api/services
 -   environments/api/ingresses
 -   environments/api/configMaps
 -   environments/api/secrets
 -   environments/api/podSpecs
 -   environments/api/volumes
 -   environments/networkPolicies
 -   environments/api/services
 -   environments/api/ingresses
 -   environments/api/configMaps
 -   cluster/api/hostClusters
 -   cluster/api/nodes
 -   cluster/api/nodes
 -   cluster/api/events
 -   cluster/api/namespaces
 -   cluster/api/storageClasses
 -   cluster/api/persistentVolumes
 -   cluster/api/nodeStats
 -   cluster/api/clusterStats
 -   cluster/api/pendingPods
 -   cluster/api/clusterPolicies
 -   cluster/api/clusterRoles
 -   cluster/api/clusterRoleBindings