{"openapi": "3.1.0", "info": {"title": "World Watch API", "version": "1.9.2", "description": "\nWelcome to **World Watch**, a managed service from the Orange Cyberdefense CERT that keeps \nyou up to date with the latest cyber threats. You can use this webpage to **integrate \nour Cyber Threat Intelligence advisories** into your own applications and workflows. \n<br/>\n<br/>\nWe also provide **RSS feeds** to facilitate the integration into your applications. \nFree RSS feeds provide limited content, while **premium RSS feeds offer full \naccess** and allow filtering by tags.\nYou can find more information <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://github.com/cert-orangecyberdefense/world_watch/blob/main/RSS.md\">here</a>. \n"}, "paths": {"/api/auth/login/": {"post": {"operationId": "apilogin_login_c7ac125a", "summary": "Login using email and password", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TokenSchema"}}}}}, "description": "Authenticate a user using their email and password.\n\n\nIf a `LoginToken` already exists, it will be returned (and\nrefreshed if needed). Otherwise, a new `LoginToken` is generated.", "tags": ["Login"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/LoginSchema"}}}, "required": true}}}, "/api/users/activate/": {"post": {"operationId": "activate", "summary": "Active newly created account", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserSchema"}}}}}, "description": "Uses `EmailKey`\n\nActivate the newly created account by setting up its password.\nThis will **revoke** the `EmailKey` and `LoginToken` tokens.", "tags": ["Users"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SetUserPasswordSchema"}}}, "required": true}, "security": [{"EmailKeyAuthentication": []}]}}, "/api/users/change_password": {"post": {"operationId": "user_change_password_f1dee811", "summary": "Change logged in user password", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserSchema"}}}}}, "description": "Uses `LoginToken`\n\nChange current logged in user's password.\nThis will **revoke** the `EmailKey` and `LoginToken` tokens.", "tags": ["Users"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ChangeUserPasswordSchema"}}}, "required": true}, "security": [{"LoginTokenAuthentication": []}]}}, "/api/users/send_password_reset_request": {"post": {"operationId": "user_send_password_reset_request_ba1342eb", "summary": "Request password reset", "parameters": [], "responses": {"200": {"description": "OK"}}, "description": "Send the password reset email to the provided email address.\nThis will create a `EmailKey` to be used with the **Reset Password** endpoint.", "tags": ["Users"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EmailRequestSchema"}}}, "required": true}}}, "/api/users/reset_password": {"post": {"operationId": "reset_password", "summary": "Reset user password", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserSchema"}}}}}, "description": "Uses `EmailKey`\n\nReset the user's password. Usually used after receiving the reset password email.\nThis will **revoke** the `EmailKey` and `LoginToken` tokens.", "tags": ["Users"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SetUserPasswordSchema"}}}, "required": true}, "security": [{"EmailKeyAuthentication": []}, {"LoginTokenAuthentication": []}]}}, "/api/users/self": {"get": {"operationId": "user_get_self_data_cf6fd383", "summary": "Get current user data", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserSchema"}}}}}, "description": "Uses `LoginToken`\n\nReturn the data of the current authenticated user.", "tags": ["Users"], "security": [{"LoginTokenAuthentication": []}]}}, "/api/users/": {"get": {"operationId": "user_get_users_f80aa6b1", "summary": "List managed users", "parameters": [{"in": "query", "name": "limit", "schema": {"default": 30, "minimum": 1, "title": "Limit", "type": "integer"}, "required": false}, {"in": "query", "name": "offset", "schema": {"default": 0, "minimum": 0, "title": "Offset", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/NinjaPaginationResponseSchema_UserSchema_"}}}}}, "description": "Uses `LoginToken`\n\nOnly accessible to **Managers**: list all users managed by the authenticated user.", "tags": ["Users"], "security": [{"LoginTokenAuthentication": []}]}, "post": {"operationId": "user_create_user_97677e4a", "summary": "Create a new user", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserSchema"}}}}}, "description": "Uses `LoginToken`\n\nOnly accessible to **Managers**: Create a new user with manager set to\nthe authenticated user. The values of `active_until`, `company` and `department`\nare set to values of the manager.", "tags": ["Users"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateUserSchema"}}}, "required": true}, "security": [{"LoginTokenAuthentication": []}]}}, "/api/users/send_invitation": {"post": {"operationId": "user_send_invitation_email_9404b20f", "summary": "Send invitation email", "parameters": [], "responses": {"200": {"description": "OK"}}, "description": "Uses `LoginToken`\n\nOnly accessible to **Managers**: Send an invitation email to the given user\nwith a newly created `EmailKey`. This is to be used before the **Activate** endpoint.", "tags": ["Users"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EmailRequestSchema"}}}, "required": true}, "security": [{"LoginTokenAuthentication": []}]}}, "/api/users/{user_id}": {"get": {"operationId": "user_get_user_data_696c053b", "summary": "Get data of specified user", "parameters": [{"in": "path", "name": "user_id", "schema": {"title": "User Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserSchema"}}}}}, "description": "Uses `LoginToken`\n\nOnly accessible to **Managers**: Get the data of the specified user by its **ID**, only\nif the user is managed by the authenticated manager.", "tags": ["Users"], "security": [{"LoginTokenAuthentication": []}]}, "patch": {"operationId": "user_update_user_data_6f29c255", "summary": "Update data of specified user", "parameters": [{"in": "path", "name": "user_id", "schema": {"title": "User Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UserSchema"}}}}}, "description": "Uses `LoginToken`\n\nOnly accessible to **Managers**: Update the data of the specified user by its **ID**, only\nif the user is managed by the authenticated manager.", "tags": ["Users"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UpdateUserSchema"}}}, "required": true}, "security": [{"LoginTokenAuthentication": []}]}, "delete": {"operationId": "user_delete_user_3cf9db22", "summary": "Delete user", "parameters": [{"in": "path", "name": "user_id", "schema": {"title": "User Id", "type": "integer"}, "required": true}], "responses": {"204": {"description": "No Content"}}, "description": "Uses `LoginToken`\n\nOnly accessible to **Managers**: Delete the user specified by its **ID**, only\nif the user is managed by the authenticated manager.", "tags": ["Users"], "security": [{"LoginTokenAuthentication": []}]}}, "/api/api_keys/": {"get": {"operationId": "apikeys_get_own_keys_2b670f93", "summary": "Get all keys", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/TokenSchema"}, "title": "Response", "type": "array"}}}}}, "description": "Uses `LoginToken`\n\nList all the **API** and **RSS** keys of the user.", "tags": ["API Keys"], "security": [{"LoginTokenAuthentication": []}]}, "post": {"operationId": "create_key", "summary": "Create a new key", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TokenSchema"}}}}}, "description": "Uses `LoginToken`\n\nCreate a new **API** or **RSS** key. By default, the expiration is set to the user's\nexpiration date if it is less than one year, otherwise the key expires in one year.", "tags": ["API Keys"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateAPIKeySchema"}}}, "required": true}, "security": [{"LoginTokenAuthentication": []}]}}, "/api/api_keys/user/{user_id}": {"get": {"operationId": "apikeys_get_users_keys_b53dc89e", "summary": "Get all keys of a different user", "parameters": [{"in": "path", "name": "user_id", "schema": {"title": "User Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/TokenSchema"}, "title": "Response", "type": "array"}}}}}, "description": "Uses `LoginToken`\n\nOnly accessible to **Managers**: get all the keys for the specified user\nif the user is managed by the authenticated manager.", "tags": ["API Keys"], "security": [{"LoginTokenAuthentication": []}]}}, "/api/api_keys/{token_id}": {"patch": {"operationId": "apikeys_update_expiration_date_6f54edb6", "summary": "Update the expiration date of a key", "parameters": [{"in": "path", "name": "token_id", "schema": {"title": "Token Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TokenSchema"}}}}}, "description": "Uses `LoginToken`\n\nUpdate the expiration date for a given key using its **ID**. A **manager** can\nupdate the expiration dates of the keys of its users.", "tags": ["API Keys"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UpdateTokenExpirationSchema"}}}, "required": true}, "security": [{"LoginTokenAuthentication": []}]}}, "/api/api_keys/{token_id}/revoke": {"patch": {"operationId": "apikeys_revoke_key_842f6b93", "summary": "Revoke a key", "parameters": [{"in": "path", "name": "token_id", "schema": {"title": "Token Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TokenSchema"}}}}}, "description": "Uses `LoginToken`\n\nRevoke the key using its **ID**. A **manager** can revoke the keys of its users'.", "tags": ["API Keys"], "security": [{"LoginTokenAuthentication": []}]}}, "/api/advisory/": {"get": {"operationId": "list_advisories", "summary": "List all advisories", "parameters": [{"in": "query", "name": "id", "schema": {"q": "id", "title": "Id", "type": "integer"}, "required": false}, {"in": "query", "name": "title", "schema": {"q": "title__icontains", "title": "Title", "type": "string"}, "required": false}, {"in": "query", "name": "tdc_id", "schema": {"title": "Tdc Id", "type": "integer"}, "required": false}, {"in": "query", "name": "content", "schema": {"q": ["content_blocks__executive_summary__icontains", "content_blocks__what_you_will_hear__icontains", "content_blocks__what_it_means__icontains", "content_blocks__what_you_should_do__icontains", "content_blocks__what_we_are_doing__icontains", "content_blocks__other__icontains"], "title": "Content", "type": "string"}, "required": false}, {"in": "query", "name": "severity", "schema": {"description": "Can take a **comma seperated** list severity integers", "title": "Severity", "type": "string"}, "required": false, "description": "Can take a **comma seperated** list severity integers"}, {"in": "query", "name": "categories", "schema": {"description": "Can take a **comma seperated** list of categories. Will return all advisories that have at least one content block with this category", "title": "Categories", "type": "string"}, "required": false, "description": "Can take a **comma seperated** list of categories. Will return all advisories that have at least one content block with this category"}, {"in": "query", "name": "tags", "schema": {"description": "Can take a **comma seperated** list of tags. Will also return advisories whose content blocks have the tags", "title": "Tags", "type": "string"}, "required": false, "description": "Can take a **comma seperated** list of tags. Will also return advisories whose content blocks have the tags"}, {"in": "query", "name": "sources", "schema": {"description": "Can take a **comma separated** list of sources (title, URL, or description)", "title": "Sources", "type": "string"}, "required": false, "description": "Can take a **comma separated** list of sources (title, URL, or description)"}, {"in": "query", "name": "datalake_urls", "schema": {"description": "Can take a **comma separated** list of Datalake URLs (title, URL, or description)", "title": "Datalake Urls", "type": "string"}, "required": false, "description": "Can take a **comma separated** list of Datalake URLs (title, URL, or description)"}, {"in": "query", "name": "created_before", "schema": {"format": "date-time", "title": "Created Before", "type": "string"}, "required": false}, {"in": "query", "name": "created_after", "schema": {"format": "date-time", "title": "Created After", "type": "string"}, "required": false}, {"in": "query", "name": "updated_before", "schema": {"format": "date-time", "title": "Updated Before", "type": "string"}, "required": false}, {"in": "query", "name": "updated_after", "schema": {"format": "date-time", "title": "Updated After", "type": "string"}, "required": false}, {"in": "query", "name": "sort_by", "schema": {"allOf": [{"enum": ["id", "tdc_id", "title", "timestamp_created", "timestamp_updated", "severity"], "title": "SortBy", "type": "string"}], "default": "timestamp_updated"}, "required": false}, {"in": "query", "name": "sort_order", "schema": {"allOf": [{"enum": ["asc", "desc"], "title": "SortOrder", "type": "string"}], "default": "desc"}, "required": false}, {"in": "query", "name": "limit", "schema": {"default": 30, "minimum": 1, "title": "Limit", "type": "integer"}, "required": false}, {"in": "query", "name": "offset", "schema": {"default": 0, "minimum": 0, "title": "Offset", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/NinjaPaginationResponseSchema_AdvisorySchema_"}}}}}, "description": "Uses `ApiKey`\n\nList all **Advisories**.\n\nEach **Advisory** can have its own `tags` and `severity`.\n\nAn **Advisory** does not have a `category`, it inherits all the categories from its associated\n**Content Blocks**.\n---\nThe fields `tags`, `categories`, and `severity` support multiple values, seperated by commas.\n\nSearching by `tags` will return all **Advisories** that have the `tags` and all\n**Advisories** that have an associated **Content Block** that has the `tags`.\n\nSearching by `categories` will return all **Advisories** that have at least one\n**Content Block** that has the `categories`.\n\nBy default, the results are sorted by `updated_at` in **descending order**.", "tags": ["Advisory"], "security": [{"APIKeyAuthentication": []}]}}, "/api/advisory/{advisory_id}": {"get": {"operationId": "get_advisory", "summary": "Get a singular advisory with all its content blocks", "parameters": [{"in": "path", "name": "advisory_id", "schema": {"title": "Advisory Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AdvisoryWithContentSchema"}}}}}, "description": "Uses `ApiKey`\n\nGet a single **Advisory** using its `id`.\nThis will also return a list of **Content Blocks** with their **HTML** content.", "tags": ["Advisory"], "security": [{"APIKeyAuthentication": []}]}}, "/api/advisory/{advisory_id}/html": {"get": {"operationId": "advisory_get_advisory_as_html_ba027756", "summary": "Get an advisory as HTML formatted", "parameters": [{"in": "path", "name": "advisory_id", "schema": {"title": "Advisory Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AdvisoryHtmlSchema"}}}}}, "description": "Uses `ApiKey`\n\nGet a single **Advisory** as **HTML** formatted content, containing all of\nits **Content Blocks** with all the relevant information.\n\nThis is a helper endpoint to easily display an **Advisory**.", "tags": ["Advisory"], "security": [{"APIKeyAuthentication": []}]}}, "/api/advisory/{advisory_id}/html/minimized": {"get": {"operationId": "advisory_get_advisory_as_html_minimized_c37fa353", "summary": "Get an advisory as HTML formatted but minimized", "parameters": [{"in": "path", "name": "advisory_id", "schema": {"title": "Advisory Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AdvisoryHtmlSchema"}}}}}, "description": "Uses `ApiKey`\n\nGet a single **Advisory** as **HTML** formatted content, containing all of\nits **Content Blocks** with all the relevant information.\n\nIf there are more than  5 **Content Blocks** (4 updates + 1 initial), the HTML\nwill display the latest 3 updates and the initial advisory.\n\nThis is a helper endpoint to easily display an **Advisory**.", "tags": ["Advisory"], "security": [{"APIKeyAuthentication": []}]}}, "/api/advisory/{advisory_id}/markdown": {"get": {"operationId": "advisory_get_advisory_as_markdown_d5abf7c5", "summary": "Get an advisory as Markdown formatted", "parameters": [{"in": "path", "name": "advisory_id", "schema": {"title": "Advisory Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AdvisoryMarkdownSchema"}}}}}, "description": "Uses `ApiKey`\n\nGet a single **Advisory** as **Markdown** formatted content, containing all of\nits **Content Blocks** with all the relevant information.\n\nThis is a helper endpoint to easily display an **Advisory**.", "tags": ["Advisory"], "security": [{"APIKeyAuthentication": []}]}}, "/api/advisory/{advisory_id}/markdown/minimized": {"get": {"operationId": "advisory_get_advisory_as_markdown_minimized_19454c53", "summary": "Get an advisory as Markdown formatted but minimized", "parameters": [{"in": "path", "name": "advisory_id", "schema": {"title": "Advisory Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AdvisoryMarkdownSchema"}}}}}, "description": "Uses `ApiKey`\n\nGet a single **Advisory** as **Markdown** formatted content, containing all of\nits **Content Blocks** with all the relevant information.\n\nIf there are more than  5 **Content Blocks** (4 updates + 1 initial), the Markdown\nwill display the latest 3 updates and the initial advisory.\n\nThis is a helper endpoint to easily display an **Advisory**.", "tags": ["Advisory"], "security": [{"APIKeyAuthentication": []}]}}, "/api/content_block/": {"get": {"operationId": "list_content_blocks", "summary": "List all content blocks without their content", "parameters": [{"in": "query", "name": "id", "schema": {"q": "id", "title": "Id", "type": "integer"}, "required": false}, {"in": "query", "name": "title", "schema": {"q": "title__icontains", "title": "Title", "type": "string"}, "required": false}, {"in": "query", "name": "advisory_id", "schema": {"title": "Advisory Id", "type": "integer"}, "required": false}, {"in": "query", "name": "severity", "schema": {"description": "Can take a **comma seperated** list of integers", "title": "Severity", "type": "string"}, "required": false, "description": "Can take a **comma seperated** list of integers"}, {"in": "query", "name": "categories", "schema": {"description": "Can take a **comma seperated** list of categories", "title": "Categories", "type": "string"}, "required": false, "description": "Can take a **comma seperated** list of categories"}, {"in": "query", "name": "tags", "schema": {"description": "Can take a **comma seperated** list of tags", "title": "Tags", "type": "string"}, "required": false, "description": "Can take a **comma seperated** list of tags"}, {"in": "query", "name": "content", "schema": {"q": ["executive_summary__icontains", "what_you_will_hear__icontains", "what_it_means__icontains", "what_you_should_do__icontains", "what_we_are_doing__icontains", "other__icontains"], "title": "Content", "type": "string"}, "required": false}, {"in": "query", "name": "sources", "schema": {"description": "Can take a **comma separated** list of sources (title, URL, or description)", "title": "Sources", "type": "string"}, "required": false, "description": "Can take a **comma separated** list of sources (title, URL, or description)"}, {"in": "query", "name": "datalake_urls", "schema": {"description": "Can take a **comma separated** list of Datalake URLs (title, URL, or description)", "title": "Datalake Urls", "type": "string"}, "required": false, "description": "Can take a **comma separated** list of Datalake URLs (title, URL, or description)"}, {"in": "query", "name": "detection_rules", "schema": {"q": ["detection_rules__title__icontains", "detection_rules__content__icontains"], "title": "Detection Rules", "type": "string"}, "required": false}, {"in": "query", "name": "datalake_url", "schema": {"deprecated": true, "q": ["datalake_url__title__icontains", "datalake_url__url__icontains"], "title": "Datalake Url", "type": "string"}, "required": false, "deprecated": true}, {"in": "query", "name": "created_before", "schema": {"format": "date-time", "title": "Created Before", "type": "string"}, "required": false}, {"in": "query", "name": "created_after", "schema": {"format": "date-time", "title": "Created After", "type": "string"}, "required": false}, {"in": "query", "name": "updated_before", "schema": {"format": "date-time", "title": "Updated Before", "type": "string"}, "required": false}, {"in": "query", "name": "updated_after", "schema": {"format": "date-time", "title": "Updated After", "type": "string"}, "required": false}, {"in": "query", "name": "sort_by", "schema": {"allOf": [{"enum": ["id", "title", "timestamp_created", "timestamp_updated", "severity"], "title": "SortBy", "type": "string"}], "default": "timestamp_updated"}, "required": false}, {"in": "query", "name": "sort_order", "schema": {"allOf": [{"enum": ["asc", "desc"], "title": "SortOrder", "type": "string"}], "default": "desc"}, "required": false}, {"in": "query", "name": "limit", "schema": {"default": 30, "minimum": 1, "title": "Limit", "type": "integer"}, "required": false}, {"in": "query", "name": "offset", "schema": {"default": 0, "minimum": 0, "title": "Offset", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/NinjaPaginationResponseSchema_ContentBlockMinimizedSchema_"}}}}}, "description": "Uses `ApiKey`\n\nList all the content blocks without their **HTML** content.\n\nThe fields `tags`, `categories`, and `severity` support multiple values, seperated by commas.\n\nBy default, the results are sorted by `updated_at` in **descending order**.\n\nThe `advisory_tags` field in the response corresponds to the **tags of the parent advisory**.", "tags": ["Content Block"], "security": [{"APIKeyAuthentication": []}]}}, "/api/content_block/complete": {"get": {"operationId": "contentblock_list_content_block_with_complete_data_8ae9cf01", "summary": "List all content blocks with all of their data", "parameters": [{"in": "query", "name": "id", "schema": {"q": "id", "title": "Id", "type": "integer"}, "required": false}, {"in": "query", "name": "title", "schema": {"q": "title__icontains", "title": "Title", "type": "string"}, "required": false}, {"in": "query", "name": "advisory_id", "schema": {"title": "Advisory Id", "type": "integer"}, "required": false}, {"in": "query", "name": "severity", "schema": {"description": "Can take a **comma seperated** list of integers", "title": "Severity", "type": "string"}, "required": false, "description": "Can take a **comma seperated** list of integers"}, {"in": "query", "name": "categories", "schema": {"description": "Can take a **comma seperated** list of categories", "title": "Categories", "type": "string"}, "required": false, "description": "Can take a **comma seperated** list of categories"}, {"in": "query", "name": "tags", "schema": {"description": "Can take a **comma seperated** list of tags", "title": "Tags", "type": "string"}, "required": false, "description": "Can take a **comma seperated** list of tags"}, {"in": "query", "name": "content", "schema": {"q": ["executive_summary__icontains", "what_you_will_hear__icontains", "what_it_means__icontains", "what_you_should_do__icontains", "what_we_are_doing__icontains", "other__icontains"], "title": "Content", "type": "string"}, "required": false}, {"in": "query", "name": "sources", "schema": {"description": "Can take a **comma separated** list of sources (title, URL, or description)", "title": "Sources", "type": "string"}, "required": false, "description": "Can take a **comma separated** list of sources (title, URL, or description)"}, {"in": "query", "name": "datalake_urls", "schema": {"description": "Can take a **comma separated** list of Datalake URLs (title, URL, or description)", "title": "Datalake Urls", "type": "string"}, "required": false, "description": "Can take a **comma separated** list of Datalake URLs (title, URL, or description)"}, {"in": "query", "name": "detection_rules", "schema": {"q": ["detection_rules__title__icontains", "detection_rules__content__icontains"], "title": "Detection Rules", "type": "string"}, "required": false}, {"in": "query", "name": "datalake_url", "schema": {"deprecated": true, "q": ["datalake_url__title__icontains", "datalake_url__url__icontains"], "title": "Datalake Url", "type": "string"}, "required": false, "deprecated": true}, {"in": "query", "name": "created_before", "schema": {"format": "date-time", "title": "Created Before", "type": "string"}, "required": false}, {"in": "query", "name": "created_after", "schema": {"format": "date-time", "title": "Created After", "type": "string"}, "required": false}, {"in": "query", "name": "updated_before", "schema": {"format": "date-time", "title": "Updated Before", "type": "string"}, "required": false}, {"in": "query", "name": "updated_after", "schema": {"format": "date-time", "title": "Updated After", "type": "string"}, "required": false}, {"in": "query", "name": "sort_by", "schema": {"allOf": [{"enum": ["id", "title", "timestamp_created", "timestamp_updated", "severity"], "title": "SortBy", "type": "string"}], "default": "timestamp_updated"}, "required": false}, {"in": "query", "name": "sort_order", "schema": {"allOf": [{"enum": ["asc", "desc"], "title": "SortOrder", "type": "string"}], "default": "desc"}, "required": false}, {"in": "query", "name": "limit", "schema": {"default": 30, "minimum": 1, "title": "Limit", "type": "integer"}, "required": false}, {"in": "query", "name": "offset", "schema": {"default": 0, "minimum": 0, "title": "Offset", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/NinjaPaginationResponseSchema_ContentBlockSchema_"}}}}}, "description": "Uses `ApiKey`\n\nList all the content blocks with all of their corresponding data.\n\nSimilar to **List all content blocks** endpoint, but additionally returns the\n**HTML** content of the fields `executive_summary`, `what_you_will_hear`,\n`what_it_means`, `what_you_should_do`, `what_we_are_doing`, and `other`.", "tags": ["Content Block"], "security": [{"APIKeyAuthentication": []}]}}, "/api/content_block/{content_block_id}": {"get": {"operationId": "get_content_block", "summary": "Get a single content block with all its data", "parameters": [{"in": "path", "name": "content_block_id", "schema": {"title": "Content Block Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ContentBlockSchema"}}}}}, "description": "Uses `ApiKey`\n\nGet all the fields, including the `executive_summary`, `what_you_will_hear`,\n`what_it_means`, `what_you_should_do`, `what_we_are_doing`, and `other`,\nof a single **Content Block** using its `id`.", "tags": ["Content Block"], "security": [{"APIKeyAuthentication": []}]}}, "/api/content_block/{content_block_id}/minimized": {"get": {"operationId": "contentblock_get_content_block_with_minimized_data_95dd4a03", "summary": "Get single content block without its content", "parameters": [{"in": "path", "name": "content_block_id", "schema": {"title": "Content Block Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ContentBlockMinimizedSchema"}}}}}, "description": "Uses `ApiKey`\n\nGet a single **Content Block** using its `id` without the **HTML** content.", "tags": ["Content Block"], "security": [{"APIKeyAuthentication": []}]}}, "/api/content_block/{content_block_id}/html": {"get": {"operationId": "contentblock_get_content_block_as_html_eb4da45e", "summary": "Get a content block as HTML formatted", "parameters": [{"in": "path", "name": "content_block_id", "schema": {"title": "Content Block Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ContentBlockHtmlSchema"}}}}}, "description": "Uses `ApiKey`\n\nGet a single **Content Block** as **HTML** formatted content, containing all\nthe relevant information.\n\nThis is a helper endpoint to easily display a **Content Block**.", "tags": ["Content Block"], "security": [{"APIKeyAuthentication": []}]}}, "/api/content_block/{content_block_id}/markdown": {"get": {"operationId": "contentblock_get_content_block_as_markdown_c9c462e4", "summary": "Get a content block as Markdown formatted", "parameters": [{"in": "path", "name": "content_block_id", "schema": {"title": "Content Block Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ContentBlockMarkdownSchema"}}}}}, "description": "Uses `ApiKey`\n\nGet a single **Content Block** as **Markdown** formatted content, containing all\nthe relevant information.\n\nThis is a helper endpoint to easily display a **Content Block**.", "tags": ["Content Block"], "security": [{"APIKeyAuthentication": []}]}}, "/api/detection_rule/": {"get": {"operationId": "detectionrule_list_detection_rules_62a0601f", "summary": "List all detection rules", "parameters": [{"in": "query", "name": "title", "schema": {"q": "title__icontains", "title": "Title", "type": "string"}, "required": false}, {"in": "query", "name": "content", "schema": {"q": "content__icontains", "title": "Content", "type": "string"}, "required": false}, {"in": "query", "name": "limit", "schema": {"default": 30, "minimum": 1, "title": "Limit", "type": "integer"}, "required": false}, {"in": "query", "name": "offset", "schema": {"default": 0, "minimum": 0, "title": "Offset", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/NinjaPaginationResponseSchema_DetectionRuleSchema_"}}}}}, "description": "Uses `APIKey`\n\nList all the detection rules regardless of which **Advisory** or **Content Block**\nthey are associated to", "tags": ["Detection Rule"], "security": [{"APIKeyAuthentication": []}]}}, "/api/detection_rule/{detection_rule_id}": {"get": {"operationId": "detectionrule_get_detection_rule_612cc483", "summary": "Get detection rule data", "parameters": [{"in": "path", "name": "detection_rule_id", "schema": {"title": "Detection Rule Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DetectionRuleWithContentSchema"}}}}}, "description": "Uses `APIKey`\n\nGet all the data regarding the detection rule, including to which **Advisory** and\n**Content Block** it is associated.", "tags": ["Detection Rule"], "security": [{"APIKeyAuthentication": []}]}}, "/api/source/": {"get": {"operationId": "source_list_sources_b80b9473", "summary": "List all sources", "parameters": [{"in": "query", "name": "title", "schema": {"q": "title__icontains", "title": "Title", "type": "string"}, "required": false}, {"in": "query", "name": "url", "schema": {"q": "url__icontains", "title": "Url", "type": "string"}, "required": false}, {"in": "query", "name": "type", "schema": {"allOf": [{"enum": ["external", "internal"], "title": "Type", "type": "string"}]}, "required": false}, {"in": "query", "name": "description", "schema": {"description": "Can take a **comma separated** list of values to search in the description", "title": "Description", "type": "string"}, "required": false, "description": "Can take a **comma separated** list of values to search in the description"}, {"in": "query", "name": "limit", "schema": {"default": 30, "minimum": 1, "title": "Limit", "type": "integer"}, "required": false}, {"in": "query", "name": "offset", "schema": {"default": 0, "minimum": 0, "title": "Offset", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/NinjaPaginationResponseSchema_SourceSchema_"}}}}}, "description": "Uses `APIKey`\n\nList all the sources regardless of which **Advisory** or **Content Block**\nthey are associated to", "tags": ["Source"], "security": [{"APIKeyAuthentication": []}]}}, "/api/source/{source_id}": {"get": {"operationId": "source_get_source_f5a21207", "summary": "Get source data", "parameters": [{"in": "path", "name": "source_id", "schema": {"title": "Source Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/SourceWithContentSchema"}}}}}, "description": "Uses `APIKey`\n\nGet all the data regarding the source, including to which **Advisory** and\n**Content Block** it is associated.", "tags": ["Source"], "security": [{"APIKeyAuthentication": []}]}}, "/api/datalake_url/": {"get": {"operationId": "datalakeurl_list_datalake_urls_b0c2e718", "summary": "List all Datalake urls", "parameters": [{"in": "query", "name": "title", "schema": {"q": "title__icontains", "title": "Title", "type": "string"}, "required": false}, {"in": "query", "name": "url", "schema": {"q": "url__icontains", "title": "Url", "type": "string"}, "required": false}, {"in": "query", "name": "description", "schema": {"description": "Can take a **comma separated** list of values to search in the description", "title": "Description", "type": "string"}, "required": false, "description": "Can take a **comma separated** list of values to search in the description"}, {"in": "query", "name": "limit", "schema": {"default": 30, "minimum": 1, "title": "Limit", "type": "integer"}, "required": false}, {"in": "query", "name": "offset", "schema": {"default": 0, "minimum": 0, "title": "Offset", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/NinjaPaginationResponseSchema_DatalakeUrlSchema_"}}}}}, "description": "Uses `APIKey`\n\nList all the Datalake Urls regardless of which **Advisory** or **Content Block**\nthey are associated to", "tags": ["Datalake Url"], "security": [{"APIKeyAuthentication": []}]}}, "/api/datalake_url/{datalake_url_id}": {"get": {"operationId": "datalakeurl_get_datalake_url_4d893d05", "summary": "Get Datalake url data", "parameters": [{"in": "path", "name": "datalake_url_id", "schema": {"title": "Datalake Url Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DatalakeUrlWithContentSchema"}}}}}, "description": "Uses `APIKey`\n\nGet all the data regarding the Datalake url, including to which **Advisory** and\n**Content Block** it is associated.", "tags": ["Datalake Url"], "security": [{"APIKeyAuthentication": []}]}}, "/api/tags/": {"get": {"operationId": "list_tags", "summary": "List and filter all tags", "parameters": [{"in": "query", "name": "name", "schema": {"q": "name__istartswith", "title": "Name", "type": "string"}, "required": false}, {"in": "query", "name": "limit", "schema": {"default": 30, "minimum": 1, "title": "Limit", "type": "integer"}, "required": false}, {"in": "query", "name": "offset", "schema": {"default": 0, "minimum": 0, "title": "Offset", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/NinjaPaginationResponseSchema_TagSchema_"}}}}}, "description": "Uses `APIKey`\n\nList all tags in alphabetical order. Using the `name` field will return\ntags that **start with** the provided string.", "tags": ["Tags"], "security": [{"APIKeyAuthentication": []}]}}, "/api/tags/{tag_name}": {"get": {"operationId": "tags_get_tag_aec5567b", "summary": "Get single tag data", "parameters": [{"in": "path", "name": "tag_name", "schema": {"title": "Tag Name", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TagWithDataSchema"}}}}}, "description": "Uses `APIKey`\n\nGet all the **content blocks** and **advisories** that match the given `tag_name`.\n\nThis will also return **advisories** that have at least one **Content Block** that has\nthe requested `tag_name`.", "tags": ["Tags"], "security": [{"APIKeyAuthentication": []}]}}, "/api/categories/": {"get": {"operationId": "categories_list_categories_0cab5cd1", "summary": "List all categories", "parameters": [{"in": "query", "name": "limit", "schema": {"default": 30, "minimum": 1, "title": "Limit", "type": "integer"}, "required": false}, {"in": "query", "name": "offset", "schema": {"default": 0, "minimum": 0, "title": "Offset", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/NinjaPaginationResponseSchema_CategorySchema_"}}}}}, "description": "Uses `APIKey`\n\nList all the categories.", "tags": ["Categories"], "security": [{"APIKeyAuthentication": []}]}}, "/api/categories/{category_name}": {"get": {"operationId": "categories_get_category_d6f9acec", "summary": "Get category data", "parameters": [{"in": "path", "name": "category_name", "schema": {"title": "Category Name", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CategoryWithDataSchema"}}}}}, "description": "Uses `APIKey`\n\nList all the **advisories** and **content blocks** that match the given `category_name`.", "tags": ["Categories"], "security": [{"APIKeyAuthentication": []}]}}}, "components": {"schemas": {"TokenSchema": {"properties": {"id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "type": {"maxLength": 14, "title": "Type", "type": "string"}, "name": {"anyOf": [{"maxLength": 64, "type": "string"}, {"type": "null"}], "title": "Name"}, "key": {"maxLength": 64, "title": "Key", "type": "string"}, "expiration": {"description": "Token expiration date", "format": "date-time", "title": "Expiration", "type": "string"}, "revoked": {"default": false, "description": "Token status", "title": "Revoked", "type": "boolean"}}, "required": ["type"], "title": "TokenSchema", "type": "object"}, "LoginSchema": {"properties": {"email": {"title": "Email", "type": "string"}, "password": {"title": "Password", "type": "string"}}, "required": ["email", "password"], "title": "LoginSchema", "type": "object"}, "UserSchema": {"properties": {"id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "last_login": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Last Login"}, "username": {"description": "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", "maxLength": 150, "title": "Username", "type": "string"}, "is_active": {"default": true, "description": "Designates whether this user should be treated as active. Unselect this instead of deleting accounts.", "title": "Active", "type": "boolean"}, "date_joined": {"format": "date-time", "title": "Date Joined", "type": "string"}, "email": {"description": "Email used to login authentication", "maxLength": 100, "title": "Email", "type": "string"}, "first_name": {"maxLength": 50, "title": "First Name", "type": "string"}, "last_name": {"maxLength": 50, "title": "Last Name", "type": "string"}, "password_attempt_count": {"default": 0, "title": "Password Attempt Count", "type": "integer"}, "phone_number": {"anyOf": [{"maxLength": 16, "type": "string"}, {"type": "null"}], "title": "Phone Number"}, "manager": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "Manager that can access users data", "title": "Manager"}, "company": {"anyOf": [{"maxLength": 100, "type": "string"}, {"type": "null"}], "title": "Company"}, "department": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Department"}, "country": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Country"}, "verified": {"default": false, "description": "Status of account email verification", "title": "Verified", "type": "boolean"}, "active_until": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "description": "User account expiration", "title": "Active Until"}, "role": {"default": "user", "maxLength": 16, "title": "Role", "type": "string"}}, "required": ["username", "email", "first_name", "last_name"], "title": "UserSchema", "type": "object"}, "SetUserPasswordSchema": {"properties": {"password": {"title": "Password", "type": "string"}, "password_confirmation": {"title": "Password Confirmation", "type": "string"}}, "required": ["password", "password_confirmation"], "title": "SetUserPasswordSchema", "type": "object"}, "ChangeUserPasswordSchema": {"properties": {"old_password": {"title": "Old Password", "type": "string"}, "new_password": {"title": "New Password", "type": "string"}, "new_password_confirmation": {"title": "New Password Confirmation", "type": "string"}}, "required": ["old_password", "new_password", "new_password_confirmation"], "title": "ChangeUserPasswordSchema", "type": "object"}, "EmailRequestSchema": {"properties": {"email": {"title": "Email", "type": "string"}}, "required": ["email"], "title": "EmailRequestSchema", "type": "object"}, "Input": {"properties": {"limit": {"default": 30, "minimum": 1, "title": "Limit", "type": "integer"}, "offset": {"default": 0, "minimum": 0, "title": "Offset", "type": "integer"}}, "title": "Input", "type": "object"}, "NinjaPaginationResponseSchema_UserSchema_": {"properties": {"count": {"title": "Count", "type": "integer"}, "items": {"items": {"$ref": "#/components/schemas/UserSchema"}, "title": "Items", "type": "array"}}, "required": ["count", "items"], "title": "NinjaPaginationResponseSchema[UserSchema]", "type": "object"}, "CreateUserSchema": {"properties": {"email": {"format": "email", "title": "Email", "type": "string"}, "first_name": {"title": "First Name", "type": "string"}, "last_name": {"title": "Last Name", "type": "string"}, "username": {"title": "Username", "type": "string"}}, "required": ["email", "first_name", "last_name"], "title": "CreateUserSchema", "type": "object"}, "UpdateUserSchema": {"properties": {"first_name": {"title": "First Name", "type": "string"}, "last_name": {"title": "Last Name", "type": "string"}, "phone_number": {"title": "Phone Number", "type": "string"}, "manager": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Manager"}, "department": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Department"}, "country": {"anyOf": [{"maxLength": 50, "type": "string"}, {"type": "null"}], "title": "Country"}, "active_until": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "description": "User account expiration", "title": "Active Until"}}, "title": "UpdateUserSchema", "type": "object"}, "CreateAPIKeySchema": {"properties": {"type": {"default": "api_key", "enum": ["api_key", "rss_key"], "title": "Type", "type": "string"}, "expiration": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Expiration"}, "name": {"anyOf": [{"maxLength": 64, "type": "string"}, {"type": "null"}], "title": "Name"}}, "title": "CreateAPIKeySchema", "type": "object"}, "UpdateTokenExpirationSchema": {"properties": {"expiration": {"description": "Token expiration date", "format": "date-time", "title": "Expiration", "type": "string"}}, "title": "UpdateTokenExpirationSchema", "type": "object"}, "AdvisoryFilterSchema": {"properties": {"id": {"q": "id", "title": "Id", "type": "integer"}, "title": {"q": "title__icontains", "title": "Title", "type": "string"}, "tdc_id": {"title": "Tdc Id", "type": "integer"}, "content": {"q": ["content_blocks__executive_summary__icontains", "content_blocks__what_you_will_hear__icontains", "content_blocks__what_it_means__icontains", "content_blocks__what_you_should_do__icontains", "content_blocks__what_we_are_doing__icontains", "content_blocks__other__icontains"], "title": "Content", "type": "string"}, "severity": {"description": "Can take a **comma seperated** list severity integers", "title": "Severity", "type": "string"}, "categories": {"description": "Can take a **comma seperated** list of categories. Will return all advisories that have at least one content block with this category", "title": "Categories", "type": "string"}, "tags": {"description": "Can take a **comma seperated** list of tags. Will also return advisories whose content blocks have the tags", "title": "Tags", "type": "string"}, "sources": {"description": "Can take a **comma separated** list of sources (title, URL, or description)", "title": "Sources", "type": "string"}, "datalake_urls": {"description": "Can take a **comma separated** list of Datalake URLs (title, URL, or description)", "title": "Datalake Urls", "type": "string"}, "created_before": {"format": "date-time", "title": "Created Before", "type": "string"}, "created_after": {"format": "date-time", "title": "Created After", "type": "string"}, "updated_before": {"format": "date-time", "title": "Updated Before", "type": "string"}, "updated_after": {"format": "date-time", "title": "Updated After", "type": "string"}, "sort_by": {"allOf": [{"enum": ["id", "tdc_id", "title", "timestamp_created", "timestamp_updated", "severity"], "title": "SortBy", "type": "string"}], "default": "timestamp_updated"}, "sort_order": {"allOf": [{"enum": ["asc", "desc"], "title": "SortOrder", "type": "string"}], "default": "desc"}}, "title": "AdvisoryFilterSchema", "type": "object"}, "SortBy": {"enum": ["id", "title", "timestamp_created", "timestamp_updated", "severity"], "title": "SortBy", "type": "string"}, "SortOrder": {"enum": ["asc", "desc"], "title": "SortOrder", "type": "string"}, "AdvisorySchema": {"properties": {"id": {"title": "Id", "type": "integer"}, "tdc_id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Tdc Id"}, "title": {"maxLength": 200, "title": "Title", "type": "string"}, "severity": {"maximum": 5, "minimum": 0, "title": "Severity", "type": "integer"}, "categories": {"items": {"maxLength": 50, "type": "string"}, "title": "Categories", "type": "array"}, "tags": {"items": {"maxLength": 100, "type": "string"}, "title": "Tags", "type": "array"}, "timestamp_created": {"format": "date-time", "title": "Timestamp Created", "type": "string"}, "timestamp_updated": {"format": "date-time", "title": "Timestamp Updated", "type": "string"}, "license_agreement": {"default": "This advisory has been prepared and is the property of Orange Cyberdefense.             Please don't redistribute this content without our agreement.", "maxLength": 2048, "title": "License Agreement", "type": "string"}}, "required": ["id", "tdc_id", "title", "severity", "categories", "tags", "timestamp_created", "timestamp_updated"], "title": "AdvisorySchema", "type": "object"}, "NinjaPaginationResponseSchema_AdvisorySchema_": {"properties": {"count": {"title": "Count", "type": "integer"}, "items": {"items": {"$ref": "#/components/schemas/AdvisorySchema"}, "title": "Items", "type": "array"}}, "required": ["count", "items"], "title": "NinjaPaginationResponseSchema[AdvisorySchema]", "type": "object"}, "AdvisoryWithContentSchema": {"properties": {"id": {"title": "Id", "type": "integer"}, "tdc_id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Tdc Id"}, "title": {"maxLength": 200, "title": "Title", "type": "string"}, "severity": {"maximum": 5, "minimum": 0, "title": "Severity", "type": "integer"}, "categories": {"items": {"maxLength": 50, "type": "string"}, "title": "Categories", "type": "array"}, "tags": {"items": {"maxLength": 100, "type": "string"}, "title": "Tags", "type": "array"}, "timestamp_created": {"format": "date-time", "title": "Timestamp Created", "type": "string"}, "timestamp_updated": {"format": "date-time", "title": "Timestamp Updated", "type": "string"}, "license_agreement": {"default": "This advisory has been prepared and is the property of Orange Cyberdefense.             Please don't redistribute this content without our agreement.", "maxLength": 2048, "title": "License Agreement", "type": "string"}, "content_blocks": {"items": {"$ref": "#/components/schemas/ContentBlockSchema"}, "title": "Content Blocks", "type": "array"}}, "required": ["id", "tdc_id", "title", "severity", "categories", "tags", "timestamp_created", "timestamp_updated", "content_blocks"], "title": "AdvisoryWithContentSchema", "type": "object"}, "ContentBlockSchema": {"properties": {"id": {"title": "Id", "type": "integer"}, "advisory": {"title": "Advisory", "type": "integer"}, "index": {"title": "Index", "type": "integer"}, "title": {"maxLength": 200, "title": "Title", "type": "string"}, "severity": {"maximum": 5, "minimum": 0, "title": "Severity", "type": "integer"}, "categories": {"items": {"maxLength": 50, "type": "string"}, "title": "Categories", "type": "array"}, "tags": {"items": {"maxLength": 100, "type": "string"}, "title": "Tags", "type": "array"}, "advisory_tags": {"items": {"maxLength": 100, "type": "string"}, "title": "Advisory Tags", "type": "array"}, "sources": {"items": {"$ref": "#/components/schemas/SourceSchema"}, "title": "Sources", "type": "array"}, "detection_rules": {"items": {"$ref": "#/components/schemas/DetectionRuleSchema"}, "title": "Detection Rules", "type": "array"}, "datalake_url": {"anyOf": [{"$ref": "#/components/schemas/DatalakeUrlSchema"}, {"type": "null"}]}, "analyst": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Analyst"}, "last_modified_by": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Last Modified By"}, "timestamp_created": {"format": "date-time", "title": "Timestamp Created", "type": "string"}, "timestamp_updated": {"format": "date-time", "title": "Timestamp Updated", "type": "string"}, "executive_summary": {"title": "Executive Summary", "type": "string"}, "what_you_will_hear": {"title": "What You Will Hear", "type": "string"}, "what_it_means": {"title": "What It Means", "type": "string"}, "what_you_should_do": {"title": "What You Should Do", "type": "string"}, "what_we_are_doing": {"title": "What We Are Doing", "type": "string"}, "other": {"title": "Other", "type": "string"}}, "required": ["id", "advisory", "index", "title", "severity", "categories", "tags", "advisory_tags", "sources", "detection_rules", "datalake_url", "timestamp_created", "timestamp_updated", "executive_summary", "what_you_will_hear", "what_it_means", "what_you_should_do", "what_we_are_doing", "other"], "title": "ContentBlockSchema", "type": "object"}, "DatalakeUrlSchema": {"properties": {"id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "title": {"anyOf": [{"maxLength": 100, "type": "string"}, {"type": "null"}], "title": "Title"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "url": {"maxLength": 500, "title": "Url", "type": "string"}}, "required": ["url"], "title": "DatalakeUrlSchema", "type": "object"}, "DetectionRuleSchema": {"properties": {"id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "title": {"default": "", "maxLength": 100, "title": "Title", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "content": {"title": "Content", "type": "string"}}, "required": ["content"], "title": "DetectionRuleSchema", "type": "object"}, "SourceSchema": {"properties": {"id": {"title": "Id", "type": "integer"}, "type": {"$ref": "#/components/schemas/Type"}, "title": {"default": "", "maxLength": 100, "title": "Title", "type": "string"}, "url": {"maxLength": 500, "title": "Url", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}}, "required": ["id", "type", "url"], "title": "SourceSchema", "type": "object"}, "Type": {"enum": ["external", "internal"], "title": "Type", "type": "string"}, "AdvisoryHtmlSchema": {"properties": {"html": {"title": "Html", "type": "string"}, "id": {"title": "Id", "type": "integer"}}, "required": ["html", "id"], "title": "AdvisoryHtmlSchema", "type": "object"}, "AdvisoryMarkdownSchema": {"properties": {"markdown": {"title": "Markdown", "type": "string"}, "id": {"title": "Id", "type": "integer"}}, "required": ["markdown", "id"], "title": "AdvisoryMarkdownSchema", "type": "object"}, "ContentBlockFilterSchema": {"properties": {"id": {"q": "id", "title": "Id", "type": "integer"}, "title": {"q": "title__icontains", "title": "Title", "type": "string"}, "advisory_id": {"title": "Advisory Id", "type": "integer"}, "severity": {"description": "Can take a **comma seperated** list of integers", "title": "Severity", "type": "string"}, "categories": {"description": "Can take a **comma seperated** list of categories", "title": "Categories", "type": "string"}, "tags": {"description": "Can take a **comma seperated** list of tags", "title": "Tags", "type": "string"}, "content": {"q": ["executive_summary__icontains", "what_you_will_hear__icontains", "what_it_means__icontains", "what_you_should_do__icontains", "what_we_are_doing__icontains", "other__icontains"], "title": "Content", "type": "string"}, "sources": {"description": "Can take a **comma separated** list of sources (title, URL, or description)", "title": "Sources", "type": "string"}, "datalake_urls": {"description": "Can take a **comma separated** list of Datalake URLs (title, URL, or description)", "title": "Datalake Urls", "type": "string"}, "detection_rules": {"q": ["detection_rules__title__icontains", "detection_rules__content__icontains"], "title": "Detection Rules", "type": "string"}, "datalake_url": {"deprecated": true, "q": ["datalake_url__title__icontains", "datalake_url__url__icontains"], "title": "Datalake Url", "type": "string"}, "created_before": {"format": "date-time", "title": "Created Before", "type": "string"}, "created_after": {"format": "date-time", "title": "Created After", "type": "string"}, "updated_before": {"format": "date-time", "title": "Updated Before", "type": "string"}, "updated_after": {"format": "date-time", "title": "Updated After", "type": "string"}, "sort_by": {"allOf": [{"enum": ["id", "title", "timestamp_created", "timestamp_updated", "severity"], "title": "SortBy", "type": "string"}], "default": "timestamp_updated"}, "sort_order": {"allOf": [{"enum": ["asc", "desc"], "title": "SortOrder", "type": "string"}], "default": "desc"}}, "title": "ContentBlockFilterSchema", "type": "object"}, "ContentBlockMinimizedSchema": {"properties": {"id": {"title": "Id", "type": "integer"}, "advisory": {"title": "Advisory", "type": "integer"}, "index": {"title": "Index", "type": "integer"}, "title": {"maxLength": 200, "title": "Title", "type": "string"}, "severity": {"maximum": 5, "minimum": 0, "title": "Severity", "type": "integer"}, "categories": {"items": {"maxLength": 50, "type": "string"}, "title": "Categories", "type": "array"}, "tags": {"items": {"maxLength": 100, "type": "string"}, "title": "Tags", "type": "array"}, "advisory_tags": {"items": {"maxLength": 100, "type": "string"}, "title": "Advisory Tags", "type": "array"}, "sources": {"items": {"$ref": "#/components/schemas/SourceSchema"}, "title": "Sources", "type": "array"}, "detection_rules": {"items": {"$ref": "#/components/schemas/DetectionRuleSchema"}, "title": "Detection Rules", "type": "array"}, "datalake_url": {"anyOf": [{"$ref": "#/components/schemas/DatalakeUrlSchema"}, {"type": "null"}]}, "analyst": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Analyst"}, "last_modified_by": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Last Modified By"}, "timestamp_created": {"format": "date-time", "title": "Timestamp Created", "type": "string"}, "timestamp_updated": {"format": "date-time", "title": "Timestamp Updated", "type": "string"}}, "required": ["id", "advisory", "index", "title", "severity", "categories", "tags", "advisory_tags", "sources", "detection_rules", "datalake_url", "timestamp_created", "timestamp_updated"], "title": "ContentBlockMinimizedSchema", "type": "object"}, "NinjaPaginationResponseSchema_ContentBlockMinimizedSchema_": {"properties": {"count": {"title": "Count", "type": "integer"}, "items": {"items": {"$ref": "#/components/schemas/ContentBlockMinimizedSchema"}, "title": "Items", "type": "array"}}, "required": ["count", "items"], "title": "NinjaPaginationResponseSchema[ContentBlockMinimizedSchema]", "type": "object"}, "NinjaPaginationResponseSchema_ContentBlockSchema_": {"properties": {"count": {"title": "Count", "type": "integer"}, "items": {"items": {"$ref": "#/components/schemas/ContentBlockSchema"}, "title": "Items", "type": "array"}}, "required": ["count", "items"], "title": "NinjaPaginationResponseSchema[ContentBlockSchema]", "type": "object"}, "ContentBlockHtmlSchema": {"properties": {"html": {"title": "Html", "type": "string"}, "id": {"title": "Id", "type": "integer"}}, "required": ["html", "id"], "title": "ContentBlockHtmlSchema", "type": "object"}, "ContentBlockMarkdownSchema": {"properties": {"markdown": {"title": "Markdown", "type": "string"}, "id": {"title": "Id", "type": "integer"}}, "required": ["markdown", "id"], "title": "ContentBlockMarkdownSchema", "type": "object"}, "DetectionRuleFilterSchema": {"properties": {"title": {"q": "title__icontains", "title": "Title", "type": "string"}, "content": {"q": "content__icontains", "title": "Content", "type": "string"}}, "title": "DetectionRuleFilterSchema", "type": "object"}, "NinjaPaginationResponseSchema_DetectionRuleSchema_": {"properties": {"count": {"title": "Count", "type": "integer"}, "items": {"items": {"$ref": "#/components/schemas/DetectionRuleSchema"}, "title": "Items", "type": "array"}}, "required": ["count", "items"], "title": "NinjaPaginationResponseSchema[DetectionRuleSchema]", "type": "object"}, "DetectionRuleWithContentSchema": {"properties": {"id": {"title": "Id", "type": "integer"}, "title": {"default": "", "maxLength": 100, "title": "Title", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "content": {"title": "Content", "type": "string"}, "advisory": {"title": "Advisory", "type": "integer"}, "content_block": {"title": "Content Block", "type": "integer"}}, "required": ["id", "content", "advisory", "content_block"], "title": "DetectionRuleWithContentSchema", "type": "object"}, "SourceFilterSchema": {"properties": {"title": {"q": "title__icontains", "title": "Title", "type": "string"}, "url": {"q": "url__icontains", "title": "Url", "type": "string"}, "type": {"allOf": [{"enum": ["external", "internal"], "title": "Type", "type": "string"}]}, "description": {"description": "Can take a **comma separated** list of values to search in the description", "title": "Description", "type": "string"}}, "title": "SourceFilterSchema", "type": "object"}, "NinjaPaginationResponseSchema_SourceSchema_": {"properties": {"count": {"title": "Count", "type": "integer"}, "items": {"items": {"$ref": "#/components/schemas/SourceSchema"}, "title": "Items", "type": "array"}}, "required": ["count", "items"], "title": "NinjaPaginationResponseSchema[SourceSchema]", "type": "object"}, "SourceWithContentSchema": {"properties": {"id": {"title": "Id", "type": "integer"}, "type": {"$ref": "#/components/schemas/Type"}, "title": {"default": "", "maxLength": 100, "title": "Title", "type": "string"}, "url": {"maxLength": 500, "title": "Url", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "advisory": {"title": "Advisory", "type": "integer"}, "content_block": {"title": "Content Block", "type": "integer"}}, "required": ["id", "type", "url", "advisory", "content_block"], "title": "SourceWithContentSchema", "type": "object"}, "DatalakeUrlFilterSchema": {"properties": {"title": {"q": "title__icontains", "title": "Title", "type": "string"}, "url": {"q": "url__icontains", "title": "Url", "type": "string"}, "description": {"description": "Can take a **comma separated** list of values to search in the description", "title": "Description", "type": "string"}}, "title": "DatalakeUrlFilterSchema", "type": "object"}, "NinjaPaginationResponseSchema_DatalakeUrlSchema_": {"properties": {"count": {"title": "Count", "type": "integer"}, "items": {"items": {"$ref": "#/components/schemas/DatalakeUrlSchema"}, "title": "Items", "type": "array"}}, "required": ["count", "items"], "title": "NinjaPaginationResponseSchema[DatalakeUrlSchema]", "type": "object"}, "DatalakeUrlWithContentSchema": {"properties": {"id": {"title": "Id", "type": "integer"}, "title": {"anyOf": [{"maxLength": 100, "type": "string"}, {"type": "null"}], "title": "Title"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "url": {"maxLength": 500, "title": "Url", "type": "string"}, "advisory": {"title": "Advisory", "type": "integer"}, "content_block": {"title": "Content Block", "type": "integer"}}, "required": ["id", "url", "advisory", "content_block"], "title": "DatalakeUrlWithContentSchema", "type": "object"}, "TagFilterSchema": {"properties": {"name": {"q": "name__istartswith", "title": "Name", "type": "string"}}, "title": "TagFilterSchema", "type": "object"}, "NinjaPaginationResponseSchema_TagSchema_": {"properties": {"count": {"title": "Count", "type": "integer"}, "items": {"items": {"$ref": "#/components/schemas/TagSchema"}, "title": "Items", "type": "array"}}, "required": ["count", "items"], "title": "NinjaPaginationResponseSchema[TagSchema]", "type": "object"}, "TagSchema": {"properties": {"name": {"maxLength": 100, "title": "Name", "type": "string"}}, "required": ["name"], "title": "TagSchema", "type": "object"}, "TagWithDataSchema": {"properties": {"name": {"title": "Name", "type": "string"}, "content_blocks": {"items": {"type": "integer"}, "title": "Content Blocks", "type": "array"}, "advisories": {"items": {"type": "integer"}, "title": "Advisories", "type": "array"}}, "required": ["name", "content_blocks", "advisories"], "title": "TagWithDataSchema", "type": "object"}, "CategorySchema": {"properties": {"name": {"maxLength": 50, "title": "Name", "type": "string"}}, "required": ["name"], "title": "CategorySchema", "type": "object"}, "NinjaPaginationResponseSchema_CategorySchema_": {"properties": {"count": {"title": "Count", "type": "integer"}, "items": {"items": {"$ref": "#/components/schemas/CategorySchema"}, "title": "Items", "type": "array"}}, "required": ["count", "items"], "title": "NinjaPaginationResponseSchema[CategorySchema]", "type": "object"}, "CategoryWithDataSchema": {"properties": {"name": {"title": "Name", "type": "string"}, "content_blocks": {"items": {"type": "integer"}, "title": "Content Blocks", "type": "array"}, "advisories": {"items": {"type": "integer"}, "title": "Advisories", "type": "array"}}, "required": ["name", "content_blocks", "advisories"], "title": "CategoryWithDataSchema", "type": "object"}}, "securitySchemes": {"EmailKeyAuthentication": {"type": "apiKey", "in": "header", "name": "Authorization"}, "LoginTokenAuthentication": {"type": "apiKey", "in": "header", "name": "Authorization"}, "APIKeyAuthentication": {"type": "apiKey", "in": "header", "name": "Authorization"}}}, "servers": [], "tags": [{"name": "Login", "description": "Login using email and password authentication. This creates a `LoginToken` that can then be used to create an `ApiKey`."}, {"name": "Users", "description": "Manage your own user or your associated users if you have a **Manager** account. You will need a `LoginToken` for most the those routes."}, {"name": "API Keys", "description": "Manage your or your users' keys. You are reponsible for the creation, revocation, renewal, and security of your tokens."}, {"name": "Advisory", "description": "An **Advisory** acts as a container for related information. It doesn\u2019t hold all the raw details itself\u2014instead, it is composed of one or more **Content Blocks**, which are the actual units of data. Each **Content Block** contains the actual data, the **Advisory** acts as an umbrella and brings these blocks together under a common theme or context. An **Advisory** will always have the same `title` and `severity` of its most recent **Content Block**."}, {"name": "Content Block", "description": "A **Content Block** is a singular update (or the initial publication) associated with an **Advisory**. Each **Content Block** can have its own `tags` and `severity` compared to its parent **Advisory**. If the `index` is 0, this means that this is the initial content of the **Advisory**, otherwise this indicates the number of the update."}, {"name": "Datalake Url", "description": "Datalake is an Orange Cyberdefense service to consult and consume IoCs. You can use the **Datalake Url** to get all IoCs associated with the **Content Block**.", "externalDocs": {"description": "Datalake Service", "url": "https://datalake.cert.orangecyberdefense.com/"}}, {"name": "Detection Rule", "description": "A **Detection Rule** is a yara, surricata, or other type of rule that can be used to detect/mitigate the threat mentionned in the **Content Block**."}, {"name": "Source", "description": "A **Source** is a linked reference associated with a **Content Block**. *Internal* sources are related to Orange Cyberdefense services and might only be accessible to Orange Cyberdefense clients, while *External* sources are accessible on the public internet."}, {"name": "Categories", "description": "Each **Content Block** has one or more **Category**. This list is stable and it is unlikely that new categories will appear."}, {"name": "Tags", "description": "Each **Advisory** and **Content Block** has one or more **Tag**. The *victimology* uses prefixes to specify a specific sector(`victim:sector=`), country(`victim:country=`), or continent(`victim:continent=`)."}]}