{
  "openapi": "3.1.0",
  "info": {
    "title": "Spectre API",
    "description": "Public API for the Spectre products",
    "version": "1.0",
    "contact": {
      "name": "Spectre API Development Team",
      "url": "https://spectre.uk.com",
      "email": "apis@spectre.uk.com"
    }
  },
  "servers": [
    {
      "url": "https://api.spectre.uk.com/v1",
      "description": "production"
    }
  ],
  "paths": {
    "/property-reports/user": {
      "get": {
        "summary": "Get current user",
        "tags": [
          "Property Reports"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/User"
                    },
                    "included": {
                      "type": "array",
                      "items": {
                        "anyOf": [
                          {
                            "$ref": "#/components/schemas/IncludedAccount"
                          },
                          {
                            "$ref": "#/components/schemas/IncludedCompany"
                          },
                          {
                            "$ref": "#/components/schemas/IncludedReportTemplate"
                          }
                        ]
                      }
                    }
                  }
                },
                "examples": {
                  "Get current user response": {
                    "value": {
                      "data": {
                        "id": "uuid",
                        "type": "user",
                        "attributes": {
                          "email": "string"
                        },
                        "relationships": {
                          "accounts": {
                            "data": [
                              {
                                "type": "account",
                                "id": "uuid"
                              }
                            ]
                          },
                          "company": {
                            "data": {
                              "type": "company",
                              "id": "uuid"
                            }
                          }
                        },
                        "included": [
                          {
                            "id": "uuid",
                            "type": "account",
                            "attributes": {
                              "name": "string"
                            }
                          },
                          {
                            "id": "uuid",
                            "type": "company",
                            "attributes": {
                              "name": "string"
                            },
                            "relationships": {
                              "data": [
                                {
                                  "type": "reportTemplate",
                                  "id": "uuid"
                                }
                              ]
                            }
                          },
                          {
                            "id": "uuid",
                            "type": "reportTemplate",
                            "attributes": {
                              "name": "string"
                            }
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "406": {
            "$ref": "#/components/responses/406"
          },
          "415": {
            "$ref": "#/components/responses/415"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "operationId": "get-property-reports-user",
        "description": "This endpoint retrieves the current user.",
        "parameters": [
          {
            "schema": {
              "type": "array",
              "uniqueItems": true,
              "minItems": 1,
              "items": {
                "type": "string",
                "enum": [
                  "accounts",
                  "company",
                  "company.reportTemplates"
                ]
              }
            },
            "in": "query",
            "name": "include",
            "description": "Optional related entities to include in the results",
            "explode": false,
            "style": "form"
          }
        ]
      },
      "parameters": []
    },
    "/property-reports/reports": {
      "get": {
        "summary": "Get all reports",
        "tags": [
          "Property Reports"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Report"
                      }
                    },
                    "included": {
                      "type": "array",
                      "items": {
                        "anyOf": [
                          {
                            "$ref": "#/components/schemas/IncludedMedia"
                          }
                        ]
                      }
                    }
                  }
                },
                "examples": {
                  "Get all reports response": {
                    "value": {
                      "data": [
                        {
                          "id": "uuid",
                          "type": "report",
                          "attributes": {
                            "title": "string",
                            "description": "string",
                            "state": "string",
                            "reportUrl": "url",
                            "imageUrl": "url",
                            "imageSource": "string"
                          },
                          "relationships": {
                            "pdf": {
                              "data": [
                                {
                                  "type": "medium",
                                  "id": "uuid"
                                }
                              ]
                            }
                          }
                        }
                      ],
                      "included": [
                        {
                          "id": "uuid",
                          "type": "medium",
                          "attributes": {
                            "id": "uuid",
                            "url": "url"
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "406": {
            "$ref": "#/components/responses/406"
          },
          "415": {
            "$ref": "#/components/responses/415"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "operationId": "get-property-reports-reports",
        "parameters": [
          {
            "schema": {
              "type": "array",
              "uniqueItems": true,
              "minItems": 1,
              "items": {
                "type": "string",
                "enum": [
                  "pdf"
                ]
              }
            },
            "in": "query",
            "name": "include",
            "description": "Optional related entities to include in the results",
            "explode": false,
            "style": "form"
          }
        ],
        "description": "This endpoint retrieves all the reports the current user."
      },
      "post": {
        "summary": "Create a new report",
        "tags": [
          "Property Reports"
        ],
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Report"
                      }
                    },
                    "included": {
                      "type": "array",
                      "items": {
                        "anyOf": [
                          {
                            "$ref": "#/components/schemas/IncludedMedia"
                          }
                        ]
                      }
                    }
                  }
                },
                "examples": {
                  "Create a report response": {
                    "value": {
                      "data": {
                        "id": "uuid",
                        "type": "report",
                        "attributes": {
                          "title": "string",
                          "description": "string",
                          "state": "string",
                          "reportUrl": "url",
                          "imageUrl": "url",
                          "imageSource": "string"
                        },
                        "relationships": {
                          "pdf": {
                            "data": [
                              {
                                "type": "medium",
                                "id": "uuid"
                              }
                            ]
                          }
                        }
                      },
                      "included": [
                        {
                          "id": "uuid",
                          "type": "medium",
                          "attributes": {
                            "id": "uuid",
                            "url": "url"
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "406": {
            "$ref": "#/components/responses/406"
          },
          "415": {
            "$ref": "#/components/responses/415"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "operationId": "post-property-reports-reports",
        "parameters": [
          {
            "schema": {
              "type": "array",
              "uniqueItems": true,
              "minItems": 1,
              "items": {
                "type": "string",
                "enum": [
                  "pdf"
                ]
              }
            },
            "in": "query",
            "name": "include",
            "description": "Optional related entities to include in the results",
            "explode": false,
            "style": "form"
          }
        ],
        "requestBody": {
          "content": {
            "application/vnd.api+json": {
              "schema": {
                "allOf": [
                  {
                    "type": "object",
                    "properties": {
                      "account_id": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "report_template_id": {
                        "type": "string",
                        "format": "uuid"
                      }
                    },
                    "anyOf": [
                      {
                        "$ref": "#/components/schemas/PropertyAddress"
                      },
                      {
                        "$ref": "#/components/schemas/PropertyBarcode"
                      }
                    ]
                  }
                ]
              }
            }
          }
        }
      }
    },
    "/property-reports/reports/{reportId}": {
      "get": {
        "summary": "Get a single report",
        "tags": [
          "Property Reports"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Report"
                    },
                    "included": {
                      "type": "array",
                      "items": {
                        "anyOf": [
                          {
                            "$ref": "#/components/schemas/IncludedMedia"
                          }
                        ]
                      }
                    }
                  }
                },
                "examples": {
                  "Get single report response": {
                    "value": {
                      "data": {
                        "id": "uuid",
                        "type": "report",
                        "attributes": {
                          "title": "string",
                          "description": "string",
                          "state": "string",
                          "reportUrl": "url",
                          "imageUrl": "url",
                          "imageSource": "string"
                        },
                        "relationships": {
                          "pdf": {
                            "data": [
                              {
                                "type": "medium",
                                "id": "uuid"
                              }
                            ]
                          }
                        }
                      },
                      "included": [
                        {
                          "id": "uuid",
                          "type": "medium",
                          "attributes": {
                            "id": "uuid",
                            "url": "url"
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "406": {
            "$ref": "#/components/responses/406"
          },
          "415": {
            "$ref": "#/components/responses/415"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "operationId": "get-property-reports-report",
        "parameters": [
          {
            "schema": {
              "type": "array",
              "uniqueItems": true,
              "minItems": 1,
              "items": {
                "type": "string",
                "enum": [
                  "pdf"
                ]
              }
            },
            "in": "query",
            "name": "include",
            "description": "Optional related entities to include in the results",
            "explode": false,
            "style": "form"
          }
        ],
        "description": "This endpoint retrieves a single report by UUID for the current user."
      }
    },
    "/property-reports/leads": {
      "get": {
        "summary": "Get all leads",
        "tags": [
          "Property Reports"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Lead"
                      }
                    }
                  }
                },
                "examples": {
                  "Get all leads response": {
                    "value": {
                      "data": [
                        {
                          "id": "uuid",
                          "type": "lead",
                          "attributes": {
                            "contactName": "string",
                            "contactEmail": "email",
                            "contactNumber": "phone",
                            "contactAddress": "string",
                            "preferredValuationDate": "date",
                            "emailConsent": "boolean",
                            "closedAt": "date"
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "406": {
            "$ref": "#/components/responses/406"
          },
          "415": {
            "$ref": "#/components/responses/415"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "operationId": "get-property-reports-leads",
        "description": "This endpoint retrieves all the leads the current user."
      },
      "post": {
        "summary": "Create a new lead",
        "tags": [
          "Property Reports"
        ],
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Lead"
                      }
                    }
                  }
                },
                "examples": {
                  "Create a lead response": {
                    "value": {
                      "data": {
                        "id": "uuid",
                        "type": "report",
                        "attributes": {
                          "contactName": "string",
                          "contactEmail": "string",
                          "contactNumber": "string",
                          "contactAddress": "string",
                          "preferredValuationDate": "string",
                          "emailConsent": "string",
                          "closedAt": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "406": {
            "$ref": "#/components/responses/406"
          },
          "415": {
            "$ref": "#/components/responses/415"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "operationId": "post-property-reports-leads",
        "requestBody": {
          "content": {
            "application/vnd.api+json": {
              "schema": {
                "allOf": [
                  {
                    "required": [
                      "email"
                    ],
                    "properties": {
                      "account_id": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "report_id": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "first_name": {
                        "type": "string"
                      },
                      "last_name": {
                        "type": "string"
                      },
                      "email": {
                        "type": "string",
                        "format": "email"
                      },
                      "contact_number": {
                        "type": "string"
                      },
                      "has_marketing_consent": {
                        "type": "boolean"
                      }
                    }
                  }
                ],
                "type": "object"
              }
            }
          }
        }
      }
    },
    "/email/contacts": {
      "post": {
        "summary": "Create a new contact",
        "operationId": "post-email-contacts",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Contact"
                    }
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Email"
        ],
        "description": "This endpoint creates a new contact.",
        "requestBody": {
          "content": {
            "application/vnd.api+json": {
              "schema": {
                "allOf": [
                  {
                    "required": [
                      "email"
                    ],
                    "properties": {
                      "title": {
                        "type": "string",
                        "maxLength": 255
                      },
                      "first_name": {
                        "type": "string",
                        "maxLength": 255
                      },
                      "last_name": {
                        "type": "string",
                        "maxLength": 255
                      },
                      "email": {
                        "type": "string",
                        "format": "email",
                        "maxLength": 255
                      },
                      "phone": {
                        "type": "string",
                        "maxLength": 255
                      },
                      "subscription_status": {
                        "$ref": "#/components/schemas/SubsciptionStatus"
                      },
                      "segment_id": {
                        "type": "string",
                        "format": "uuid",
                        "description": "Optional ID of a segment with type 'uploaded' to send contacts to."
                      }
                    }
                  }
                ],
                "type": "object"
              }
            }
          },
          "description": ""
        }
      }
    },
    "/email/segments": {
      "get": {
        "summary": "Get all segments",
        "operationId": "get-email-segments",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Segment"
                    }
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Email"
        ],
        "description": "This endpoint gets all segments.",
        "requestBody": {
          "content": {},
          "description": ""
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/segment_type"
          }
        ]
      },
      "post": {
        "summary": "Create a new uploaded segment",
        "operationId": "post-email-segments",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": false,
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Segment"
                    }
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/vnd.api+json": {
              "schema": {
                "allOf": [
                  {
                    "properties": {
                      "name": {
                        "type": "string",
                        "maxLength": 255
                      },
                      "description": {
                        "type": "string",
                        "maxLength": 255
                      }
                    },
                    "required": [
                      "name"
                    ]
                  }
                ],
                "type": "object"
              }
            }
          },
          "description": ""
        },
        "tags": [
          "Email"
        ],
        "description": "This endpoint creates a new uploaded segment."
      }
    }
  },
  "components": {
    "schemas": {
      "User": {
        "title": "User",
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseModel"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "default": "user"
              },
              "attributes": {
                "$ref": "#/components/schemas/UserAttributes"
              },
              "relationships": {
                "type": "object",
                "properties": {
                  "accounts": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/RelationshipPlural"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "data": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "type": {
                                  "type": "string",
                                  "enum": [
                                    "account"
                                  ]
                                }
                              }
                            }
                          }
                        }
                      }
                    ]
                  },
                  "company": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/RelationshipSingular"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "data": {
                            "type": "object",
                            "properties": {
                              "type": {
                                "type": "string",
                                "default": "company"
                              }
                            }
                          }
                        }
                      }
                    ]
                  }
                }
              }
            }
          }
        ]
      },
      "UserAttributes": {
        "title": "User (attributes)",
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          }
        },
        "x-tags": [
          "Users"
        ],
        "description": ""
      },
      "RelationshipPlural": {
        "title": "Relationship Plural",
        "x-tags": [
          "JSON:API Structures"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "id": {
                  "type": "string",
                  "example": "a827a3ae-4c74-4c32-8b42-42248d4010d3"
                }
              }
            }
          }
        },
        "description": "This is a inheritable schema to allow you to easily add relationships to your main schemas. This should be used for `1:n` relationships."
      },
      "RelationshipSingular": {
        "title": "Relationship Singular",
        "x-tags": [
          "JSON:API Structures"
        ],
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string"
              },
              "id": {
                "type": "string",
                "example": "a827a3ae-4c74-4c32-8b42-42248d4010d3"
              }
            }
          }
        },
        "description": "This is a inheritable schema to allow you to easily add relationships to your main schemas. This should be used for `1:1` relationships."
      },
      "BaseModel": {
        "title": "Base Model",
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "attributes": {
            "type": "object"
          }
        },
        "required": [
          "type",
          "id",
          "attributes"
        ],
        "description": "This is a base schema that can be inherited by your main schemas to prevent duplicating boilerplate. You should use this for 'models' such as `User` or `Profile`",
        "x-tags": [
          "JSON:API Structures"
        ]
      },
      "BaseError": {
        "discriminator": {
          "propertyName": "errorType",
          "mapping": {
            "401": "#/components/responses/401",
            "403": "#/components/responses/403",
            "404": "#/components/responses/404",
            "406": "#/components/responses/406",
            "415": "#/components/responses/415",
            "500": "#/components/responses/500"
          }
        },
        "title": "Basic Error",
        "type": "object",
        "x-tags": [
          "Errors",
          "JSON:API Structures"
        ],
        "properties": {
          "title": {
            "type": "string"
          },
          "code": {
            "type": "string"
          }
        },
        "required": [
          "title",
          "code"
        ],
        "description": "This is a inheritable schema to allow you to easily extend when you need add new error responses."
      },
      "IncludedLinks": {
        "title": "Included Links",
        "type": "object",
        "properties": {
          "self": {
            "$ref": "#/components/schemas/Link"
          },
          "related": {
            "$ref": "#/components/schemas/Link"
          }
        },
        "examples": [],
        "x-tags": [
          "JSON:API Structures"
        ]
      },
      "Links": {
        "title": "Links",
        "type": "object",
        "description": "Links object - JSON:API Standard",
        "x-examples": {
          "example-1": {
            "self": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=2",
            "first": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=1",
            "prev": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=1",
            "next": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=3",
            "last": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=9"
          }
        },
        "x-tags": [
          "JSON:API Structures"
        ],
        "examples": [
          {
            "self": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=2",
            "first": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=1",
            "next": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=1",
            "prev": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=3",
            "last": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=9"
          }
        ],
        "properties": {
          "self": {
            "type": "string",
            "example": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=2"
          },
          "first": {
            "type": "string",
            "example": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=1"
          },
          "next": {
            "type": "string",
            "example": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=1"
          },
          "prev": {
            "type": "string",
            "example": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=3"
          },
          "last": {
            "type": "string",
            "example": "http://localhost:3000/users?page[number]=2&page[size]=25&page[number]=9"
          }
        }
      },
      "Link": {
        "title": "Link",
        "oneOf": [
          {
            "description": "a string containing the link's URL",
            "type": "string",
            "format": "uri-reference"
          },
          {
            "type": "object",
            "required": [
              "href"
            ],
            "properties": {
              "href": {
                "description": "a string containing the link's URL",
                "type": "string",
                "format": "uri-reference"
              },
              "meta": {
                "$ref": "#/components/schemas/Meta"
              }
            }
          }
        ],
        "x-tags": [
          "JSON:API Structures"
        ]
      },
      "JsonApi": {
        "title": "API Details",
        "description": "The server's implementation",
        "type": "object",
        "properties": {
          "version": {
            "type": "string"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "additionalProperties": false,
        "x-tags": [
          "JSON:API Structures"
        ]
      },
      "Meta": {
        "title": "Meta Information",
        "description": "The server's implementation",
        "type": "object",
        "additionalProperties": true,
        "x-tags": [
          "JSON:API Structures"
        ]
      },
      "Pagination": {
        "title": "Pagination",
        "type": "object",
        "description": "Pagination object - JSON:API Standard",
        "x-tags": [
          "JSON:API Structures"
        ],
        "properties": {
          "pagination": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "example": 226
              },
              "count": {
                "type": "integer",
                "example": 10
              },
              "per_page": {
                "type": "integer",
                "example": 10
              },
              "current_page": {
                "type": "integer",
                "example": 1
              },
              "total_pages": {
                "type": "integer",
                "example": 23
              }
            }
          }
        },
        "x-examples": {
          "example-1": {
            "pagination": {
              "total": 226,
              "count": 10,
              "per_page": 10,
              "current_page": 1,
              "total_pages": 23
            }
          }
        },
        "examples": [
          {
            "pagination": {
              "total": 226,
              "count": 10,
              "per_page": 10,
              "current_page": 1,
              "total_pages": 23
            }
          }
        ]
      },
      "IncludedResource": {
        "title": "Included Resource",
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "type": {
            "type": "string"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "attributes": {
            "type": "object"
          },
          "relationships": {
            "type": "object"
          },
          "links": {
            "$ref": "#/components/schemas/IncludedLinks"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "type",
          "id"
        ],
        "examples": [],
        "x-tags": [
          "JSON:API Structures"
        ]
      },
      "IncludedUser": {
        "allOf": [
          {
            "$ref": "#/components/schemas/IncludedResource"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "user"
                ]
              },
              "attributes": {
                "$ref": "#/components/schemas/UserAttributes"
              }
            }
          }
        ],
        "title": "User (included)",
        "x-tags": [
          "Users"
        ]
      },
      "Account": {
        "title": "Account",
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseModel"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "default": "account"
              },
              "attributes": {
                "$ref": "#/components/schemas/AccountAttributes"
              }
            }
          }
        ],
        "x-tags": [
          "Accounts"
        ]
      },
      "AccountAttributes": {
        "title": "Account (attributes)",
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "x-tags": [
          "Accounts"
        ]
      },
      "IncludedAccount": {
        "allOf": [
          {
            "$ref": "#/components/schemas/IncludedResource"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "account"
                ]
              },
              "attributes": {
                "$ref": "#/components/schemas/AccountAttributes"
              }
            }
          }
        ],
        "title": "Account (included)",
        "x-tags": [
          "Accounts"
        ]
      },
      "Company": {
        "title": "Company",
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseModel"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "default": "account"
              },
              "attributes": {
                "$ref": "#/components/schemas/CompanyAttributes"
              },
              "relationships": {
                "type": "object",
                "properties": {
                  "reportTemplates": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/RelationshipPlural"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "data": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "type": {
                                  "type": "string",
                                  "enum": [
                                    "reportTemplate"
                                  ]
                                }
                              }
                            }
                          }
                        }
                      }
                    ]
                  }
                }
              }
            }
          }
        ],
        "x-tags": [
          "Companies"
        ]
      },
      "CompanyAttributes": {
        "title": "Company (attributes)",
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "x-tags": [
          "Companies"
        ]
      },
      "IncludedCompany": {
        "allOf": [
          {
            "$ref": "#/components/schemas/IncludedResource"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "company"
                ]
              },
              "attributes": {
                "$ref": "#/components/schemas/CompanyAttributes"
              },
              "relationships": {
                "type": "object",
                "properties": {
                  "reportTemplates": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/RelationshipPlural"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "data": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "type": {
                                  "type": "string",
                                  "enum": [
                                    "reportTemplate"
                                  ]
                                }
                              }
                            }
                          }
                        }
                      }
                    ]
                  }
                }
              }
            }
          }
        ],
        "title": "Company (included)",
        "x-tags": [
          "Companies"
        ]
      },
      "ReportTemplate": {
        "title": "Report Templates",
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseModel"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "default": "reportTemplates"
              },
              "attributes": {
                "$ref": "#/components/schemas/ReportTemplateAttributes"
              }
            }
          }
        ],
        "x-tags": [
          "Report Templates"
        ]
      },
      "ReportTemplateAttributes": {
        "title": "Report Template (attributes)",
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "x-tags": [
          "Report Templates"
        ]
      },
      "IncludedReportTemplate": {
        "allOf": [
          {
            "$ref": "#/components/schemas/IncludedResource"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "reportTemplate"
                ]
              },
              "attributes": {
                "$ref": "#/components/schemas/ReportTemplateAttributes"
              }
            }
          }
        ],
        "title": "Report Templates (included)",
        "x-tags": [
          "Report Templates"
        ]
      },
      "Report": {
        "title": "Report",
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseModel"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "default": "report"
              },
              "attributes": {
                "$ref": "#/components/schemas/ReportAttributes"
              }
            }
          }
        ],
        "x-tags": [
          "Reports"
        ]
      },
      "ReportAttributes": {
        "title": "Report (attributes)",
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "state": {
            "type": "string"
          },
          "reportUrl": {
            "type": "string"
          },
          "imageUrl": {
            "type": "string"
          },
          "imageSource": {
            "type": "string"
          }
        },
        "x-tags": [
          "Reports"
        ]
      },
      "IncludedMedia": {
        "allOf": [
          {
            "$ref": "#/components/schemas/IncludedResource"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "media"
                ]
              },
              "attributes": {
                "$ref": "#/components/schemas/MediaAttributes"
              }
            }
          }
        ],
        "title": "Media (Included)",
        "x-tags": [
          "Media"
        ]
      },
      "MediaAttributes": {
        "title": "Media (attributes)",
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "x-tags": [
          "Media"
        ]
      },
      "Lead": {
        "title": "Lead",
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseModel"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "default": "lead"
              },
              "attributes": {
                "$ref": "#/components/schemas/LeadAttributes"
              }
            }
          }
        ],
        "x-tags": [
          "Leads"
        ]
      },
      "LeadAttributes": {
        "title": "Lead (attributes)",
        "type": "object",
        "x-tags": [
          "Leads"
        ],
        "properties": {
          "contactName": {
            "type": "string"
          },
          "contactEmail": {
            "type": "string"
          },
          "contactNumber": {
            "type": "string"
          },
          "contactAddress": {
            "type": "string"
          },
          "preferredValuationDate": {
            "type": "string",
            "format": "date-time"
          },
          "emailConsent": {
            "type": "boolean"
          },
          "closedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "PropertyAddress": {
        "title": "PropertyAddress",
        "type": "object",
        "properties": {
          "property_address": {
            "type": "string"
          },
          "property_postcode": {
            "type": "string"
          }
        },
        "x-tags": [
          "Reports"
        ],
        "description": ""
      },
      "PropertyBarcode": {
        "title": "PropertyBarcode",
        "type": "object",
        "x-tags": [
          "Reports"
        ],
        "properties": {
          "property_barcode": {
            "type": "string"
          }
        }
      },
      "Contact": {
        "title": "Contact",
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseModel"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "default": "contact"
              },
              "attributes": {
                "$ref": "#/components/schemas/ContactAttributes"
              }
            }
          }
        ]
      },
      "ContactAttributes": {
        "title": "ContactAttributes",
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          },
          "email": {
            "type": "string"
          }
        },
        "examples": []
      },
      "SubsciptionStatus": {
        "title": "SubsciptionStatus",
        "type": "string",
        "enum": [
          "subscribed",
          "unsubscribed",
          "non_subscribed"
        ]
      },
      "Segment": {
        "title": "Segment",
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseModel"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "default": "segment"
              },
              "attributes": {
                "$ref": "#/components/schemas/SegmentAttributes"
              }
            }
          }
        ]
      },
      "SegmentAttributes": {
        "title": "SegmentAttributes",
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "SegmentType": {
        "title": "SegmentType",
        "type": "string",
        "enum": [
          "static",
          "dynamic",
          "uploaded"
        ]
      }
    },
    "parameters": {
      "include": {
        "name": "include",
        "description": "Optional related entities to include in the results.",
        "in": "query",
        "required": false,
        "schema": {
          "type": "array",
          "uniqueItems": true,
          "minItems": 1,
          "maxItems": 5,
          "items": {
            "type": "string",
            "enum": [
              "salesApplicants",
              "lettingsApplicants",
              "vendors",
              "landlords",
              "tenants"
            ]
          }
        },
        "style": "form"
      },
      "page_size": {
        "name": "page[size]",
        "description": "Set the number of results per page",
        "in": "query",
        "required": false,
        "schema": {
          "type": "number",
          "minimum": 1,
          "maximum": 250,
          "example": 25
        }
      },
      "page_number": {
        "name": "page[number]",
        "description": "Set the page number",
        "in": "query",
        "required": false,
        "schema": {
          "type": "number",
          "minimum": 1,
          "example": 3
        }
      },
      "segment_type": {
        "name": "filter[type]",
        "in": "query",
        "required": false,
        "schema": {
          "$ref": "#/components/schemas/SegmentType"
        }
      }
    },
    "responses": {
      "400": {
        "description": "The HTTP 400 Bad Request response status code indicates that the server cannot or will not process the request due to something that is perceived to be a client error.",
        "content": {
          "application/vnd.api+json": {
            "schema": {
              "type": "object",
              "properties": {
                "errors": {
                  "type": "array",
                  "items": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/BaseError"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "code": {
                            "type": "string",
                            "const": "400"
                          },
                          "title": {
                            "type": "string",
                            "default": "Bad Request"
                          }
                        }
                      }
                    ]
                  }
                }
              }
            },
            "examples": {
              "Example 400 Response": {
                "value": {
                  "errors": [
                    {
                      "title": "Bad Request",
                      "code": "400"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "401": {
        "description": "The HTTP 401 Unauthorized response status code indicates that the client request has not been completed because it lacks valid authentication credentials for the requested resource.",
        "content": {
          "application/vnd.api+json": {
            "schema": {
              "type": "object",
              "properties": {
                "errors": {
                  "type": "array",
                  "items": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/BaseError"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "code": {
                            "type": "string",
                            "default": "401"
                          },
                          "title": {
                            "type": "string",
                            "default": "Unauthorized"
                          }
                        }
                      }
                    ]
                  }
                }
              }
            },
            "examples": {
              "Example 401 Response": {
                "value": {
                  "errors": [
                    {
                      "title": "Unauthorized",
                      "code": "401"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "403": {
        "description": "The HTTP 403 Forbidden response status code indicates that the server understands the request but refuses to authorize it.",
        "content": {
          "application/vnd.api+json": {
            "schema": {
              "type": "object",
              "properties": {
                "errors": {
                  "type": "array",
                  "items": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/BaseError"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "code": {
                            "type": "string",
                            "default": "403"
                          },
                          "title": {
                            "type": "string",
                            "default": "Forbidden"
                          }
                        }
                      }
                    ]
                  }
                }
              }
            },
            "examples": {
              "Example 403 Response": {
                "value": {
                  "errors": [
                    {
                      "title": "Forbidden",
                      "code": "403"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "404": {
        "description": "The HTTP 404 Not Found response status code indicates that the server cannot find the requested resource.",
        "content": {
          "application/vnd.api+json": {
            "schema": {
              "type": "object",
              "properties": {
                "errors": {
                  "type": "array",
                  "items": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/BaseError"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "code": {
                            "default": "404",
                            "type": "string"
                          },
                          "title": {
                            "type": "string",
                            "default": "Not Found"
                          }
                        }
                      }
                    ]
                  }
                }
              }
            },
            "examples": {
              "Example 404 Response": {
                "value": {
                  "errors": [
                    {
                      "title": "Not Found",
                      "code": "404"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "406": {
        "description": "The HTTP 406 Not Acceptable client error response code indicates that the server cannot produce a response matching the list of acceptable values defined in the request's proactive content negotiation headers, and that the server is unwilling to supply a default representation. ",
        "content": {
          "application/vnd.api+json": {
            "schema": {
              "type": "object",
              "properties": {
                "errors": {
                  "type": "array",
                  "items": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/BaseError"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "code": {
                            "type": "string",
                            "default": "406"
                          },
                          "title": {
                            "type": "string",
                            "default": "Not Acceptable"
                          }
                        }
                      }
                    ]
                  }
                }
              }
            },
            "examples": {
              "Example 406 Response": {
                "value": {
                  "errors": [
                    {
                      "title": "Not Acceptable",
                      "code": "406"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "415": {
        "description": "The HTTP 415 Unsupported Media Type client error response code indicates that the server refuses to accept the request because the payload format is in an unsupported format.",
        "content": {
          "application/vnd.api+json": {
            "schema": {
              "type": "object",
              "properties": {
                "errors": {
                  "type": "array",
                  "items": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/BaseError"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "code": {
                            "type": "string",
                            "default": "415"
                          },
                          "title": {
                            "type": "string",
                            "default": "Unsupported Media Type"
                          }
                        }
                      }
                    ]
                  }
                }
              }
            },
            "examples": {
              "Example 415 Response": {
                "value": {
                  "errors": [
                    {
                      "title": "Unsupported Media Type",
                      "code": "415"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "500": {
        "description": "The HTTP 500 Internal Server Error server error response code indicates that the server encountered an unexpected condition that prevented it from fulfilling the request.",
        "content": {
          "application/vnd.api+json": {
            "schema": {
              "type": "object",
              "properties": {
                "errors": {
                  "type": "array",
                  "items": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/BaseError"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "code": {
                            "type": "string",
                            "default": "500"
                          },
                          "title": {
                            "type": "string",
                            "default": "Internal Server Error"
                          }
                        }
                      }
                    ]
                  }
                }
              }
            },
            "examples": {
              "Example 500 Response": {
                "value": {
                  "errors": [
                    {
                      "title": "Internal Server Error",
                      "code": "500"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "securitySchemes": {
      "your-api-token": {
        "type": "http",
        "scheme": "bearer"
      }
    }
  },
  "security": [
    {
      "your-api-token": []
    }
  ],
  "tags": [
    {
      "name": "Property Reports",
      "description": "All endpoints for Spectre Property Reports"
    }
  ],
  "x-ext-urls": {}
}