{
  "openapi": "3.0.3",
  "info": {
    "title": "Exorde API",
    "version": "1.5.0",
    "termsOfService": "https://www.exordelabs.com/terms-of-use",
    "contact": {
      "email": "hello@exordelabs.com"
    }
  },
  "servers": [
    {
      "url": "https://api.exorde.io"
    }
  ],
  "security": [
    {
      "apiKey": []
    }
  ],
  "tags": [
    {
      "name": "Posts",
      "description": "These endpoints give access to all posts collected and analyzed by the Exorde protocol.\nPost can be press articles, blog articles, social posts, forum posts, etc.\n\nYou can retrieve an individual post or many using search filters. For each post you have access to its URL, its metadata and its analysis.\n"
    },
    {
      "name": "Categories",
      "description": "14 themes or large categories. For instance, the category 'Politics' contains all related to politics, like politicians or elections.\n\nThe number of categories is fixed. All possible categories have been defined. \nThese endpoints give access to all categories.\n"
    },
    {
      "name": "Emotions",
      "description": "The Exorde protocol extracts emotions from each post collected.\n\nThese endpoints count the emotions extracted from posts matching the input filters.\nYou can aggregate data in a time range or request the evolution of the data over time.\n"
    },
    {
      "name": "Sentiment",
      "description": "The Exorde protocol extracts sentiment from each post collected.\n\nThese endpoints calculate the average sentiment extracted from posts matching the input filters.\nYou can aggregate data in a time range or request the evolution of the data over time.\n"
    },
    {
      "name": "Volume",
      "description": "These endpoints count the posts matching the input filters.\nYou can aggregate data in a time range or request the evolution of the data over time.\n"
    },
    {
      "name": "Keywords",
      "description": "These endpoints give the keywords related to a category.\n"
    },
    {
      "name": "User",
      "description": "API user management endpoints.\n"
    },
    {
      "name": "Utils",
      "description": "API related endpoints.\n"
    }
  ],
  "externalDocs": {
    "description": "Find the full API's documentation here",
    "url": "https://docs.exorde.io"
  },
  "paths": {
    "/": {
      "get": {
        "summary": "Get the API root",
        "description": "Returns the API welcome message. This route is public and doesn't require authentication.\n\nWelcome to Exorde API!\n\n**Cost:** 0 credit per call.\n",
        "operationId": "getRoot",
        "tags": [
          "Utils"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "required": [
                        "message"
                      ],
                      "properties": {
                        "message": {
                          "description": "Welcome message",
                          "type": "string"
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/ResponseModel"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400_BadRequest"
          },
          "429": {
            "$ref": "#/components/responses/429_TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/500_InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/503_ServiceUnavailable"
          }
        }
      }
    },
    "/posts": {
      "get": {
        "summary": "List posts",
        "description": "Returns all posts matching the filters.\n\nPosts are sorted by creation date, from the newest to the oldest.\n\nBy default, the response only contains fields marked as `required` and fields used to filter the results.\nThe other fields must be requested with the parameter `additionalFields`.\n\n**Cost:** 1 credit per call.\n",
        "operationId": "listPosts",
        "tags": [
          "Posts"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiVersion"
          },
          {
            "$ref": "#/components/parameters/startDate"
          },
          {
            "$ref": "#/components/parameters/endDate"
          },
          {
            "$ref": "#/components/parameters/categoryId"
          },
          {
            "$ref": "#/components/parameters/sourceType"
          },
          {
            "$ref": "#/components/parameters/domainName"
          },
          {
            "$ref": "#/components/parameters/language"
          },
          {
            "$ref": "#/components/parameters/keywords"
          },
          {
            "$ref": "#/components/parameters/keywordsCondition"
          },
          {
            "$ref": "#/components/parameters/additionalFields"
          },
          {
            "$ref": "#/components/parameters/paginationCursor"
          },
          {
            "$ref": "#/components/parameters/limit"
          }
        ],
        "responses": {
          "200": {
            "description": "Expected response to a valid request",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "required": [
                        "items"
                      ],
                      "properties": {
                        "items": {
                          "$ref": "#/components/schemas/Posts"
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/PaginatedResponseModel"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400_BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/401_Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/403_Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/429_TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/500_InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/503_ServiceUnavailable"
          }
        }
      }
    },
    "/categories": {
      "get": {
        "summary": "List categories",
        "description": "Returns all categories.\n\nCategories are sorted by name, in ascending order.\n\n**Cost:** 1 credit per call.\n",
        "operationId": "listCategories",
        "tags": [
          "Categories"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiVersion"
          },
          {
            "$ref": "#/components/parameters/paginationCursor"
          },
          {
            "$ref": "#/components/parameters/limit"
          }
        ],
        "responses": {
          "200": {
            "description": "Expected response to a valid request",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "required": [
                        "items"
                      ],
                      "properties": {
                        "items": {
                          "$ref": "#/components/schemas/Categories"
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/PaginatedResponseModel"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400_BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/401_Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/403_Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/429_TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/500_InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/503_ServiceUnavailable"
          }
        }
      }
    },
    "/categories/{id}": {
      "get": {
        "summary": "Get a category",
        "description": "Returns a category based on its ID.\n\n**Cost:** 1 credit per call.\n",
        "operationId": "getCategory",
        "tags": [
          "Categories"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiVersion"
          },
          {
            "$ref": "#/components/parameters/id-2"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "required": [
                        "category"
                      ],
                      "properties": {
                        "category": {
                          "$ref": "#/components/schemas/Category"
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/ResponseModel"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400_BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/401_Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/403_Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/404_NotFound"
          },
          "429": {
            "$ref": "#/components/responses/429_TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/500_InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/503_ServiceUnavailable"
          }
        }
      }
    },
    "/emotions": {
      "get": {
        "summary": "Get the emotions",
        "description": "Returns the emotions.\n\n**Cost:** 1 credit per call.\n",
        "operationId": "getEmotion",
        "tags": [
          "Emotions"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiVersion"
          },
          {
            "$ref": "#/components/parameters/startDate"
          },
          {
            "$ref": "#/components/parameters/endDate"
          },
          {
            "$ref": "#/components/parameters/categoryId"
          },
          {
            "$ref": "#/components/parameters/sourceType"
          },
          {
            "$ref": "#/components/parameters/domainName"
          },
          {
            "$ref": "#/components/parameters/language"
          },
          {
            "$ref": "#/components/parameters/keywords"
          },
          {
            "$ref": "#/components/parameters/keywordsCondition"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "required": [
                        "emotion"
                      ],
                      "properties": {
                        "emotion": {
                          "$ref": "#/components/schemas/Emotion"
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/ResponseModel"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400_BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/401_Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/403_Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/429_TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/500_InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/503_ServiceUnavailable"
          }
        }
      }
    },
    "/emotions/history": {
      "get": {
        "summary": "Get the history of emotions",
        "description": "Returns the history of emotions, the response is a time series.\n\nHistory data points are sorted by creation date, from the oldest to the newest.\n\n**Cost:** 5 credits per call.\n",
        "operationId": "getEmotionHistory",
        "tags": [
          "Emotions"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiVersion"
          },
          {
            "$ref": "#/components/parameters/startDateTimeseries"
          },
          {
            "$ref": "#/components/parameters/endDateTimeseries"
          },
          {
            "$ref": "#/components/parameters/interval"
          },
          {
            "$ref": "#/components/parameters/categoryId"
          },
          {
            "$ref": "#/components/parameters/sourceType"
          },
          {
            "$ref": "#/components/parameters/domainName"
          },
          {
            "$ref": "#/components/parameters/language"
          },
          {
            "$ref": "#/components/parameters/keywords"
          },
          {
            "$ref": "#/components/parameters/keywordsCondition"
          },
          {
            "$ref": "#/components/parameters/paginationCursor"
          },
          {
            "$ref": "#/components/parameters/limit_timeseries"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "required": [
                        "items"
                      ],
                      "properties": {
                        "items": {
                          "$ref": "#/components/schemas/Emotions"
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/TimeSeriesResponseModel"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400_BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/401_Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/403_Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/429_TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/500_InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/503_ServiceUnavailable"
          }
        }
      }
    },
    "/sentiment": {
      "get": {
        "summary": "Get the sentiment",
        "description": "Returns the computed sentiment.\n\n**Cost:** 1 credit per call.\n",
        "operationId": "getSentiment",
        "tags": [
          "Sentiment"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiVersion"
          },
          {
            "$ref": "#/components/parameters/startDate"
          },
          {
            "$ref": "#/components/parameters/endDate"
          },
          {
            "$ref": "#/components/parameters/categoryId"
          },
          {
            "$ref": "#/components/parameters/sourceType"
          },
          {
            "$ref": "#/components/parameters/domainName"
          },
          {
            "$ref": "#/components/parameters/language"
          },
          {
            "$ref": "#/components/parameters/keywords"
          },
          {
            "$ref": "#/components/parameters/keywordsCondition"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "required": [
                        "sentiment"
                      ],
                      "properties": {
                        "sentiment": {
                          "$ref": "#/components/schemas/Sentiment"
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/ResponseModel"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400_BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/401_Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/403_Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/429_TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/500_InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/503_ServiceUnavailable"
          }
        }
      }
    },
    "/sentiment/history": {
      "get": {
        "summary": "Get the sentiment history",
        "description": "Returns the history of the computed sentiment, the response is a time series.\n\nHistory data points are sorted by creation date, from the oldest to the newest.\n\n**Cost:** 5 credits per call.\n",
        "operationId": "getSentimentHistory",
        "tags": [
          "Sentiment"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiVersion"
          },
          {
            "$ref": "#/components/parameters/startDateTimeseries"
          },
          {
            "$ref": "#/components/parameters/endDateTimeseries"
          },
          {
            "$ref": "#/components/parameters/interval"
          },
          {
            "$ref": "#/components/parameters/categoryId"
          },
          {
            "$ref": "#/components/parameters/sourceType"
          },
          {
            "$ref": "#/components/parameters/domainName"
          },
          {
            "$ref": "#/components/parameters/language"
          },
          {
            "$ref": "#/components/parameters/keywords"
          },
          {
            "$ref": "#/components/parameters/keywordsCondition"
          },
          {
            "$ref": "#/components/parameters/paginationCursor"
          },
          {
            "$ref": "#/components/parameters/limit_timeseries"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "required": [
                        "items"
                      ],
                      "properties": {
                        "items": {
                          "$ref": "#/components/schemas/Sentiments"
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/TimeSeriesResponseModel"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400_BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/401_Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/403_Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/429_TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/500_InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/503_ServiceUnavailable"
          }
        }
      }
    },
    "/user/api-key": {
      "put": {
        "summary": "Generate a new api key for user",
        "description": "Generates a new api key for the user.\n\n**Cost:** 0 credit per call.\n",
        "operationId": "putApiKey",
        "tags": [
          "User"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "required": [
                        "apiKey"
                      ],
                      "properties": {
                        "apikey": {
                          "description": "The generated api key for the user.",
                          "allOf": [
                            {
                              "$ref": "#/components/schemas/uuidModel"
                            }
                          ]
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/ResponseModel"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400_BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/401_Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/403_Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/429_TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/500_InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/503_ServiceUnavailable"
          }
        }
      }
    },
    "/user/info": {
      "get": {
        "summary": "Get user info",
        "description": "Returns user information.\n\n**Cost:** 0 credit per call.\n",
        "operationId": "getUserInfo",
        "tags": [
          "User"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "required": [
                        "user"
                      ],
                      "properties": {
                        "user": {
                          "$ref": "#/components/schemas/User"
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/ResponseModel"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400_BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/401_Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/403_Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/429_TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/500_InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/503_ServiceUnavailable"
          }
        }
      }
    },
    "/volume": {
      "get": {
        "summary": "Count the posts",
        "description": "Returns the number of post.\n\n**Cost:** 1 credit per call.\n",
        "operationId": "getVolume",
        "tags": [
          "Volume"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiVersion"
          },
          {
            "$ref": "#/components/parameters/startDate"
          },
          {
            "$ref": "#/components/parameters/endDate"
          },
          {
            "$ref": "#/components/parameters/categoryId"
          },
          {
            "$ref": "#/components/parameters/sourceType"
          },
          {
            "$ref": "#/components/parameters/domainName"
          },
          {
            "$ref": "#/components/parameters/language"
          },
          {
            "$ref": "#/components/parameters/keywords"
          },
          {
            "$ref": "#/components/parameters/keywordsCondition"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "required": [
                        "volume"
                      ],
                      "properties": {
                        "volume": {
                          "$ref": "#/components/schemas/Volume"
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/ResponseModel"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400_BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/401_Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/403_Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/429_TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/500_InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/503_ServiceUnavailable"
          }
        }
      }
    },
    "/volume/history": {
      "get": {
        "summary": "Get the history of posts count",
        "description": "Returns the history of post counts, the response is a time series.\n\nHistory data points are sorted by creation date, from the oldest to the newest.\n\n**Cost:** 5 credits per call.\n",
        "operationId": "getVolumeHistory",
        "tags": [
          "Volume"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiVersion"
          },
          {
            "$ref": "#/components/parameters/startDateTimeseries"
          },
          {
            "$ref": "#/components/parameters/endDateTimeseries"
          },
          {
            "$ref": "#/components/parameters/interval"
          },
          {
            "$ref": "#/components/parameters/categoryId"
          },
          {
            "$ref": "#/components/parameters/sourceType"
          },
          {
            "$ref": "#/components/parameters/domainName"
          },
          {
            "$ref": "#/components/parameters/language"
          },
          {
            "$ref": "#/components/parameters/keywords"
          },
          {
            "$ref": "#/components/parameters/keywordsCondition"
          },
          {
            "$ref": "#/components/parameters/paginationCursor"
          },
          {
            "$ref": "#/components/parameters/limit_timeseries"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "required": [
                        "items"
                      ],
                      "properties": {
                        "items": {
                          "$ref": "#/components/schemas/Volumes"
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/TimeSeriesResponseModel"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400_BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/401_Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/403_Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/429_TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/500_InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/503_ServiceUnavailable"
          }
        }
      }
    },
    "/keywords/trending": {
      "get": {
        "summary": "Get trending keywords",
        "description": "Get the trending keywords related to all or specific categories. They are sorted by descending frequency.\n\n**Cost:** 1 credit per call.\n",
        "operationId": "getTrendingKeywords",
        "tags": [
          "Keywords"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiVersion"
          },
          {
            "$ref": "#/components/parameters/limit-2"
          },
          {
            "$ref": "#/components/parameters/startDate"
          },
          {
            "$ref": "#/components/parameters/endDate"
          },
          {
            "$ref": "#/components/parameters/categoryId"
          },
          {
            "$ref": "#/components/parameters/sourceType"
          },
          {
            "$ref": "#/components/parameters/domainName"
          },
          {
            "$ref": "#/components/parameters/language"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "required": [
                        "trendingKeywords"
                      ],
                      "properties": {
                        "trendingKeywords": {
                          "$ref": "#/components/schemas/TrendingKeywords"
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/ResponseModel"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400_BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/401_Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/403_Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/429_TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/500_InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/503_ServiceUnavailable"
          }
        }
      }
    },
    "/healthcheck": {
      "get": {
        "summary": "Get the API health check",
        "description": "Returns the API health check. This route is public and doesn't require authentication.\n\n**Cost:** 0 credit per call.\n",
        "operationId": "getHealthcheck",
        "tags": [
          "Utils"
        ],
        "security": [],
        "parameters": [
          {
            "$ref": "#/components/parameters/apiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "required": [
                        "apiStatus"
                      ],
                      "properties": {
                        "apiStatus": {
                          "description": "The health status of the API.",
                          "type": "string",
                          "enum": [
                            "UP",
                            "DOWN"
                          ]
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/ResponseModel"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400_BadRequest"
          },
          "429": {
            "$ref": "#/components/responses/429_TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/500_InternalServerError"
          },
          "503": {
            "$ref": "#/components/responses/503_ServiceUnavailable"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "### Acquiring an API key\n\nAll HTTP requests made against the Exorde API must be validated with an API key. If you don't have an API key yet, create one from the [developers portal](https://developers.exorde.io).\n\n### Using Your API key\n\nThe Exorde API uses a bearer token authentication mechanism. The API key acts as a token and must be provided in the `Authorization` header of your request. For example :\n\n```bash\ncurl \\\n    --url https://api.exorde.io/posts \\\n    --header \"X-Exorde-Api-Version: v1\" \\\n    --header \"Accept: application/json\" \\\n    --header \"Authorization: Bearer <api-key>\"\n```\n"
      }
    },
    "parameters": {
      "apiVersion": {
        "name": "X-Exorde-Api-Version",
        "in": "header",
        "required": true,
        "description": "The API version.",
        "schema": {
          "type": "string",
          "enum": [
            "v1"
          ]
        }
      },
      "startDate": {
        "name": "startDate",
        "in": "query",
        "required": false,
        "description": "The start date, used to filter results. It must respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat, UTC date-time without timezone. Examples : \"1977-04-22T07:00:00.000Z\", \"1977-04-22T07:00:00.000+00:00\".\n\n_Note : the start date is inclusive, meaning that the results will include the start date._\n\n**Limitations:**\n - Default: the API returns the results for the last hour by default.\n - Maximum: the API can go back in time up to 15 days. If an older date is provided, the API will limit its results to 15 days.\n",
        "schema": {
          "type": "string",
          "format": "date-time",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,6})?(Z|\\+00:00)$"
        },
        "example": "1977-04-22T06:00:00.000Z"
      },
      "endDate": {
        "name": "endDate",
        "in": "query",
        "required": false,
        "description": "The end date, used to filter results. It must respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat, UTC date-time without timezone. Examples : \"1977-04-22T07:00:00.000Z\", \"1977-04-22T07:00:00.000+00:00\".\n\n_Note : the end date is exclusive, meaning that the results will not include the end date._\n\n**Limitations:**\n - The `endDate` must be greater than the `startDate`, otherwise the API returns an error.\n",
        "schema": {
          "type": "string",
          "format": "date-time",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,6})?(Z|\\+00:00)$"
        },
        "example": "1977-04-22T07:00:00.000Z"
      },
      "categoryId": {
        "name": "categoryId",
        "in": "query",
        "required": false,
        "description": "The category's id, used to filter the results.",
        "schema": {
          "$ref": "#/components/schemas/categoryIdModel"
        }
      },
      "sourceType": {
        "name": "sourceType",
        "in": "query",
        "required": false,
        "description": "The source type, used to filter the results.",
        "schema": {
          "type": "string",
          "enum": [
            "news",
            "social"
          ]
        }
      },
      "domainName": {
        "name": "domainName",
        "in": "query",
        "required": false,
        "description": "The domain name, used to filter the results.",
        "schema": {
          "type": "string",
          "format": "hostname",
          "pattern": "^[a-z][0-9a-z.-]{0,100}\\.[a-z]{2,4}$"
        },
        "example": "example.com"
      },
      "language": {
        "name": "language",
        "in": "query",
        "required": false,
        "description": "The [ISO 639-1 language tag](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes), \nused to filter the results.\n",
        "schema": {
          "$ref": "#/components/schemas/languageModel"
        },
        "example": "fr"
      },
      "keywords": {
        "name": "keywords",
        "in": "query",
        "required": false,
        "description": "A list of keywords used to filter the posts. Depends on keywords condition (or/and) to filter the posts.\n\n_This parameter is case-insensitive._\n",
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "maxItems": 5
        },
        "example": [
          "btc",
          "bitcoin"
        ]
      },
      "keywordsCondition": {
        "name": "keywordsCondition",
        "in": "query",
        "required": false,
        "description": "The condition to return the posts that match one or all of the keywords passed in input.\n",
        "schema": {
          "type": "string",
          "enum": [
            "and",
            "or"
          ],
          "default": "and"
        }
      },
      "additionalFields": {
        "name": "additionalFields",
        "in": "query",
        "required": false,
        "description": "Optional fields to add in the response object.\n\n*Notes:*\n- *There are two meta fields, `all` to request all fields and `analysis` to request all analysis fields.*\n- *If an optional field is in request's filters, it will be automatically added in the response.*\n",
        "schema": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "all",
              "analysis",
              "author",
              "summary",
              "domainName",
              "externalParentId",
              "externalId",
              "language",
              "image",
              "analysis.emotions",
              "analysis.sentiment",
              "analysis.keywords",
              "analysis.sourceType"
            ]
          },
          "minItems": 1,
          "maxItems": 13
        },
        "example": [
          "language",
          "analysis.emotions"
        ]
      },
      "paginationCursor": {
        "name": "paginationCursor",
        "in": "query",
        "required": false,
        "description": "An opaque string representing the pagination cursor.",
        "schema": {
          "type": "string"
        }
      },
      "limit": {
        "name": "limit",
        "in": "query",
        "required": false,
        "description": "The maximum number of objects returned per page.",
        "schema": {
          "type": "integer",
          "format": "int32",
          "minimum": 1,
          "maximum": 100,
          "default": 10
        }
      },
      "url": {
        "name": "url",
        "in": "path",
        "required": true,
        "description": "The url encoded post's url.",
        "schema": {
          "type": "string",
          "format": "uri",
          "maxLength": 4096
        },
        "example": "https%3A%2F%2Fexample.com%2Fposts%2F12"
      },
      "limit-2": {
        "name": "limit",
        "in": "query",
        "required": false,
        "description": "The number of items to return in the ranking.",
        "schema": {
          "type": "integer",
          "format": "int32",
          "minimum": 1,
          "maximum": 100,
          "default": 10
        }
      },
      "id-2": {
        "name": "id",
        "in": "path",
        "required": true,
        "description": "The category's id.",
        "schema": {
          "$ref": "#/components/schemas/categoryIdModel"
        }
      },
      "startDateTimeseries": {
        "name": "startDate",
        "in": "query",
        "required": false,
        "description": "The start date, used to filter results. It must respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat, UTC date-time without timezone. Examples : \"1977-04-22T07:00:00.000Z\", \"1977-04-22T07:00:00.000+00:00\".\n\n_Note : the start date is inclusive, the bucket containing it is always included in the response. The actual start date is aligned with the beginning of the time bucket containing it. The response may include data from before the requested start date._\n\n**Limitations:**\n - Default: the API returns the results for the last hour by default.\n - Maximum: the API can go back in time up to 15 days. If an older date is provided, the API will limit its results to 15 days.\n",
        "schema": {
          "type": "string",
          "format": "date-time",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,6})?(Z|\\+00:00)$"
        },
        "example": "1977-04-22T06:00:00.000Z"
      },
      "endDateTimeseries": {
        "name": "endDate",
        "in": "query",
        "required": false,
        "description": "The end date, used to filter results. It must respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat, UTC date-time without timezone. Examples : \"1977-04-22T07:00:00.000Z\", \"1977-04-22T07:00:00.000+00:00\".\n\n_Note : the `endDate` is exclusive, the bucket containing it is never included in the response. The actual `endDate` is aligned with the end of the previous time bucket._\n\n**Limitations:**\n - The `endDate` must be greater than the `startDate`, otherwise the API returns an error.\n",
        "schema": {
          "type": "string",
          "format": "date-time",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,6})?(Z|\\+00:00)$"
        },
        "example": "1977-04-22T07:00:00.000Z"
      },
      "interval": {
        "name": "interval",
        "in": "query",
        "required": false,
        "description": "The interval between data points in minutes. Data are aggregated by interval and the average value of this interval is calculated and returned.\n\nYou can specify the interval in minutes or in a human-readable format. The human-readable format is a number followed by a time unit. The supported time units are: m (minutes), h (hours), d (days), w (weeks), M (months), y (years).\n\nMinimum value is 1 minute. Default value is 1h. Maximum value is 10 years.\n",
        "schema": {
          "oneOf": [
            {
              "type": "integer",
              "format": "int32",
              "minimum": 1,
              "maximum": 5256000,
              "default": 60
            },
            {
              "type": "string",
              "pattern": "^(5m|([1-9][0-9]*[05]m)|([1-9][0-9]*(h|d|w|M|y)))$",
              "default": "1h",
              "example": "5m"
            }
          ]
        }
      },
      "limit_timeseries": {
        "name": "limit",
        "in": "query",
        "required": false,
        "description": "The maximum number of objects returned per page.",
        "schema": {
          "type": "integer",
          "format": "int32",
          "minimum": 1,
          "maximum": 1000,
          "default": 10
        }
      }
    },
    "schemas": {
      "ResponseModel": {
        "title": "ResponseModel",
        "type": "object",
        "required": [
          "status"
        ],
        "properties": {
          "status": {
            "type": "object",
            "required": [
              "cost"
            ],
            "properties": {
              "cost": {
                "type": "integer",
                "format": "int32",
                "description": "Number of credits that were consumed for this request."
              },
              "apiDeprecationNotice": {
                "type": "object",
                "description": "Deprecation notice of the API.",
                "required": [
                  "message",
                  "shutdownDate"
                ],
                "properties": {
                  "message": {
                    "type": "string",
                    "description": "A message that tells when the API version will be shut down.",
                    "example": "The version 1 of the API is deprecated and will be shut down the 2022-02-02 at 00:00:00 UTC."
                  },
                  "shutdownDate": {
                    "type": "string",
                    "format": "date-time",
                    "description": "The date of removal of the API version, UTC date-time without timezone using [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) format.",
                    "example": "2022-02-02T00:00:00.000Z"
                  }
                }
              }
            }
          }
        }
      },
      "uuidModel": {
        "title": "uuidModel",
        "type": "string",
        "format": "uuid",
        "pattern": "^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$",
        "example": "123e4567-e89b-12d3-a456-426655440000"
      },
      "ErrorModel": {
        "title": "ErrorModel",
        "allOf": [
          {
            "type": "object",
            "required": [
              "error"
            ],
            "properties": {
              "error": {
                "type": "object",
                "required": [
                  "message",
                  "code"
                ],
                "properties": {
                  "message": {
                    "type": "string",
                    "description": "The description of the error. It gives meaningful information about what happened.",
                    "example": "An error occurred."
                  },
                  "code": {
                    "type": "integer",
                    "description": "The error code. Please use our documentation to get more information about it.",
                    "minimum": 100,
                    "maximum": 600
                  },
                  "userId": {
                    "description": "The id of the user that made the request.",
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/uuidModel"
                      }
                    ]
                  },
                  "requestId": {
                    "description": "The id of the request.",
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/uuidModel"
                      }
                    ]
                  }
                }
              }
            }
          },
          {
            "$ref": "#/components/schemas/ResponseModel"
          }
        ]
      },
      "categoryIdModel": {
        "title": "categoryIdModel",
        "type": "integer",
        "format": "int32",
        "minimum": 1,
        "maximum": 2147483647
      },
      "languageModel": {
        "title": "languageModel",
        "type": "string",
        "enum": [
          "aa",
          "ab",
          "ae",
          "af",
          "ak",
          "am",
          "an",
          "ar",
          "as",
          "av",
          "ay",
          "az",
          "ba",
          "be",
          "bg",
          "bh",
          "bi",
          "bm",
          "bn",
          "bo",
          "br",
          "bs",
          "ca",
          "ce",
          "ch",
          "co",
          "cr",
          "cs",
          "cu",
          "cv",
          "cy",
          "da",
          "de",
          "dv",
          "dz",
          "ee",
          "el",
          "en",
          "eo",
          "es",
          "et",
          "eu",
          "fa",
          "ff",
          "fi",
          "fj",
          "fo",
          "fr",
          "fy",
          "ga",
          "gd",
          "gl",
          "gn",
          "gu",
          "gv",
          "ha",
          "he",
          "hi",
          "ho",
          "hr",
          "ht",
          "hu",
          "hy",
          "hz",
          "ia",
          "id",
          "ie",
          "ig",
          "ii",
          "ik",
          "io",
          "is",
          "it",
          "iu",
          "ja",
          "jv",
          "ka",
          "kg",
          "ki",
          "kj",
          "kk",
          "kl",
          "km",
          "kn",
          "ko",
          "kr",
          "ks",
          "ku",
          "kv",
          "kw",
          "ky",
          "la",
          "lb",
          "lg",
          "li",
          "ln",
          "lo",
          "lt",
          "lu",
          "lv",
          "mg",
          "mh",
          "mi",
          "mk",
          "ml",
          "mn",
          "mr",
          "ms",
          "mt",
          "my",
          "na",
          "nb",
          "nd",
          "ne",
          "ng",
          "nl",
          "nn",
          "no",
          "nr",
          "nv",
          "ny",
          "oc",
          "oj",
          "om",
          "or",
          "os",
          "pa",
          "pi",
          "pl",
          "ps",
          "pt",
          "qu",
          "rm",
          "rn",
          "ro",
          "ru",
          "rw",
          "sa",
          "sc",
          "sd",
          "se",
          "sg",
          "si",
          "sk",
          "sl",
          "sm",
          "sn",
          "so",
          "sq",
          "sr",
          "ss",
          "st",
          "su",
          "sv",
          "sw",
          "ta",
          "te",
          "tg",
          "th",
          "ti",
          "tk",
          "tl",
          "tn",
          "to",
          "tr",
          "ts",
          "tt",
          "tw",
          "ty",
          "ug",
          "uk",
          "ur",
          "uz",
          "ve",
          "vi",
          "vo",
          "wa",
          "wo",
          "xh",
          "yi",
          "yo",
          "za",
          "zh",
          "zu"
        ]
      },
      "Post": {
        "title": "Post",
        "type": "object",
        "description": "A `Post` ressource.",
        "required": [
          "url",
          "title",
          "createdAt",
          "categories"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The post URL."
          },
          "title": {
            "description": "The post title.",
            "type": "string",
            "nullable": true
          },
          "createdAt": {
            "description": "The post creation date. It respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) format, UTC date-time without timezone.",
            "type": "string",
            "format": "date-time",
            "example": "1977-04-22T07:00:00.000Z"
          },
          "categories": {
            "description": "Links to the categories extracted from the content.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            }
          },
          "summary": {
            "description": "The post summary.",
            "type": "string",
            "nullable": true
          },
          "author": {
            "description": "The SHA1 of author's username.",
            "type": "string",
            "nullable": true,
            "example": "11F453355B28E1158D4E516A2D3EDF96B3450406"
          },
          "domainName": {
            "description": "The domain name.",
            "type": "string"
          },
          "externalParentId": {
            "description": "The external id of the parent (in the source platform).",
            "type": "string",
            "nullable": true
          },
          "externalId": {
            "description": "The external id (in the source platform).",
            "type": "string",
            "nullable": true
          },
          "image": {
            "description": "The url of the post image.",
            "type": "string",
            "format": "uri",
            "nullable": true,
            "example": "http://example.com/img3615.png"
          },
          "language": {
            "description": "The language of the post, with its [ISO 639-1 language tag](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes).",
            "allOf": [
              {
                "$ref": "#/components/schemas/languageModel"
              }
            ]
          },
          "analysis": {
            "description": "The post analysis.",
            "type": "object",
            "properties": {
              "emotions": {
                "description": "The emotions detected with their confidence index. The higher the confidence index, the more likely the emotion is to be in the post. A threshold of 0.5 can be applied to the probabilities for the prediction for each emotion.\n",
                "type": "object",
                "properties": {
                  "admiration": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "anger": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "annoyance": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "approval": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "caring": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "confusion": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "curiosity": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "desire": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "disappointment": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "disapproval": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "disgust": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "embarrassment": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "excitement": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "fear": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "gratitude": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "grief": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "joy": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "love": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "nervousness": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "neutral": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "optimism": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "pride": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "realization": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "relief": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "remorse": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "sadness": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "surprise": {
                    "type": "number",
                    "format": "float",
                    "minimum": 0,
                    "maximum": 1
                  }
                }
              },
              "sentiment": {
                "description": "The sentiment of the post. `-1` is highly negative, `0` is neutral and `+1` is highly positive.",
                "type": "number",
                "format": "float",
                "minimum": -1,
                "maximum": 1
              },
              "keywords": {
                "description": "The keywords extracted from the content.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "sourceType": {
                "description": "The source type of the post.",
                "type": "string",
                "nullable": true,
                "enum": [
                  "news",
                  "social"
                ]
              }
            }
          }
        }
      },
      "Posts": {
        "title": "Posts",
        "type": "array",
        "description": "An array of `Post` ressources.",
        "maxItems": 100,
        "items": {
          "$ref": "#/components/schemas/Post"
        }
      },
      "PaginatedResponseModel": {
        "title": "PaginatedResponseModel",
        "allOf": [
          {
            "type": "object",
            "properties": {
              "pagination": {
                "type": "object",
                "properties": {
                  "self": {
                    "description": "Pagination link|cursor pointing to the current page.",
                    "type": "string",
                    "format": "uri"
                  },
                  "prev": {
                    "description": "Pagination link|cursor pointing to the previous page.\n\nThis link is not present if there is no previous page.\n",
                    "type": "string",
                    "format": "uri"
                  },
                  "next": {
                    "description": "Pagination link|cursor pointing to the next page.\n\nThis link is not present if there is no next page.\n",
                    "type": "string",
                    "format": "uri"
                  }
                }
              }
            }
          },
          {
            "$ref": "#/components/schemas/ResponseModel"
          }
        ]
      },
      "Category": {
        "title": "Category",
        "type": "object",
        "description": "A `Category` resource.",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "description": "The category ID.",
            "allOf": [
              {
                "$ref": "#/components/schemas/categoryIdModel"
              }
            ]
          },
          "name": {
            "type": "string",
            "description": "The category name."
          }
        }
      },
      "Keyword": {
        "title": "Keyword",
        "type": "object",
        "description": "A `Keyword` resource.",
        "required": [
          "label",
          "language"
        ],
        "properties": {
          "label": {
            "type": "string",
            "description": "The keyword label."
          },
          "language": {
            "type": "string",
            "description": "The keyword language.",
            "enum": [
              "en",
              "zh",
              "ja",
              "ar",
              "hi",
              "ko",
              "th",
              "vi",
              "ru",
              "tr",
              "es",
              "fr",
              "de",
              "fa"
            ]
          }
        }
      },
      "postsCountModel": {
        "title": "postsCountModel",
        "type": "integer",
        "format": "int32",
        "minimum": 0,
        "description": "The number of posts found for the query."
      },
      "Categories": {
        "title": "Categories",
        "type": "array",
        "description": "An array of `Category` ressources.",
        "maxItems": 100,
        "items": {
          "$ref": "#/components/schemas/Category"
        }
      },
      "Emotion": {
        "title": "Emotion",
        "type": "object",
        "description": "The repartition of `Emotion` in a dataset of `Posts`.",
        "required": [
          "emotions",
          "postsCount",
          "startDate",
          "endDate"
        ],
        "properties": {
          "emotions": {
            "type": "object",
            "nullable": true,
            "required": [
              "love",
              "admiration",
              "joy",
              "approval",
              "caring",
              "excitement",
              "gratitude",
              "desire",
              "anger",
              "optimism",
              "disapproval",
              "grief",
              "annoyance",
              "pride",
              "curiosity",
              "neutral",
              "disgust",
              "disappointment",
              "realization",
              "fear",
              "relief",
              "confusion",
              "remorse",
              "embarrassment",
              "surprise",
              "sadness",
              "nervousness"
            ],
            "properties": {
              "love": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `love` emotion for the query."
              },
              "admiration": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `admiration` emotion for the query."
              },
              "joy": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `joy` emotion for the query."
              },
              "approval": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `approval` emotion for the query."
              },
              "caring": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `caring` emotion for the query."
              },
              "excitement": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `excitement` emotion for the query."
              },
              "gratitude": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `gratitude` emotion for the query."
              },
              "desire": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `desire` emotion for the query."
              },
              "anger": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `anger` emotion for the query."
              },
              "optimism": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `optimism` emotion for the query."
              },
              "disapproval": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `disapproval` emotion for the query."
              },
              "grief": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `grief` emotion for the query."
              },
              "annoyance": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `annoyance` emotion for the query."
              },
              "pride": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `pride` emotion for the query."
              },
              "curiosity": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `curiosity` emotion for the query."
              },
              "neutral": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `neutral` emotion for the query."
              },
              "disgust": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `disgust` emotion for the query."
              },
              "disappointment": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `disappointment` emotion for the query."
              },
              "realization": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `realization` emotion for the query."
              },
              "fear": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `fear` emotion for the query."
              },
              "relief": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `relief` emotion for the query."
              },
              "confusion": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `confusion` emotion for the query."
              },
              "remorse": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `remorse` emotion for the query."
              },
              "embarrassment": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `embarrassment` emotion for the query."
              },
              "surprise": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `surprise` emotion for the query."
              },
              "sadness": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `sadness` emotion for the query."
              },
              "nervousness": {
                "type": "integer",
                "format": "int32",
                "minimum": 0,
                "description": "The number of occurrences of `nervousness` emotion for the query."
              }
            }
          },
          "postsCount": {
            "$ref": "#/components/schemas/postsCountModel"
          },
          "startDate": {
            "description": "The lower bound date of data used to calculate the emotion. It respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) format, UTC date-time without timezone.",
            "type": "string",
            "format": "date-time",
            "example": "1977-04-22T07:00:00.000Z"
          },
          "endDate": {
            "description": "The upper bound date of data used to calculate the emotion. It respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) format, UTC date-time without timezone.",
            "type": "string",
            "format": "date-time",
            "example": "1977-04-22T07:00:00.000Z"
          }
        }
      },
      "Emotions": {
        "title": "Emotions",
        "type": "array",
        "description": "An array of `Emotion` ressources.",
        "maxItems": 1000,
        "items": {
          "$ref": "#/components/schemas/Emotion"
        }
      },
      "TimeSeriesResponseModel": {
        "title": "TimeSeriesResponseModel",
        "allOf": [
          {
            "type": "object",
            "properties": {
              "requestedInterval": {
                "description": "The requested interval between data points.",
                "type": "integer",
                "format": "int32",
                "multipleOf": 5,
                "minimum": 5,
                "maximum": 5256000
              }
            }
          },
          {
            "$ref": "#/components/schemas/PaginatedResponseModel"
          }
        ]
      },
      "Sentiment": {
        "title": "Sentiment",
        "type": "object",
        "description": "The computed `Sentiment` for a query.",
        "required": [
          "percentagePositivePosts",
          "percentageNegativePosts",
          "percentageNeutralPosts",
          "sentiment",
          "postsCount",
          "startDate",
          "endDate"
        ],
        "properties": {
          "percentagePositivePosts": {
            "type": "number",
            "format": "float",
            "nullable": true,
            "minimum": 0,
            "maximum": 100,
            "description": "The percentage of positive posts."
          },
          "percentageNegativePosts": {
            "type": "number",
            "format": "float",
            "nullable": true,
            "minimum": 0,
            "maximum": 100,
            "description": "The percentage of negative posts."
          },
          "percentageNeutralPosts": {
            "type": "number",
            "format": "float",
            "nullable": true,
            "minimum": 0,
            "maximum": 100,
            "description": "The percentage of neutral posts."
          },
          "sentiment": {
            "type": "number",
            "format": "float",
            "nullable": true,
            "minimum": -1,
            "maximum": 1,
            "description": "The average sentiment of the posts. `-1` is highly negative, `0` is neutral and `+1` is highly positive."
          },
          "postsCount": {
            "$ref": "#/components/schemas/postsCountModel"
          },
          "startDate": {
            "description": "The lower bound date of data used to calculate the sentiment. It respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) format, UTC date-time without timezone.",
            "type": "string",
            "format": "date-time",
            "example": "1977-04-22T07:00:00.000Z"
          },
          "endDate": {
            "description": "The upper bound date of data used to calculate the sentiment. It respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) format, UTC date-time without timezone.",
            "type": "string",
            "format": "date-time",
            "example": "1977-04-22T07:00:00.000Z"
          }
        }
      },
      "Sentiments": {
        "title": "Sentiments",
        "type": "array",
        "description": "An array of `Sentiment` ressources.",
        "maxItems": 1000,
        "items": {
          "$ref": "#/components/schemas/Sentiment"
        }
      },
      "emailModel": {
        "title": "emailModel",
        "type": "string",
        "format": "email",
        "example": "support@exordelabs.com"
      },
      "Plan": {
        "title": "Plan",
        "type": "object",
        "description": "A `Plan` resource.",
        "required": [
          "name",
          "totalMonthlyCredits",
          "remainingMonthlyCredits"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The plan name."
          },
          "totalMonthlyCredits": {
            "type": "integer",
            "format": "int32",
            "description": "The total of credits allowed for the current month."
          },
          "remainingMonthlyCredits": {
            "type": "integer",
            "format": "int32",
            "description": "The total of credits remaining for the current month."
          },
          "maxAdditionalCredits": {
            "type": "integer",
            "format": "int32",
            "description": "The maximum of additional credits allowed for the current month."
          },
          "remainingAdditionalCredits": {
            "type": "integer",
            "format": "int32",
            "description": "The total of additional credits remaining for the current month."
          }
        }
      },
      "User": {
        "title": "User",
        "type": "object",
        "description": "A `User` resource.",
        "required": [
          "id",
          "createdAt",
          "updatedAt"
        ],
        "properties": {
          "id": {
            "description": "The user id",
            "allOf": [
              {
                "$ref": "#/components/schemas/uuidModel"
              }
            ]
          },
          "email": {
            "description": "The user email.",
            "allOf": [
              {
                "$ref": "#/components/schemas/emailModel"
              }
            ]
          },
          "plan": {
            "description": "The user subscription plan",
            "allOf": [
              {
                "$ref": "#/components/schemas/Plan"
              }
            ]
          },
          "createdAt": {
            "description": "The creation date of the user. It respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) format, UTC date-time without timezone.",
            "type": "string",
            "format": "date-time",
            "example": "1977-04-22T07:00:00.000Z"
          },
          "updatedAt": {
            "description": "The last date when the user was updated. It respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) format, UTC date-time without timezone.",
            "type": "string",
            "format": "date-time",
            "example": "1977-04-22T07:00:00.000Z"
          }
        }
      },
      "Volume": {
        "title": "Volume",
        "type": "object",
        "description": "The `Volume` for a query.",
        "required": [
          "postsCount",
          "startDate",
          "endDate"
        ],
        "properties": {
          "postsCount": {
            "$ref": "#/components/schemas/postsCountModel"
          },
          "startDate": {
            "description": "The lower bound date of data used to calculate the volume. It respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) format, UTC date-time without timezone.",
            "type": "string",
            "format": "date-time",
            "example": "1977-04-22T07:00:00.000Z"
          },
          "endDate": {
            "description": "The upper bound date of data used to calculate the volume. It respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) format, UTC date-time without timezone.",
            "type": "string",
            "format": "date-time",
            "example": "1977-04-22T07:00:00.000Z"
          }
        }
      },
      "Volumes": {
        "title": "Volumes",
        "type": "array",
        "description": "An array of `Volume` ressources.",
        "maxItems": 1000,
        "items": {
          "$ref": "#/components/schemas/Volume"
        }
      },
      "KeywordCount": {
        "title": "KeywordCount",
        "type": "object",
        "description": "A `KeywordCount` resource.",
        "properties": {
          "keyword": {
            "type": "object",
            "required": [
              "label",
              "count"
            ],
            "properties": {
              "label": {
                "type": "string",
                "description": "The keyword label."
              },
              "count": {
                "description": "The number of occurrences of this keyword.",
                "type": "integer",
                "format": "int32",
                "minimum": 0
              }
            }
          }
        }
      },
      "TrendingKeywords": {
        "title": "TrendingKeywords",
        "type": "object",
        "description": "The keywords with the most occurrences in the given period of time.",
        "required": [
          "keywords",
          "postsCount",
          "startDate",
          "endDate"
        ],
        "properties": {
          "keywords": {
            "type": "array",
            "description": "Keywords occurrences, sorted by descending frequency.",
            "items": {
              "$ref": "#/components/schemas/KeywordCount"
            },
            "maxItems": 100
          },
          "postsCount": {
            "$ref": "#/components/schemas/postsCountModel"
          },
          "startDate": {
            "description": "The lower bound date of data used to count the keywords. It respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) format, UTC date-time without timezone.",
            "type": "string",
            "format": "date-time",
            "example": "1977-04-22T07:00:00.000Z"
          },
          "endDate": {
            "description": "The upper bound date of data used to count the keywords. It respect [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) format, UTC date-time without timezone.",
            "type": "string",
            "format": "date-time",
            "example": "1977-04-22T07:00:00.000Z"
          }
        }
      }
    },
    "responses": {
      "400_BadRequest": {
        "description": "Bad Request",
        "content": {
          "application/json": {
            "schema": {
              "title": "Bad Request Error",
              "description": "Bad Request",
              "allOf": [
                {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              ]
            }
          }
        }
      },
      "429_TooManyRequests": {
        "description": "Too Many Requests",
        "content": {
          "application/json": {
            "schema": {
              "title": "Too Many Requests Error",
              "description": "Too Many Requests",
              "allOf": [
                {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              ]
            }
          }
        }
      },
      "500_InternalServerError": {
        "description": "Internal Server Error",
        "content": {
          "application/json": {
            "schema": {
              "title": "Internal Server Error",
              "description": "Internal Server Error",
              "type": "object",
              "properties": {
                "requestId": {
                  "type": "string",
                  "description": "The id of the request.",
                  "$ref": "#/components/schemas/uuidModel"
                }
              }
            }
          }
        }
      },
      "503_ServiceUnavailable": {
        "description": "Service Unavailable"
      },
      "401_Unauthorized": {
        "description": "Unauthorized",
        "content": {
          "application/json": {
            "schema": {
              "title": "Unauthorized Error",
              "description": "Unauthorized",
              "allOf": [
                {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              ]
            }
          }
        }
      },
      "403_Forbidden": {
        "description": "Forbidden",
        "content": {
          "application/json": {
            "schema": {
              "title": "Forbidden Error",
              "description": "Forbidden",
              "allOf": [
                {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              ]
            }
          }
        }
      },
      "404_NotFound": {
        "description": "Not Found",
        "content": {
          "application/json": {
            "schema": {
              "title": "Not Found Error",
              "description": "Not Found",
              "allOf": [
                {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              ]
            }
          }
        }
      }
    }
  }
}
