{"id":20508573,"url":"https://github.com/novuhq/novu-java","last_synced_at":"2025-08-21T22:31:40.172Z","repository":{"id":182548272,"uuid":"657656085","full_name":"novuhq/novu-java","owner":"novuhq","description":"Java SDK for Novu - The open-source notification infrastructure for engineers. 🚀","archived":false,"fork":false,"pushed_at":"2024-06-29T17:13:37.000Z","size":491,"stargazers_count":28,"open_issues_count":6,"forks_count":22,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-12-17T11:32:56.083Z","etag":null,"topics":["hacktoberfest","java"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/novuhq.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-23T14:35:38.000Z","updated_at":"2024-12-04T01:07:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"f3b35732-951d-4f41-913b-c7bc34aaf5b5","html_url":"https://github.com/novuhq/novu-java","commit_stats":null,"previous_names":["novuhq/novu-java"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novuhq%2Fnovu-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novuhq%2Fnovu-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novuhq%2Fnovu-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novuhq%2Fnovu-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/novuhq","download_url":"https://codeload.github.com/novuhq/novu-java/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230537062,"owners_count":18241515,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest","java"],"created_at":"2024-11-15T20:19:16.838Z","updated_at":"2024-12-20T05:09:12.747Z","avatar_url":"https://github.com/novuhq.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://novu.co\" target=\"_blank\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/2233092/213641039-220ac15f-f367-4d13-9eaf-56e79433b8c1.png\"\u003e\n    \u003cimg src=\"https://user-images.githubusercontent.com/2233092/213641043-3bbb3f21-3c53-4e67-afe5-755aeb222159.png\" width=\"280\" alt=\"Logo\"/\u003e\n  \u003c/picture\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n# Novu Java SDK\n\n[![License](https://poser.pugx.org/unicodeveloper/novu/license.svg)](LICENSE.md)\n[![GitHub release (with filter)](https://img.shields.io/github/v/release/novuhq/novu-java?label=SDK\u0026link=https%3A%2F%2Fgithub.com%2Fnovuhq%2Fnovu-java%2Freleases%2Flatest)](https://github.com/novuhq/novu-java/releases/latest)\n\nThe [Novu Java](https://novu.co) SDK provides a fluent and expressive interface for interacting with [Novu's API](https://docs.novu.co/api-reference/overview) and managing notifications. Please refer to the full [documentation](https://docs.novu.co/docs/overview/introduction) to learn more.\n\n## Contents\n\n* [Installation](#installation)\n* [Usage](#usage)\n    * [Novu API Reference](https://docs.novu.co/api-reference/events/trigger-event)\n    * [Events](#events)\n    * [Subscribers](#subscribers)\n    * [Topics](#topics)\n    * [Integrations](#integrations)\n    * [Notifications](#notification)\n    * [Workflow](#workflow)\n    * [Workflow Override](#workflow-override)\n    * [Workflow Groups](#workflow-groups)\n    * [Changes](#changes)\n    * [Environments](#environments)\n    * [Feeds](#feeds)\n    * [Messages](#messages)\n    * [Execution Details](#execution-details)\n    * [Validate the MX Record setup for Inbound Parse functionality](#inbound-parse)\n* [Contributing](#contributing)\n* [Support and Feedback](#support-and-feedback)\n* [License](#license)\n* [Contributors](#contributors)\n\n## Installation\n\n**Maven users:**\n```xml\n\u003c!--add dependency--\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eco.novu\u003c/groupId\u003e\n    \u003cartifactId\u003enovu-java\u003c/artifactId\u003e\n    \u003cversion\u003e1.6.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n**Gradle users:**\n```groovy\n// add dependency\ndependencies {\n    implementation 'co.novu:novu-java:1.6.0'\n}\n```\nSync your project, and you should have the artifacts downloaded.\n\n## Usage\n\nFirst, create an instance of the **Novu SDK** like so:\n```java\nimport co.novu.sdk.Novu;\n\npublic class Main {\n    public static void main(String[] args) {\n        String apiKey = \"INSERT_API_KEY_HERE\";\n        // Using the API Key only\n        Novu novu = new Novu(apiKey);\n\n        // Using the Config Param\n        NovuConfig novuConfig = new NovuConfig(apiKey);\n        Novu novu = new Novu(novuConfig);\n\n        // Sample usage\n        novu.triggerEvent(event);\n    }\n}\n\n// Sign up on https://web.novu.co and grab your API key from https://web.novu.co/settings\n```\n\n### Events\n\n**Trigger** an event - send notification to subscribers:\n\n```java\n        TriggerEventRequest event = new TriggerEventRequest();\n        event.setName(\"name\");\n\n        SubscriberRequest subscriberRequest = new SubscriberRequest();\n        subscriberRequest.setFirstName(\"fName\");\n        subscriberRequest.setLastName(\"lName\");\n        subscriberRequest.setEmail(\"mail@sample.com\");\n        subscriberRequest.setSubscriberId(\"subId\");\n        \n        Map\u003cString, Object\u003e payload = new HashMap\u003c\u003e();\n        payload.put(\"customVariables\", \"Hello\");\n\n        event.setTo(subscriberRequest);\n        event.setPayload(payload);\n        event.setActor(\"actor\");\n        event.setTenant(\"tenant\");\n\n        // Call the method to perform trigger event with 'event' request\n        novu.triggerEvent(event);\n```\n**Bulk Trigger** events:\n\n```java\n        List\u003cTriggerEventRequest\u003e events = new ArrayList\u003c\u003e();\n\n        // First event\n        TriggerEventRequest event1 = new TriggerEventRequest();\n        event1.setName(\"name\");\n\n        SubscriberRequest subscriberRequest = new SubscriberRequest();\n        subscriberRequest.setFirstName(\"fName\");\n        subscriberRequest.setLastName(\"lName\");\n        subscriberRequest.setEmail(\"mail@sample.com\");\n        subscriberRequest.setSubscriberId(\"subId\");\n\n        Map\u003cString, Object\u003e payload = new HashMap\u003c\u003e();\n        payload.put(\"customVariables\", \"Hello\");\n\n        event1.setTo(subscriberRequest);\n        event1.setPayload(payload);\n        event1.setActor(\"actor\");\n        event1.setTenant(\"tenant\");\n        events.add(event1);\n\n        // Second event\n        TriggerEventRequest event2 = new TriggerEventRequest();\n        event2.setName(\"name\");\n\n        SubscriberRequest subscriberRequest = new SubscriberRequest();\n        subscriberRequest.setFirstName(\"fName\");\n        subscriberRequest.setLastName(\"lName\");\n        subscriberRequest.setEmail(\"mail@sample.com\");\n        subscriberRequest.setSubscriberId(\"subId\");\n\n        Map\u003cString, Object\u003e payload = new HashMap\u003c\u003e();\n        payload.put(\"customVariables\", \"Hello\");\n\n        event2.setTo(subscriberRequest);\n        event2.setPayload(payload);\n        event2.setActor(\"actor\");\n        event2.setTenant(\"tenant\");\n        events.add(event2);\n\n        BulkTriggerEventRequest bulkEventRequest = new BulkTriggerEventRequest();\n        bulkTriggerEventRequest.setEvents(events);\n\n        // Call the method to perform bulk trigger with the request body\n        novu.bulkTriggerEvent(bulkEventRequest);\n\n```\n**Broadcast** event to all existing subscribers:\n\n```java\n        TriggerEventRequest event = new TriggerEventRequest();\n        event.setName(\"name\");\n\n        SubscriberRequest subscriberRequest = new SubscriberRequest();\n        subscriberRequest.setFirstName(\"fName\");\n        subscriberRequest.setLastName(\"lName\");\n        subscriberRequest.setEmail(\"mail@sample.com\");\n        subscriberRequest.setSubscriberId(\"subId\");\n\n        Map\u003cString, Object\u003e payload = new HashMap\u003c\u003e();\n        payload.put(\"customVariables\", \"Hello\");\n\n        event.setTo(subscriberRequest);\n        event.setPayload(payload);\n        event.setActor(\"actor\");\n        event.setTenant(\"tenant\");\n        \n        // Call the method to perform broadcast event with the request body\n        novu.broadcastEvent(event);\n```\n\n**Cancel** triggered event. Using a previously generated transactionId during the event trigger, this action will cancel any active or pending workflows:\n\n```java\n        String transactionId = \"\u003cREPLACE_WITH_TRANSACTION_ID\u003e\";\n\n        // Call the method to cancel event using the 'transactionId'\n        novu.cancelTriggeredEvent(transactionId);\n```\n\n### Subscribers\n\n```java\n        //=== Create subscriber \u0026 get the details of the recently created subscriber returned. ===//\n        SubscriberRequest subscriber = new SubscriberRequest();\n        subscriber.setFirstName(\"fName\");\n        subscriber.setLastName(\"lName\");\n        subscriber.setEmail(\"email@sample.com\");\n\n        // Call the method to create a subscriber with the 'subscriber' request\n        novu.createSubscriber(subscriber);\n\n        //=== Get subscriber ===//\n        String subscriberId = \"\u003cYOUR_SUBSCRIBER_ID\u003e\"; // Replace with the actual subscriber ID\n                \n        // Call the method to get the subscriber using 'subscriberId'\n        novu.getSubscriber(subscriberId);\n\n        //=== Update subscriber ===//\n        UpdateSubscriberRequest request = new UpdateSubscriberRequest();\n        request.setFirstName(\"name\");\n        request.setLastName(\"lName\");\n        // Add other fields\n\n        // Call the method to update the subscriber with the request body and the subscriber's ID\n        novu.updateSubscriber(request, subscriberId);\n\n        //=== Delete subscriber ===//\n        String subscriberId = \"\u003cYOUR_SUBSCRIBER_ID\u003e\"; // Replace with the actual subscriber ID\n\n        // Call the method to delete the subscriber using their 'subscriberId'\n        novu.deleteSubscriber(subscriberId);\n\n        //=== Update subscriber credentials ===//\n        String subscriberId = \"\u003cYOUR_SUBSCRIBER_ID\u003e\"; // Replace with the actual subscriber ID\n\n        UpdateSubscriberCredentialsRequest request = new UpdateSubscriberCredentialsRequest();\n        request.setProviderId(\"pId\");\n        // Add other fields\n\n        // Call the method to update subscriber credentials with the request body and the subscriber's ID\n        novu.updateSubscriberCredentials(request, subscriberId);\n\n        //=== Update subscriber online status ===//\n        String subscriberId = \"\u003cYOUR_SUBSCRIBER_ID\u003e\"; // Replace with the actual subscriber ID\n\n        UpdateSubscriberOnlineStatusRequest request = new UpdateSubscriberOnlineStatusRequest();\n        request.setIsOnline(true); // Set to true or false\n                \n        // Call the method to update subscriber online status with the request body and the subscriber's ID\n        novu.updateSubscriberOnlineStatus(request, subscriberId);\n\n        //=== Get subscriber preferences ===//\n        String subscriberId = \"\u003cYOUR_SUBSCRIBER_ID\u003e\"; // Replace with the actual subscriber ID\n                \n        // Call the method to get a subscriber's preferences using 'subscriberId'\n        novu.getSubscriberPreferences(subscriberId);\n\n        //=== Update subscriber preference ===//\n        String subscriberId = \"\u003cYOUR_SUBSCRIBER_ID\u003e\"; // Replace with the actual subscriber ID\n        String templateId = \"\u003cINSERT_TEMPLATE_ID\u003e\"; // Replace with the actual template ID\n\n        UpdateSubscriberPreferenceRequest request = new UpdateSubscriberPreferenceRequest();\n        request.setEnabled(false); // Set to true or false, optional\n\n        // Call the method to update subscriber preferences with the request body, 'subscriberId', and 'templateId'\n        novu.updateSubscriberPreference(request, subscriberId, templateId);\n\n        //=== Get a notification feed for a particular subscriber ===//\n        String subscriberId = \"\u003cYOUR_SUBSCRIBER_ID\u003e\"; // Replace with the actual subscriber ID\n                \n        // Call the method to get the notification feed for a subscriber using 'subscriberId'\n        novu.getSubscriberNotificationsFeed(subscriberId);\n\n        //=== Get the unseen notification count for subscribers feed ===//\n        String subscriberId = \"\u003cYOUR_SUBSCRIBER_ID\u003e\"; // Replace with the actual subscriber ID\n                \n        // Call the method to get the unseen notification count for subscriber using 'subscriberId'\n        novu.getSubscriberUnseenNotificationsCount(subscriberId);\n\n        //=== Mark a subscriber feed message as seen ===//\n        String subscriberId = \"\u003cYOUR_SUBSCRIBER_ID\u003e\"; // Replace with the actual subscriber ID\n        String messageId = \"\u003cYOUR_MESSAGE_ID\u003e\"; // Replace with the actual message ID\n\n        MarkSubscriberFeedAsRequest request = new MarkSubscriberFeedAsRequest();\n        Mark mark = new Mark();\n        mark.setRead(true);\n        mark.setSeen(true);\n        request.setMark(mark);\n        request.setMessageId(messageId);\n\n        // Call the method to mark a subscriber's feed message as seen using the request body and 'subscriberId'\n        novu.markSubscriberMessageFeedAs(subscriberId, messageId, request);\n\n        //=== Mark message action as seen ===//\n        String subscriberId = \"\u003cYOUR_SUBSCRIBER_ID\u003e\"; // Replace with the actual subscriber ID\n        String messageId = \"\u003cYOUR_MESSAGE_ID\u003e\"; // Replace with the actual message ID\n        String type = \"\u003cYOUR_ACTION_TYPE\u003e\"; // Replace with the actual action type\n\n        MarkMessageActionAsSeenRequest request = new MarkMessageActionAsSeenRequest();\n        request.setStatus(\"read\");\n\n        // Call the method to mark a subscriber's message action as seen using the request body, 'subscriberId', 'messageId' and 'type'\n        novu.markMessageActionAsSeen(request, subscriberId, messageId, type);\n```\n\n### Topics\n\n```java\n        //=== Create a Topic ===//\n        TopicRequest topicRequest = new TopicRequest();\n        topicRequest.setKey(\"key\");\n        topicRequest.setName(\"name\");\n\n        // Call the method to create a topic with the request body\n        novu.createTopic(topicRequest);\n\n        //=== Fetch all Topics ===//\n        FilterTopicsRequest topicsRequest = new FilterTopicsRequest();\n        topicsRequest.setPage(1);\n        topicsRequest.setPageSize(10);\n        topicsRequest.setKey(\"key\");\n        \n        // Call the method to get the Topics list\n        novu.filterTopics(topicsRequest);\n\n        //=== Get a Topic ===//\n        String topickey = \"\u003cYOUR_TOPIC_KEY\u003e\"; // Replace with the actual Topic key\n\n        // Call the method to get a Topic using the 'topickey'\n        novu.getTopic(topickey);\n\n        //=== Add subscribers to a Topic ===//\n        String topicKey = \"\u003cYOUR_TOPIC_KEY\u003e\"; // Replace with the actual Topic key\n\n        List\u003cString\u003e subscribers = new ArrayList\u003c\u003e();\n        subscribers.add(\"\u003cSUBSCRIBER_ID\u003e\");\n\n        SubscriberAdditionRequest additionRequest = new SubscriberAdditionRequest();\n        additionRequest.setSubscribers(subscribers);\n\n        // Call the method to add subscribers to a Topic using the request body and 'topicKey'\n        novu.addSubscribersToTopic(additionRequest, topicKey);\n\n        //=== Remove subscribers from a Topic ===//\n        String topicKey = \"\u003cYOUR_TOPIC_KEY\u003e\"; // Replace with the actual topic key\n\n        List\u003cString\u003e subscribers = new ArrayList\u003c\u003e();\n        subscribers.add(\"\u003cSUBSCRIBER_ID\u003e\");\n\n        SubscriberAdditionRequest request = new SubscriberAdditionRequest();\n        request.setSubscribers(subscribers);\n\n        // Call the method to remove subscribers from a Topic using the request body and 'topicKey'\n        novu.removeSubscribersFromTopic(request, topicKey);\n\n        //=== Rename a Topic ===//\n        String topicKey = \"\u003cYOUR_TOPIC_KEY\u003e\"; // Replace with the actual topic key\n\n        RenameTopicRequest renameTopicRequest = new RenameTopicRequest();\n        renameTopicRequest.setName(\"name\");\n\n        // Call the method to rename a Topic using the request body and 'topicKey'\n        novu.renameTopic(renameTopicRequest, topicKey);\n```\n### Changes\n\n- `changes(query = {})`\n- `countChanges()`\n- `applyBulkChanges()`\n- `applyChange(changeId)`\n\n### Environments\n\n- `currentEnvironment()`\n- `createEnvironment(body)`\n- `environments()`\n- `updateEnvironment(environmentId, body)`\n- `apiKeys()`\n- `regenerateApiKeys()`\n- `updateWidgetSettings(body)`\n\n### Execution Details\n\n- `executionDetails(query = {})`\n\n### Feeds\n\n- `createFeed(body)`\n- `feeds()`\n- `deleteFeed(feedId)`\n\n### Inbound Parse\n\n- `validateMxRecordSetupForInboundParse()`\n\n### Integrations\n\n- `integrations()`\n- `createIntegration(body)`\n- `activeIntegrations()`\n- `webhookProviderStatus(providerId)`\n- `updateIntegration(integrationId, body)`\n- `deleteIntegration(integrationId)`\n- `channelLimit(channelType)`\n- `inAppStatus()`\n- `setIntegrationAsPrimary(integrationId)`\n\n### Layouts\n\n- `createLayout(body) `\n- `layouts(query = {})`\n- `layout(layoutId)`\n- `deleteLayout(layoutId)`\n- `updateLayout(layoutId, body)`\n- `makeDefaultLayout(layoutId)`\n\n### Messages\n\n- `messages(query = {})`\n- `deleteMessage(messageId)`\n\n### Workflow Groups\n\n- `createWorkflowGroup(body)`\n- `notificationGroups()`\n- `updateWorkflowGroup(workflowId, body)`\n\n### Workflow\n\n- `notificationTemplates(query = {})`\n- `createWorkflow(body)`\n- `updateWorkflow(WorkflowId, body)`\n- `deleteWorkflow(WorkflowId)`\n- `Workflow(WorkflowId)`\n- `updateWorkflowStatus(WorkflowId, body)`\n\n### Workflow Override\n\n- `createWorkflowOverride(createWorkflowOverrideRequest)`\n- `getWorkflowOverrides(getWorkflowOverrideRequest)`\n- `getWorkflowOverride(workflowId, tenantId)`\n- `getWorkflowOverrideById(overrideId)`\n- `updateWorkflowOverride(workflowId, tenantId)`\n- `updateWorkflowOverrideById(overrideId)`\n- `deleteWorkflowOverride(overrideId)`\n\n### Notification\n\n- `notifications(query = {})`\n- `notificationsStats()`\n- `notificationsGraphStats(query = {})`\n- `notification(notificationId)`\n\n### Blueprints\n\n- `getBlueprintsByCategory()`\n- `getBlueprint(templateId)`\n\n### Tenants\n\n- `getTenants(body)`\n- `createTenant(body)`\n- `getTenant(identifier)`\n- `updateTenant(body, identifier)`\n- `deleteTenant(identifier)`\n\n### For more information about these methods and their parameters, see the [API documentation](https://docs.novu.co/api/overview).\n\n## Contributing\n\nFeature requests, bug reports and pull requests are welcome. Please create an [issue](https://github.com/novuhq/novu-java/issues).\n\n## Support and Feedback\n\nBe sure to visit the Novu official [documentation website](https://docs.novu.co/docs) for additional information about our API.\nIf you need additional assistance, join our Discord server [here](https://discord.novu.co).\n\n## License\n\nNovu Java SDK is licensed under the MIT License - see the [LICENSE](https://github.com/novuhq/novu-java/blob/main/LICENSE.md) file for details.\n\n## Contributors\n\n\u003ca href=\"https://github.com/novuhq/novu-java/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=novuhq/novu-java\u0026max=500\u0026columns=20\"  alt=\"Contributors\"/\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnovuhq%2Fnovu-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnovuhq%2Fnovu-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnovuhq%2Fnovu-java/lists"}