# NeoFS-API

NeoFS-API repository contains language-agnostic 
[protocol buffers](https://developers.google.com/protocol-buffers) definitions
of neofs-node structures and services. 

## Description

NeoFS-API repository is the basis for language-specific libraries, e.g.:

- [neofs-api-go](https://github.com/nspcc-dev/neofs-api-go)
- [neofs-api-csharp](https://github.com/nspcc-dev/neofs-api-csharp)

These libraries contain compiled protocol buffers code, defined in this
repository. Use them to integrate applications with NeoFS.

This repository contains:

- 12 protocol buffers packages,
- [auto-generated docs](proto-docs) for protocol buffers,
- [manually written docs](docs) for developers (to be done). 


### Protocol packages

#### Accounting

Accounting package defines services and structures for balance request and 
`cheque` operations.

See:

- [Accounting service](proto-docs/accounting.md#accounting.Accounting)
- [Withdraw service](proto-docs/accounting.md#accounting.Withdraw)

#### ACL

ACL package defines targets of access control rules.

#### Bootstrap

Bootstrap package defines bootstrap service that connects storage nodes
to the network. 

See:

- [Bootstrap service](proto-docs/bootstrap.md#bootstrap.Bootstrap)


#### Container

Container package defines service and structure of containers. NeoFS stores
objects within the registered container according to a specified storage policy.

See:

- [Container service](proto-docs/container.md#container.Service)

#### Decimal

Decimal defines structure for encoding assets amount.

#### Object

Object is the storage unit in NeoFS. Object package defines structure of the
object and service requests.

See:

- [Object service](proto-docs/object.md#object.Service)

#### Query

Query package defines structure for object search requests. 

#### Refs

Refs package defines identity types: object id, container id, etc.

#### Service

Service package defines utility structures for all public API requests: 
TTL, request signature, etc.

#### Session

Session package defines service and structures to setup session between
the node and the client. Session token is required in some object service
requests. Node uses session private key to re-sign new objects and requests.

See:

- [Session service](proto-docs/session.md#session.Session)

#### State

State package defines service and structures for metrics gathering. 

See:

- [Status service](proto-docs/state.md#state.Status)

#### StorageGroup

Storagegroup package defines structure that contains meta data for data audit. 
This meta data stored as a header in the NeoFS object.


## License

This project is licensed under the Apache 2.0 License - 
see the [LICENSE](LICENSE) file for details