{
    "definitions": {
        "admin": {
            "$schema": "http://json-schema.org/draft-04/schema",
            "definitions": {
                "created_at": {
                    "description": "when admin was created",
                    "format": "date-time",
                    "type": [
                        "string"
                    ]
                },
                "email": {
                    "description": "unique email of admin",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "id": {
                    "description": "unique identifier of admin",
                    "format": "uuid",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "identity": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/admin/definitions/id"
                        }
                    ]
                },
                "name": {
                    "description": "unique name of admin",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "password": {
                    "description": "the admin's password",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "password_confirmation": {
                    "description": "the admin's password confirmation",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "updated_at": {
                    "description": "when admin was updated",
                    "format": "date-time",
                    "type": [
                        "string"
                    ]
                }
            },
            "description": "A Ticketfy Admin",
            "links": [
                {
                    "description": "Create a new admin.",
                    "href": "/admins",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "POST",
                    "rel": "create",
                    "schema": {
                        "properties": {
                            "email": {
                                "$ref": "#/definitions/admin/definitions/email"
                            },
                            "name": {
                                "$ref": "#/definitions/admin/definitions/name"
                            },
                            "password": {
                                "$ref": "#/definitions/admin/definitions/password"
                            },
                            "password_confirmation": {
                                "$ref": "#/definitions/admin/definitions/password_confirmation"
                            }
                        },
                        "required": [
                            "name",
                            "email",
                            "password",
                            "password_confirmation"
                        ],
                        "type": [
                            "object"
                        ]
                    },
                    "title": "Create"
                },
                {
                    "description": "Delete an existing admin.",
                    "href": "/admins/{(%23%2Fdefinitions%2Fadmin%2Fdefinitions%2Fidentity)}",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "DELETE",
                    "rel": "destroy",
                    "title": "Delete"
                },
                {
                    "description": "Info for existing admin.",
                    "href": "/admins/{(%23%2Fdefinitions%2Fadmin%2Fdefinitions%2Fidentity)}",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "GET",
                    "rel": "self",
                    "title": "Info"
                },
                {
                    "description": "List existing admins.",
                    "href": "/admins",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "GET",
                    "rel": "instances",
                    "title": "List"
                },
                {
                    "description": "Update an existing admin.",
                    "href": "/admins/{(%23%2Fdefinitions%2Fadmin%2Fdefinitions%2Fidentity)}",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "PATCH",
                    "rel": "update",
                    "schema": {
                        "properties": {
                            "email": {
                                "$ref": "#/definitions/admin/definitions/email"
                            },
                            "name": {
                                "$ref": "#/definitions/admin/definitions/name"
                            },
                            "password": {
                                "$ref": "#/definitions/admin/definitions/password"
                            }
                        },
                        "type": [
                            "object"
                        ]
                    },
                    "title": "Update"
                }
            ],
            "properties": {
                "created_at": {
                    "$ref": "#/definitions/admin/definitions/created_at"
                },
                "email": {
                    "$ref": "#/definitions/admin/definitions/email"
                },
                "id": {
                    "$ref": "#/definitions/admin/definitions/id"
                },
                "name": {
                    "$ref": "#/definitions/admin/definitions/name"
                },
                "password": {
                    "$ref": "#/definitions/admin/definitions/password"
                },
                "password_confirmation": {
                    "$ref": "#/definitions/admin/definitions/password_confirmation"
                },
                "updated_at": {
                    "$ref": "#/definitions/admin/definitions/updated_at"
                }
            },
            "stability": "prototype",
            "strictProperties": true,
            "title": "Admin",
            "type": [
                "object"
            ]
        },
        "agent": {
            "$schema": "http://json-schema.org/draft-04/schema",
            "definitions": {
                "created_at": {
                    "description": "when agent was created",
                    "format": "date-time",
                    "type": [
                        "string"
                    ]
                },
                "email": {
                    "description": "unique email of agent",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "id": {
                    "description": "unique identifier of agent",
                    "format": "uuid",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "identity": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/agent/definitions/id"
                        }
                    ]
                },
                "name": {
                    "description": "unique name of agent",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "password": {
                    "description": "the agent's password",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "password_confirmation": {
                    "description": "the agent's password confirmation",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "updated_at": {
                    "description": "when agent was updated",
                    "format": "date-time",
                    "type": [
                        "string"
                    ]
                }
            },
            "description": "A Ticketfy Agent",
            "links": [
                {
                    "description": "Create a new agent.",
                    "href": "/agents",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "POST",
                    "rel": "create",
                    "schema": {
                        "properties": {
                            "email": {
                                "$ref": "#/definitions/agent/definitions/email"
                            },
                            "name": {
                                "$ref": "#/definitions/agent/definitions/name"
                            },
                            "password": {
                                "$ref": "#/definitions/agent/definitions/password"
                            },
                            "password_confirmation": {
                                "$ref": "#/definitions/agent/definitions/password_confirmation"
                            }
                        },
                        "required": [
                            "name",
                            "email",
                            "password",
                            "password_confirmation"
                        ],
                        "type": [
                            "object"
                        ]
                    },
                    "title": "Create"
                },
                {
                    "description": "Delete an existing agent.",
                    "href": "/agents/{(%23%2Fdefinitions%2Fagent%2Fdefinitions%2Fidentity)}",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "DELETE",
                    "rel": "destroy",
                    "title": "Delete"
                },
                {
                    "description": "Info for existing agent.",
                    "href": "/agents/{(%23%2Fdefinitions%2Fagent%2Fdefinitions%2Fidentity)}",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "GET",
                    "rel": "self",
                    "title": "Info"
                },
                {
                    "description": "List existing agents.",
                    "href": "/agents",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "GET",
                    "rel": "instances",
                    "title": "List"
                },
                {
                    "description": "Update an existing agent.",
                    "href": "/agents/{(%23%2Fdefinitions%2Fagent%2Fdefinitions%2Fidentity)}",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "PATCH",
                    "rel": "update",
                    "schema": {
                        "properties": {
                            "email": {
                                "$ref": "#/definitions/agent/definitions/email"
                            },
                            "name": {
                                "$ref": "#/definitions/agent/definitions/name"
                            },
                            "password": {
                                "$ref": "#/definitions/agent/definitions/password"
                            }
                        },
                        "type": [
                            "object"
                        ]
                    },
                    "title": "Update"
                }
            ],
            "properties": {
                "created_at": {
                    "$ref": "#/definitions/agent/definitions/created_at"
                },
                "email": {
                    "$ref": "#/definitions/agent/definitions/email"
                },
                "id": {
                    "$ref": "#/definitions/agent/definitions/id"
                },
                "name": {
                    "$ref": "#/definitions/agent/definitions/name"
                },
                "password": {
                    "$ref": "#/definitions/agent/definitions/password"
                },
                "password_confirmation": {
                    "$ref": "#/definitions/agent/definitions/password_confirmation"
                },
                "updated_at": {
                    "$ref": "#/definitions/agent/definitions/updated_at"
                }
            },
            "stability": "prototype",
            "strictProperties": true,
            "title": "Agent",
            "type": [
                "object"
            ]
        },
        "customer": {
            "$schema": "http://json-schema.org/draft-04/schema",
            "definitions": {
                "created_at": {
                    "description": "when customer was created",
                    "format": "date-time",
                    "type": [
                        "string"
                    ]
                },
                "email": {
                    "description": "unique email of customer",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "id": {
                    "description": "unique identifier of customer",
                    "format": "uuid",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "identity": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/customer/definitions/id"
                        }
                    ]
                },
                "name": {
                    "description": "unique name of customer",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "password": {
                    "description": "the customer's password",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "password_confirmation": {
                    "description": "the customer's password confirmation",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "updated_at": {
                    "description": "when customer was updated",
                    "format": "date-time",
                    "type": [
                        "string"
                    ]
                }
            },
            "description": "A Ticketfy Customer",
            "links": [
                {
                    "description": "Create a new customer.",
                    "href": "/customers",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "POST",
                    "rel": "create",
                    "schema": {
                        "properties": {
                            "email": {
                                "$ref": "#/definitions/customer/definitions/email"
                            },
                            "name": {
                                "$ref": "#/definitions/customer/definitions/name"
                            },
                            "password": {
                                "$ref": "#/definitions/customer/definitions/password"
                            },
                            "password_confirmation": {
                                "$ref": "#/definitions/customer/definitions/password_confirmation"
                            }
                        },
                        "required": [
                            "name",
                            "email",
                            "password",
                            "password_confirmation"
                        ],
                        "type": [
                            "object"
                        ]
                    },
                    "title": "Create"
                },
                {
                    "description": "Delete an existing customer.",
                    "href": "/customers/{(%23%2Fdefinitions%2Fcustomer%2Fdefinitions%2Fidentity)}",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "DELETE",
                    "rel": "destroy",
                    "title": "Delete"
                },
                {
                    "description": "Info for existing customer.",
                    "href": "/customers/{(%23%2Fdefinitions%2Fcustomer%2Fdefinitions%2Fidentity)}",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "GET",
                    "rel": "self",
                    "title": "Info"
                },
                {
                    "description": "List existing customers.",
                    "href": "/customers",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "GET",
                    "rel": "instances",
                    "title": "List"
                },
                {
                    "description": "Update an existing customer.",
                    "href": "/customers/{(%23%2Fdefinitions%2Fcustomer%2Fdefinitions%2Fidentity)}",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "PATCH",
                    "rel": "update",
                    "schema": {
                        "properties": {
                            "email": {
                                "$ref": "#/definitions/customer/definitions/email"
                            },
                            "name": {
                                "$ref": "#/definitions/customer/definitions/name"
                            },
                            "password": {
                                "$ref": "#/definitions/customer/definitions/password"
                            }
                        },
                        "type": [
                            "object"
                        ]
                    },
                    "title": "Update"
                }
            ],
            "properties": {
                "created_at": {
                    "$ref": "#/definitions/customer/definitions/created_at"
                },
                "email": {
                    "$ref": "#/definitions/customer/definitions/email"
                },
                "id": {
                    "$ref": "#/definitions/customer/definitions/id"
                },
                "name": {
                    "$ref": "#/definitions/customer/definitions/name"
                },
                "password": {
                    "$ref": "#/definitions/customer/definitions/password"
                },
                "password_confirmation": {
                    "$ref": "#/definitions/customer/definitions/password_confirmation"
                },
                "updated_at": {
                    "$ref": "#/definitions/customer/definitions/updated_at"
                }
            },
            "stability": "prototype",
            "strictProperties": true,
            "title": "Customer",
            "type": [
                "object"
            ]
        },
        "ticket": {
            "$schema": "http://json-schema.org/draft-04/schema",
            "definitions": {
                "agent_id": {
                    "description": "ticket agent' id",
                    "type": [
                        "string"
                    ]
                },
                "created_at": {
                    "description": "when ticket was created",
                    "format": "date-time",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "customer_id": {
                    "description": "ticket customers' id",
                    "type": [
                        "string"
                    ]
                },
                "description": {
                    "description": "ticket's description",
                    "type": [
                        "string"
                    ]
                },
                "id": {
                    "description": "unique identifier of ticket",
                    "format": "uuid",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                },
                "identity": {
                    "$ref": "#/definitions/ticket/definitions/id"
                },
                "status": {
                    "description": "ticket's status",
                    "type": [
                        "string"
                    ]
                },
                "updated_at": {
                    "description": "when ticket was updated",
                    "format": "date-time",
                    "readOnly": true,
                    "type": [
                        "string"
                    ]
                }
            },
            "description": "A Ticketfy Ticket",
            "links": [
                {
                    "description": "Create a new ticket.",
                    "href": "/tickets",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "POST",
                    "rel": "create",
                    "schema": {
                        "properties": {
                            "customer_id": {
                                "$ref": "#/definitions/ticket/definitions/customer_id"
                            },
                            "description": {
                                "$ref": "#/definitions/ticket/definitions/description"
                            },
                            "status": {
                                "$ref": "#/definitions/ticket/definitions/status"
                            }
                        },
                        "required": [
                            "description",
                            "status",
                            "customer_id"
                        ],
                        "type": [
                            "object"
                        ]
                    },
                    "title": "Create"
                },
                {
                    "description": "Delete an existing ticket.",
                    "href": "/tickets/{(%23%2Fdefinitions%2Fticket%2Fdefinitions%2Fidentity)}",
                    "method": "DELETE",
                    "rel": "destroy",
                    "title": "Delete"
                },
                {
                    "description": "Info for existing ticket.",
                    "href": "/tickets/{(%23%2Fdefinitions%2Fticket%2Fdefinitions%2Fidentity)}",
                    "method": "GET",
                    "rel": "self",
                    "title": "Info"
                },
                {
                    "description": "List existing tickets.",
                    "href": "/tickets",
                    "method": "GET",
                    "rel": "instances",
                    "title": "List"
                },
                {
                    "description": "Update an existing ticket.",
                    "href": "/tickets/{(%23%2Fdefinitions%2Fticket%2Fdefinitions%2Fidentity)}",
                    "http_header": {
                        "access-token": "the user's access-token",
                        "client": "the user client's identifier",
                        "uid": "the user's identifier"
                    },
                    "method": "PATCH",
                    "rel": "update",
                    "schema": {
                        "properties": {
                            "customer_id": {
                                "$ref": "#/definitions/ticket/definitions/customer_id"
                            },
                            "description": {
                                "$ref": "#/definitions/ticket/definitions/description"
                            },
                            "status": {
                                "$ref": "#/definitions/ticket/definitions/status"
                            }
                        },
                        "required": [
                            "description",
                            "status",
                            "customer_id"
                        ],
                        "type": [
                            "object"
                        ]
                    },
                    "title": "Update"
                }
            ],
            "properties": {
                "agent_id": {
                    "$ref": "#/definitions/ticket/definitions/agent_id"
                },
                "created_at": {
                    "$ref": "#/definitions/ticket/definitions/created_at"
                },
                "customer_id": {
                    "$ref": "#/definitions/ticket/definitions/customer_id"
                },
                "description": {
                    "$ref": "#/definitions/ticket/definitions/description"
                },
                "id": {
                    "$ref": "#/definitions/ticket/definitions/id"
                },
                "status": {
                    "$ref": "#/definitions/ticket/definitions/status"
                },
                "updated_at": {
                    "$ref": "#/definitions/ticket/definitions/updated_at"
                }
            },
            "stability": "prototype",
            "strictProperties": true,
            "title": "Ticket",
            "type": [
                "object"
            ]
        }
    },
    "description": "A Customer Support Ticket System Rails API",
    "links": [
        {
            "href": "ticketfy-api.herokuapp.com/api/v1",
            "rel": "self"
        }
    ],
    "properties": {
        "admin": {
            "$ref": "#/definitions/admin"
        },
        "agent": {
            "$ref": "#/definitions/agent"
        },
        "customer": {
            "$ref": "#/definitions/customer"
        },
        "ticket": {
            "$ref": "#/definitions/ticket"
        }
    },
    "title": "Ticketfy",
    "type": [
        "object"
    ]
}