{"id":36426888,"url":"https://github.com/suprsend/suprsend-java-sdk","last_synced_at":"2026-05-15T07:07:32.687Z","repository":{"id":40546507,"uuid":"447951406","full_name":"suprsend/suprsend-java-sdk","owner":"suprsend","description":"SuprSend SDK for Java","archived":false,"fork":false,"pushed_at":"2025-11-05T11:08:53.000Z","size":239,"stargazers_count":11,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-11-05T13:11:28.242Z","etag":null,"topics":["java","notifications","suprsend"],"latest_commit_sha":null,"homepage":"https://suprsend.com","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/suprsend.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-01-14T11:56:23.000Z","updated_at":"2025-08-30T12:45:42.000Z","dependencies_parsed_at":"2024-11-05T19:39:29.951Z","dependency_job_id":"bfa71fca-706d-4f9d-b11f-51156aac891b","html_url":"https://github.com/suprsend/suprsend-java-sdk","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/suprsend/suprsend-java-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suprsend%2Fsuprsend-java-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suprsend%2Fsuprsend-java-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suprsend%2Fsuprsend-java-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suprsend%2Fsuprsend-java-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/suprsend","download_url":"https://codeload.github.com/suprsend/suprsend-java-sdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/suprsend%2Fsuprsend-java-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28316906,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T14:58:17.114Z","status":"ssl_error","status_checked_at":"2026-01-11T14:55:53.580Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["java","notifications","suprsend"],"created_at":"2026-01-11T18:00:36.157Z","updated_at":"2026-05-15T07:07:32.679Z","avatar_url":"https://github.com/suprsend.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# suprsend-java-sdk\nThis package can be included in a java project to easily integrate\nwith `Suprsend` platform.\n\n### Installation\n\nYou can include the jar using following two ways:\n1. As a Maven dependency for maven projects:\n\n   suprsend-java-sdk is present as a maven dependency on maven central.\n   Add following to your pom.xml to include the sdk:\n   ```xml\n      \u003cdependencies\u003e\n        \u003cdependency\u003e\n          \u003cgroupId\u003ecom.suprsend\u003c/groupId\u003e\n          \u003cartifactId\u003esuprsend-java-sdk\u003c/artifactId\u003e\n          \u003cversion\u003e0.14.0\u003c/version\u003e\n\t    \u003c/dependency\u003e\n      \u003c/dependencies\u003e\n    ```\n\n2. As a jar file for non maven projects:\n\n   Please download jar from releases section.\n   `suprsend-java-sdk` is available as a JAR with name - `suprsend-java-sdk-0.14.0-jar-with-dependencies.jar` and add it as an External Jar in your build path.\n\n### Usage\nInitialize the Suprsend library using the following:\n\nFor initializing SDK, you need workspace key and workspace secret. You will get both the tokens from client dashboard.\n\n```java\nimport suprsend.Suprsend;\nSuprsend suprClient = new Suprsend(\"api_key\", \"api_secret\");\n```\n\nTo logs HTTP calls to Suprsend, pass debug=true as third parameter.\n```java\nimport suprsend.Suprsend;\nSuprsend suprClient = new Suprsend(\"api_key\", \"api_secret\", true);\n```\n\n### Trigger Workflow\nOnce you have the sdk initialized you can make a call to suprsend backend using following line:\n\n```java\nimport suprsend.WorkflowTriggerRequest;\n// prepare workflow body\n// body = new JSONObject()\nWorkflowTriggerRequest wf = new WorkflowTriggerRequest(body)\nJSONObject response = suprClient.workflows.trigger(wf);\n```\n\nResponse could be one of the following:\n```json\n# If the call succeeds, response will looks like:\n{\n    \"success\": true,\n    \"status\":\"success\",\n    \"status_code\": 202,\n    \"message\": \"Accepted\",\n}\n\n# In case the call fails. You will receive a response with success=False\n{\n    \"success\": false,\n    \"status\": \"fail\",\n    \"status_code\": 400/500,\n    \"message\": \"error message\",\n}\n```\n\nNote: The actual processing/execution of workflow happens asynchronously.\n\n### Sample\nFollowing example shows a sample request for triggering a workflow.\nIt triggers a pre-created workflow `purchase-made` to a recipient with id: `distinct_id`, mobile: `+419999999999`.\n\nSample workflow body\n```json\n{\n   \"workflow\":\"purchase-made\",\n   \"actor\": { // optional\n      \"distinct_id\": \"__actor_id__\"\n   },\n   \"recipients\":[\n      {\n        \"distinct_id\":\"__distinct_id__\",\n        \"$sms\":[\"+419999999999\"],\n      }\n   ],\n   \"data\":{\n      \"link1\": \"https://www.suprsend.com\",\n      \"solution\": \"https://www.suprsend.com\",\n      \"last_name\": \"ABC\",\n      \"first_name\": \"XYZ\",\n      \"question_subject\": \"Arithmetic Progression\",\n      \"address\": {\n        \"city\": \"Zurich\"\n      }\n   }\n}\n```\n\n### Set channels in User Profile \nYou can add/remove channel details viz. email, sms, whatsapp, androidpush etc. from user's profile (using `user.add*`/\n`user.remove*`/`user.set*`/`user.unset` methods)  as shown in the example below.\n\n* First Instantiate a user object\n```java\nimport suprsend.Subscriber;\n\nString distinctId = \"__uniq_user_id__\"  // Unique id of user in your application\n//Instantiate User profile\nSubscriber user = suprClient.user.getInstance(distinctId)\n```\n* To add channel details to this user (viz. email, sms, whatsapp, androidpush, iospush etc) use user.add* method(s) as shown in the example below.\n\n```java\n// Add channel details to user-instance. Call relevant add_* methods --\u003e\n\nuser.addEmail(\"user@example.com\") // - To add Email\n\nuser.addSms(\"+919999999999\") // - To add SMS\n\nuser.addWhatsapp(\"+919999999999\") // - To add Whatsapp\n\nuser.addAndroidpush(\"__androidpush_fcm_token__\") // - by default, token is assumed to be fcm-token\n\n// You can set the optional provider value [fcm/xiaomi/oppo] if its not a fcm-token\nuser.addAndroidpush(\"__androidpush_xiaomi_token__\", provider=\"xiaomi\")\n\nuser.addIospush(\"__iospush_token__\")\n\nuser.addSlack(new JSONObject('{\"email\": \"user@example.com\", \"access_token\": \"xoxb-XXXXXXXXXXXX\"}'))  // - DM user using email\nuser.addSlack(new JSONObject('{\"user_id\": \"U03XXXXXXXX\", \"access_token\": \"xoxb-XXXXXXXXXXXX\"}'))  // - DM user using slack member_id if known\nuser.addSlack(new JSONObject('{\"channel_id\": \"C03XXXXXXXX\", \"access_token\": \"xoxb-XXXXXXXXXXXX\"}'))  // - Use channel id\nuser.addSlack(new JSONObject('{\"incoming_webhook\": {\"url\": \"https://hooks.slack.com/services/TXXXXXXXXX/BXXXXXX/XXXXXXX\"}}'))  // - Use incoming webhook\n\n// After setting the channel details on user-instance, call save()\nJSONObject response = user.save()\nSystem.out.println(response);\n\n```\n* Similarly, If you want to remove certain channel details from user, you can call user.remove* method as shown in the example below.\n\n```java\n// Remove channel helper methods\nuser.removeEmail(\"user@example.com\")\nuser.removeSms(\"+919999999999\")\nuser.removeWhatsapp(\"+919999999999\")\nuser.removeAndroidpush(\"__android_push_fcm_token__\")\nuser.removeAndroidpush(\"__android_push_xiaomi_token__\", provider=\"xiaomi\")\nuser.removeIospush(\"__iospush_token__\")\n\nuser.removeSlack(new JSONObject('{\"email\": \"user@example.com\", \"access_token\": \"xoxb-XXXXXXXXXXXX\"}'))  // - DM user using email\nuser.removeSlack(new JSONObject('{\"user_id\": \"U03XXXXXXXX\", \"access_token\": \"xoxb-XXXXXXXXXXXX\"}'))  // - DM user using slack member_id if known\nuser.removeSlack(new JSONObject('{\"channel_id\": \"C03XXXXXXXX\", \"access_token\": \"xoxb-XXXXXXXXXXXX\"}'))  // - Use channel id\nuser.removeSlack(new JSONObject('{\"incoming_webhook\": {\"url\": \"https://hooks.slack.com/services/TXXXXXXXXX/BXXXXXX/XXXXXXX\"}}'))  // - Use incoming webhook\n\n// save\nJSONObject response = user.save()\nSystem.out.println(response);\n\n```\n\n* If you need to delete/unset all emails (or any other channel) of a user, you can call unset method on the user instance. The method accepts the channel key/s (a single key or list of keys)\n\n```java\n// --- To delete all emails associated with user\nuser.unset(\"$email\")\nJSONObject response = user.save()\nSystem.out.println(response);\n\n// what value to pass to unset channels\n// for email:                $email\n// for whatsapp:             $whatsapp\n// for SMS:                  $sms\n// for androidpush tokens:   $androidpush\n// for iospush tokens:       $iospush\n// for webpush tokens:       $webpush\n// for slack:                $slack\n\n// --- multiple channels can also be deleted in one call by passing argument as a list\nuser.unset([\"$email\", \"$sms\", \"$whatsapp\"])\nJSONObject response = user.save()\n\n```\n\n- You can also set locale of user using `setLocale(localeCode)`. Value for localeCode must be either in\n  - [ISO 639-1 2-letter] format. (e.g `en`, `fr`), OR\n  - `languageCode`-`regionCode` format. (e.g `en-US`, `en-GB`, `fr-FR`). Combines language code (ISO 639-1 2-letter) and a country code (ISO 3166-1 alpha-2), separated by a hyphen.\n\n```java\n# --- Set locale\nuser.setLocate(\"en-US\")\nJSONObject response = user.save()\nSystem.out.println(response);\n```\n\n- You can also set timezone of user using `setTimezone(timezone)`. Value for timezone\n  must be from amongst the IANA timezones as maintained in the latest release here:\n  https://data.iana.org/time-zones/tzdb-2024a/zonenow.tab.\n```java\n# --- Set timezone property at user level in IANA timezone format\nuser.setTimezone(\"America/Los_Angeles\")\nJSONObject response = user.save()\nSystem.out.println(response);\n```\n\n* Note: After calling `add*`/`remove*`/`unset`/`set_*` methods, don't forget to call `user.save()`. On call of save(), SDK sends the request to SuprSend platform to update the User-Profile.\n\n\n#### Profile Update Examples\n\n```java\n\nimport org.json.JSONObject;\n\nimport suprsend.Suprsend;\nimport suprsend.Subscriber;\n\npublic class TestSubscribers {\n  public static void main(String[] args) throws Exception {\n    testSave();\n  }\n\n  public static void testSave() throws Exception {\n    // SDK instance\n    Suprsend suprClient = new Suprsend(\"api_key\", \"api_secret\");\n    // Subscriber Instance\n    String distinctId = \"__distinct_id__\";\n    Subscriber user = suprClient.user.getInstance(distinctId);\n    // Add properties\n    user.addEmail(\"example@example.com\");\n    user.addSms(\"+919999999999\");\n    user.addWhatsapp(\"+919999999999\");\n    // Save\n    JSONObject response = user.save();\n    System.out.println(response);\n  }\n\n  public static void testAddWebpush() throws Exception {\n    // SDK instance\n    Suprsend suprClient = new Suprsend(\"api_key\", \"api_secret\");\n\n    // Subscriber Instance\n    String distinctId = \"__distinct_id__\";\n    Subscriber user = suprClient.user.getInstance(distinctId);\n\n    // Webpush token json (VAPID)\n    JSONObject webpush = new JSONObject()\n        .put(\"endpoint\", \"__end_point__\")\n        .put(\"expirationTime\", \"\")\n        .put(\"keys\", new JSONObject()\n            .put(\"p256dh\", \"__p256dh__\")\n            .put(\"auth\", \"__auth_key__\"));\n    //\n    user.addWebpush(webpush, \"vapid\");\n    // Save\n    JSONObject response = user.save();\n    System.out.println(response);\n  }\n\n  public static void testAddAndroidpush() throws Exception {\n    Suprsend suprClient = new Suprsend(\"api_key\", \"api_secret\");\n    // \n    String distinctId = \"__distinct_id__\";\n    Subscriber user = suprClient.user.getInstance(distinctId);\n    // \n    user.addAndroidpush(\"__android_push_key__\", \"fcm\");\n    JSONObject res = user.save();\n    System.out.println(res);\n  }\n\n\n  public static void testRemove() throws Exception {\n    Suprsend suprClient = new Suprsend(\"api_key\", \"api_secret\");\n    //\n    String distinctId = \"__distinct_id__\";\n    Subscriber user = suprClient.user.getInstance(distinctId);\n    //\n    user.removeWhatsapp(\"+919999999999\");\n    JSONObject response = user.save();\n    System.out.println(response);\n  }\n\n  public static void testRemoveWebpush() throws Exception {\n    Suprsend suprClient = new Suprsend(\"api_key\", \"api_secret\");\n    //\n    String distinctId = \"__distinct_id__\";\n    Subscriber user = suprClient.user.getInstance(distinctId);\n    // Webpush token json (VAPID)\n    JSONObject webpush = new JSONObject()\n        .put(\"endpoint\", \"__end_point__\")\n        .put(\"expirationTime\", \"\")\n        .put(\"keys\", new JSONObject()\n            .put(\"p256dh\", \"__p256dh__\")\n            .put(\"auth\", \"__auth_key__\"));\n    //\n    user.removeWebpush(webpush);\n    JSONObject response = user.save();\n    System.out.println(response);\n  }\n\n  public static void testRemoveAndroidpush() throws Exception {\n    Suprsend suprClient = new Suprsend(\"api_key\", \"api_secret\");\n    //\n    String distinctId = \"__distinct_id__\";\n    Subscriber user = suprClient.user.getInstance(distinctId);\n    //\n    user.removeAndroidpush(\"__android_push_key__\");\n    JSONObject res = user.save();\n    System.out.println(res);\n  }\n}\n\n```\n\n#### Response structure\n```json\n{\n    \"success\": true, // if true, request was accepted.\n    \"status\": \"success\",\n    \"status_code\": 202, // http status code\n    \"message\": \"OK\",\n}\n\n{\n    \"success\": false, // error will be present in message\n    \"status\": \"fail\",\n    \"status_code\": 500, // http status code\n    \"message\": \"error message\",\n}\n```\n\n### Track and Send Event\nYou can track and send events to SuprSend platform by using `suprsend.track_event` method.\nAn event is composed of an `eventName`, tracked wrt a user: `distinctId`, with event-attributes: `properties`\nand optional `idempotencyKey`\n\n```java\nimport org.json.JSONObject;\nimport suprsend.Event;\n\n// Example\nString distinctId = \"__uniq_user_id__\"; // Mandatory, Unique id of user in your application\nString eventName = \"__event_name__\";   // Mandatory, name of the event you're tracking\nJSONObject properties = new JSONObject(); // default=null, a json object representing event-attributes\nString idempotencyKey = \"__uuid__\"\nString tenantId = \"__tenant_id__\"\n\nEvent event = new Event(distinctId, eventName, properties);\n// You can also add Idempotency-key\nEvent event = new Event(distinctId, eventName, properties, idempotencyKey);\n// You can also pass the tenantId to be used for templates/notifications\nEvent event = new Event(distinctId, eventName, properties, idempotencyKey, tenantId);\n\n// Send event\nJSONObject res = suprClient.track_event(event);\nSystem.out.println(res);\n```\n\n```json\n// Response structure\n{\n    \"success\": true, // if true, request was accepted.\n    \"status\": \"success\",\n    \"status_code\": 202, // http status code\n    \"message\": \"OK\",\n}\n\n{\n    \"success\": false, // error will be present in message\n    \"status\": \"fail\",\n    \"status_code\": 500, // http status code\n    \"message\": \"error message\",\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuprsend%2Fsuprsend-java-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsuprsend%2Fsuprsend-java-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsuprsend%2Fsuprsend-java-sdk/lists"}