--- title: /api.html
--- description: API Notation
# API Notation
API Notation is a language-agnostic notation to share the public API of components in code. It was created to standardize software specification documents in teams that need to review code across several languages.
```
// Anything after two forward slashes is a comment
NameOfClass.WithPossibleNamespace
+ class property
- instance property
~> listened events (socket)
+> listened events (class/module)
-> listened events (instance)
<~ dispatched events (socket)
<+ dispatched events(class/module)
<- dispatched events (instance)
:: class method
# instance method
Other symbols
=> returns
#> throws
[xx] optional
data type
Recommended order: class first, then sockets, then instance. Internally:
Properties, events, methods.
```
Or, with some examples:
```
// Definitions start with object / module / class names, with namespaces
// separated by periods. Types are marked between angular brackets.
Definitions.Models.Post
// Properties.
+static_property
-instance_property >>>
// Methods. Parameters are listed in parentheses, and comma separated.
// Optional values are inside brackets
// => defines return values
// #> defines thrown exceptions, can be comma separated.
::static_methods(parameter_label ) => ReturnValueType #> BadTimesException,UnknownError
#update(text , [options] ) => Promise
// Listened Events
+>static_listener(parameters_expected )
->instance_listener()
~>network_events(peer )
// Emitted Events
<+emitted_statically(payload )
<-emitted_by_instance(reason , code )
<~emitted_through_network(text )
```
When defining function types, you may use parameter lists, returns and throws notation as well.
```
HypotheticalModule
#transform( Function(payload ) => , announce ) =>
```