diff --git a/sam/docs/README.md b/sam/docs/README.md
new file mode 100644
index 000000000..3f5b2d905
--- /dev/null
+++ b/sam/docs/README.md
@@ -0,0 +1,453 @@
+# Organisations
+
+Organisations represent a top-level grouping entity. There may be many organisations defined in a single deployment.
+
+## Update organisation details
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/organisation/edit` | HTTP/S | POST | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | POST | Organisation ID | N/A | NO |
+| name | string | POST | Organisation Name | N/A | YES |
+
+## Remove organisation
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/organisation/remove` | HTTP/S | DELETE | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | GET | Organisation ID | N/A | YES |
+
+## Read organisation details
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/organisation/read` | HTTP/S | GET | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | GET | Organisation ID | N/A | YES |
+
+## Search organisations
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/organisation/search` | HTTP/S | GET | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| query | string | GET | Search query | N/A | NO |
+
+## Archive organisation
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/organisation/archive` | HTTP/S | POST | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | POST | Organisation ID | N/A | YES |
+
+
+
+
+# Teams
+
+An organisation may have many teams. Teams may have many channels available. Access to channels may be shared between teams.
+
+## Update team details
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/team/edit` | HTTP/S | POST | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | POST | Team ID | N/A | NO |
+| name | string | POST | Name of Team | N/A | YES |
+| members | []uint64 | POST | Team member IDs | N/A | NO |
+
+## Remove team
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/team/remove` | HTTP/S | DELETE | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | GET | Organisation ID | N/A | YES |
+
+## Read team details and memberships
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/team/read` | HTTP/S | GET | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | GET | Organisation ID | N/A | YES |
+
+## Search teams
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/team/search` | HTTP/S | GET | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| query | string | GET | Search query | N/A | NO |
+
+## Archive team
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/team/archive` | HTTP/S | POST | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | POST | Organisation ID | N/A | YES |
+
+## Move team to different organisation
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/team/move` | HTTP/S | POST | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | POST | Organisation ID | N/A | YES |
+| organisation_id | uint64 | POST | Organisation ID | N/A | YES |
+
+
+
+
+# Channels
+
+A channel is a representation of a sequence of messages. It has meta data like channel subject. Channels may be public, private or direct (between two users).
+
+## Update channel details
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/channel/edit` | HTTP/S | POST | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | POST | Channel ID | N/A | NO |
+| name | string | POST | Name of Channel | N/A | YES |
+| topic | string | POST | Subject of Channel | N/A | YES |
+
+## Remove channel
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/channel/remove` | HTTP/S | DELETE | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | GET | Channel ID | N/A | YES |
+
+## Read channel details
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/channel/read` | HTTP/S | GET | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | GET | Channel ID | N/A | YES |
+
+## Search channels
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/channel/search` | HTTP/S | GET | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| query | string | GET | Search query | N/A | NO |
+
+## Archive channel
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/channel/archive` | HTTP/S | POST | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | POST | Channel ID | N/A | YES |
+
+## Move channel to different team or organisation
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/channel/move` | HTTP/S | POST | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | POST | Channel ID | N/A | YES |
+
+## Merge one team into another
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/channel/merge` | HTTP/S | POST | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| destination | uint64 | POST | Destination Channel ID | N/A | YES |
+| source | uint64 | POST | Source Channel ID | N/A | YES |
+
+
+
+
+# Messages
+
+Messages represent individual messages in the chat system. Messages are typed, indicating the event which triggered the message.
+
+Currently expected message types are:
+
+| Name | Description |
+| ---- | ----------- |
+| CREATE | The first message when the channel is created |
+| TOPIC | A member changed the topic of the channel |
+| RENAME | A member renamed the channel |
+| MESSAGE | A member posted a message to the channel |
+| FILE | A member uploaded a file to the channel |
+
+The following event types may be sent with a message event:
+
+| Name | Description |
+| ---- | ----------- |
+| CREATED | A message has been created on a channel |
+| EDITED | A message has been edited by the sender |
+| REMOVED | A message has been removed by the sender |
+
+## New message / edit message
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/message/edit` | HTTP/S | POST | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | POST | Message ID | N/A | NO |
+| channel_id | uint64 | POST | Channel ID where to post message | N/A | NO |
+| contents | string | POST | Message contents (markdown) | N/A | YES |
+
+## Attach file to message
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/message/attach` | HTTP/S | PUT | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+
+## Remove message
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/message/remove` | HTTP/S | DELETE | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| id | uint64 | GET | Message ID | N/A | YES |
+
+## Read message details
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/message/read` | HTTP/S | GET | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| channel_id | uint64 | POST | Channel ID to read messages from | N/A | YES |
+
+## Search messages
+
+#### Method
+
+| URI | Protocol | Method | Authentication |
+| --- | -------- | ------ | -------------- |
+| `/message/search` | HTTP/S | GET | Client ID, Session ID |
+
+#### Request parameters
+
+| Parameter | Type | Method | Description | Default | Required? |
+| --------- | ---- | ------ | ----------- | ------- | --------- |
+| query | string | GET | Search string to match against messages | N/A | NO |
+| message_type | string | GET | Limit results to message type | N/A
Values: