{
    "common": [
        {
            "name": "accounts",
            "version": "1.0.0",
            "methods": [
                {
                    "verb": "GET",
                    "call": "checkToken",
                    "desc": "Checks to see if an api token is valid",
                    "authRequired": true,
                    "args": [],
                    "isUserCreated": false
                },
                {
                    "verb": "POST",
                    "call": "session",
                    "desc": "Obtain a token for an anonymous session",
                    "authRequired": false,
                    "args": [
                        {
                            "name": "clientInfo",
                            "type": "string",
                            "isRequired": false,
                            "description": "Any additional info about this log in (from browser, from app, etc)"
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "POST",
                    "call": "signIn",
                    "desc": "Sign in using system credentials",
                    "authRequired": false,
                    "apiBlueprint": true,
                    "args": [
                        {
                            "name": "username",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "password",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "clientInfo",
                            "type": "string",
                            "isRequired": false,
                            "description": "Any additional info about this log in (from browser, from app, etc)"
                        },
                        {
                            "name": "token",
                            "type": "string",
                            "isRequired": false,
                            "description": "token from external identity provider"
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "POST",
                    "call": "signUp",
                    "desc": "Sign up for new system credentials",
                    "authRequired": false,
                    "apiBlueprint": true,
                    "args": [
                        {
                            "name": "username",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "password",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "isRequired": true,
                            "description": "Used for Forgot Password and Welcome Email"
                        },
                        {
                            "name": "external_id",
                            "type": "string",
                            "isRequired": false,
                            "description": "Identifier given by an external identity provider"
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "POST",
                    "call": "apiUser",
                    "desc": "Sign up for api credentials",
                    "authRequired": false,
                    "arg       s": [
                        {
                            "name": "email",
                            "type": "string",
                            "isRequired": true,
                            "description": ""
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "POST",
                    "call": "externalUser",
                    "desc": "Sign up using an external werivce's id",
                    "authRequired": false,
                    "args": [
                        {
                            "name": "email",
                            "type": "string",
                            "isRequired": true,
                            "description": ""
                        },
                        {
                            "name": "external_id",
                            "type": "string",
                            "isRequired": true,
                            "description": ""
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "POST",
                    "call": "apiCredentials",                                                                                                                                                                                                                                                                                                                 
                    "desc": "Get api credentials for an existing user",
                    "authRequired": true,
                    "args": [
                        {
                            "name": "first",
                            "type": "string",
                            "isRequired": false,
                            "description": "User's first name"
                        },
                        {
                            "name": "last",
                            "type": "string",
                            "isRequired": false,
                            "description": "User's last name"
                        },
                        {
                            "name": "roles",
                            "type": "array",
                            "isRequired": false,
                            "description": "can include any of owner's roles"
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "PUT",
                    "call": "email",
                    "desc": "Update your bsuser model",
                    "authRequired": true,
                    "args": [
                        {
                            "name": "email",
                            "type": "string",
                            "isRequired": true,
                            "description": ""
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "PATCH",
                    "call": "password",
                    "desc": "Update your bsuser password",
                    "authRequired": true,
                    "args": [
                        {
                            "name": "password",
                            "type": "string",
                            "isRequired": true,
                            "description": null
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "POST",
                    "call": "forgotPassword",
                    "desc": "Emails a token to reset password",
                    "authRequired": false,
                    "args": [
                        {
                            "name": "username",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "POST",
                    "call": "forgotUsername",
                    "desc": "get username from email",
                    "authRequired": false,
                    "args": [
                        {
                            "name": "email",
                            "type": "string",
                            "isRequired": true,
                            "description": null
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "POST",
                    "call": "resetPassword",
                    "desc": "Reset password using a token",
                    "authRequired": false,
                    "args": [
                        {
                            "name": "token",
                            "type": "string",
                            "isRequired": true,
                            "description": null
                        },
                        {
                            "name": "password",
                            "type": "string",
                            "isRequired": true,
                            "description": null
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "POST",
                    "call": "signOut",
                    "desc": "Sign out of the system",
                    "authRequired": true,
                    "args": null,
                    "isUserCreated": false
                },
                {
                    "verb": "GET",
                    "call": "profile",
                    "desc": "Get my profile",
                    "authRequired": true,
                    "args": null,
                    "isUserCreated": false
                },
                {
                    "verb": "POST",
                    "call": "profile",
                    "desc": "Set or update my profile",
                    "authRequired": true,
                    "args": [
                        {
                            "name": "userprofile",
                            "type": "object",
                            "isRequired": true,
                            "description": "An object with key/values to be saved in the user object"
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "DELETE",
                    "call": "account",
                    "desc": "Inavtivate your bsuser",
                    "authRequired": true,
                    "args": [],
                    "isUserCreated": false
                },
                {
                    "verb": "DELETE",
                    "call": "apiCredentials",
                    "desc": "remove a client_id / client_secret pair",
                    "authRequired": true,
                    "args": [
                      {
                        "name": "client_id",
                        "type": "string",
                        "isRequired": true,
                        "description": "Client id to be removed"
                      }
                    ],
                    "isUserCreated": false
                }
            ]
        },
        {
            "name": "internalSystem",
            "version": "1.0.0",
            "methods": [
                {
                    "verb": "GET",
                    "call": "version",
                    "desc": "Get the current version of API",
                    "authRequired": false,
                    "args": [],
                    "description": "Get the current version of API",
                    "isUserCreated": false
                },
                {
                    "verb": "GET",
                    "call": "headerTokenKey",
                    "desc": "Get the instances header token key. (ie: we use bs_auth_token)",
                    "authRequired": false,
                    "args": [],
                    "description": "Get the instances header token key. (ie: we use bs_auth_token)",
                    "isUserCreated": false
                },
                {
                    "verb": "GET",
                    "call": "endpoint",
                    "desc": "Get the registered service calls",
                    "authRequired": false,
                    "args": [],
                    "description": "Get the registered service calls",
                    "isUserCreated": false
                },
                {
                    "verb": "GET",
                    "call": "health",
                    "desc": "Server health check",
                    "authRequired": false,
                    "args": null,
                    "isUserCreated": false
                }
            ]
        },
        {
            "name": "admin",
            "version": "1.0.0",
            "methods": [
                {
                    "verb": "GET",
                    "call": "user",
                    "desc": "Get users",
                    "authRequired": true,
                    "args": [
                        {
                            "name": "username",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "id",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "POST",
                    "call": "user",
                    "desc": "Get users",
                    "authRequired": true,
                    "args": [
                        {
                            "name": "username",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "password",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "isRequired": true,
                            "description": null
                        },
                        {
                            "name": "roles",
                            "type": "array",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "type",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "external_id",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "PATCH",
                    "call": "user",
                    "desc": "Get users",
                    "authRequired": true,
                    "args": [
                        {
                            "name": "id",
                            "type": "number",
                            "isRequired": true,
                            "description": null
                        },
                        {
                            "name": "username",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "password",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "external_id",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "roles",
                            "type": "array",
                            "isRequired": false,
                            "description": null
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "DELETE",
                    "call": "user",
                    "desc": "Delete a user",
                    "authRequired": true,
                    "args": [
                        {
                            "name": "id",
                            "type": "number",
                            "isRequired": true,
                            "description": null
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "GET",
                    "call": "userRole",
                    "desc": "Get roles for a user",
                    "authRequired": true,
                    "args": [
                        {
                            "name": "id",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "username",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "POST",
                    "call": "userRole",
                    "desc": "Add a role to a user",
                    "authRequired": true,
                    "args": [
                        {
                            "name": "id",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "username",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "role",
                            "type": "string",
                            "isRequired": true,
                            "description": "Role must match one of the roles defined in ACL (superuser, default-user, admin-user)"
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "DELETE",
                    "call": "userRole",
                    "desc": "Delete a role from a user",
                    "authRequired": true,
                    "args": [
                        {
                            "name": "id",
                            "type": "number",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "username",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "email",
                            "type": "string",
                            "isRequired": false,
                            "description": null
                        },
                        {
                            "name": "role",
                            "type": "string",
                            "isRequired": true,
                            "description": "Role must match one of the roles defined in ACL (superuser, default-user, admin-user)"
                        }
                    ],
                    "isUserCreated": false
                },
                {
                    "verb": "POST",
                    "call": "resetClientSecret",
                    "desc": "Get a new client secret",
                    "authRequired": true,
                    "args": [
                        {
                            "name": "client_id",
                            "type": "string",
                            "isRequired": true,
                            "description": "Client ID of the user"
                        }
                    ],
                    "isUserCreated": false
                }
            ]
        },
        {
            "name": "analytics",
            "version": "1.0.0",
            "methods": [
                {
                    "verb": "POST",
                    "call": "event",
                    "desc": "log an analytics event",
                    "authRequired": true,
                    "args": [
                        {
                            "name": "event_descriptor",
                            "type": "object",
                            "isRequired": true,
                            "description": "An object describing the event to be logged (including timestamp)"
                        }
                    ],
                    "isUserCreated": false
                }
            ]
        }
    ]
}