{"id":52050021,"url":"https://github.com/frain-dev/convoy-java","last_synced_at":"2026-08-02T12:01:19.477Z","repository":{"id":372374634,"uuid":"1299386213","full_name":"frain-dev/convoy-java","owner":"frain-dev","description":"Convoy SDK for Java (webhook signature verification; full API client coming)","archived":false,"fork":false,"pushed_at":"2026-07-20T20:33:24.000Z","size":280,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-20T21:26:38.057Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/frain-dev.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":"2026-07-13T14:30:35.000Z","updated_at":"2026-07-20T20:34:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/frain-dev/convoy-java","commit_stats":null,"previous_names":["frain-dev/convoy-java"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/frain-dev/convoy-java","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frain-dev%2Fconvoy-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frain-dev%2Fconvoy-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frain-dev%2Fconvoy-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frain-dev%2Fconvoy-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/frain-dev","download_url":"https://codeload.github.com/frain-dev/convoy-java/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frain-dev%2Fconvoy-java/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36192499,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-02T02:00:06.915Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2026-08-02T12:01:18.693Z","updated_at":"2026-08-02T12:01:19.471Z","avatar_url":"https://github.com/frain-dev.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Convoy Java SDK\n\nOfficial Convoy SDK for Java: **webhook signature verification** (hand-written)\nand an **API client** generated from Convoy's OpenAPI spec via\n[OpenAPI Generator](https://openapi-generator.tech/) (java, `native` library —\nJDK `java.net.http`, Jackson).\n\n## Install\n\nGradle (Kotlin DSL):\n\n```kotlin\ndependencies {\n    implementation(\"io.github.frain-dev:convoy:0.2.0\")\n}\n```\n\nMaven:\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003eio.github.frain-dev\u003c/groupId\u003e\n  \u003cartifactId\u003econvoy\u003c/artifactId\u003e\n  \u003cversion\u003e0.2.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## Use the API client\n\n```java\nimport com.getconvoy.api.EventsApi;\nimport com.getconvoy.client.ApiClient;\nimport com.getconvoy.models.ModelsCreateEvent;\n\nimport java.util.Map;\n\nApiClient client = new ApiClient();\n// Default base URI is https://us.getconvoy.cloud/api; point elsewhere for\n// EU cloud or self-hosted instances.\nclient.updateBaseUri(\"https://us.getconvoy.cloud/api\");\nclient.setRequestInterceptor(b -\u003e b.header(\"Authorization\", \"Bearer \" + apiKey));\n\nEventsApi events = new EventsApi(client);\nevents.createEndpointEvent(\"project-id\", new ModelsCreateEvent()\n        .endpointId(\"endpoint-id\")\n        .eventType(\"invoice.paid\")\n        .data(Map.of(\"amount\", 100, \"currency\", \"USD\")));\n```\n\n## Verify webhook signatures\n\nVerify with the raw request body, before parsing it. `verify` returns `true`\nfor a valid signature; simple mode returns `false` on a mismatch and advanced\nmode throws `WebhookVerificationException`. It fails closed either way.\n\n```java\nimport com.getconvoy.webhook.Webhook;\nimport com.getconvoy.webhook.WebhookVerificationException;\n\nWebhook webhook = new Webhook(\"endpoint-secret\");\n\ntry {\n    if (!webhook.verify(rawBody, request.getHeader(\"X-Convoy-Signature\"))) {\n        // reject the request\n    }\n    // process the event\n} catch (WebhookVerificationException e) {\n    // reject the request\n}\n```\n\nConstructor options mirror the other Convoy SDKs:\n\n```java\n// secret, hash (SHA256|SHA512), encoding (hex|base64), tolerance (seconds)\nnew Webhook(\"endpoint-secret\", \"SHA512\", \"base64\", 300);\n```\n\n## Development\n\n```bash\n./gradlew test\n```\n\nTests verify against `signature-vectors.json`, a shared cross-SDK vector set\ngenerated from the server signing code so every Convoy SDK verifies identically.\n\n### Regenerating the API client\n\nThe client (`com.getconvoy.api`, `com.getconvoy.client`, `com.getconvoy.models`)\nis generated; do not edit it by hand. The hand-written verify package\n(`com.getconvoy.webhook`) is never touched by generation.\n\nCI on `frain-dev/convoy` dispatches `sdk_generation.yaml` when OpenAPI\nartifacts change. Locally:\n\n```bash\n./scripts/generate.sh   # requires java 17+, curl, rsync\n./gradlew test\n```\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrain-dev%2Fconvoy-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrain-dev%2Fconvoy-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrain-dev%2Fconvoy-java/lists"}