{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "endpoints/tokens",
  "title": "Token",
  "description": "Tokens are required to authenticate against the API",
  "stability": "stable",
  "type": "object",
  "definitions": {
    "identity": {
      "description": "Email Address or other 3rd party providers identifier",
      "example": "john@example.com",
      "type": "string"
    },
    "secret": {
      "description": "A password or key",
      "example": "correct horse battery staple",
      "type": "string"
    },
    "token": {
      "description": "JWT",
      "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.O_frfYM8RzmRsUNigHtu0_jZ_utSejyr1axMGa8rlsk",
      "type": "string"
    },
    "expires": {
      "description": "Token expiry time",
      "format": "date-time",
      "type": "string"
    },
    "scope": {
      "description": "Scope of the Token, defaults to 'user'",
      "example": "user",
      "type": "string"
    }
  },
  "links": [
    {
      "title": "Create",
      "description": "Creates a new token.",
      "href": "/tokens",
      "access": "public",
      "method": "POST",
      "rel": "create",
      "schema": {
        "type": "object",
        "required": [
          "identity",
          "secret"
        ],
        "properties": {
          "identity": {
            "$ref": "#/definitions/identity"
          },
          "secret": {
            "$ref": "#/definitions/secret"
          },
          "scope": {
            "$ref": "#/definitions/scope"
          }
        }
      },
      "targetSchema": {
        "type": "object",
        "properties": {
          "token": {
            "$ref": "#/definitions/token"
          },
          "expires": {
            "$ref": "#/definitions/expires"
          }
        }
      }
    },
    {
      "title": "Refresh",
      "description": "Returns a new token.",
      "href": "/tokens",
      "access": "private",
      "method": "GET",
      "rel": "self",
      "http_header": {
        "$ref": "../examples.json#/definitions/auth_header"
      },
      "schema": {},
      "targetSchema": {
        "type": "object",
        "properties": {
          "token": {
            "$ref": "#/definitions/token"
          },
          "expires": {
            "$ref": "#/definitions/expires"
          },
          "scope": {
            "$ref": "#/definitions/scope"
          }
        }
      }
    }
  ]
}
