diff --git a/src/main/java/co/lettermint/api/ApiClient.java b/src/main/java/co/lettermint/api/ApiClient.java index 0cbbc42..cc81c56 100644 --- a/src/main/java/co/lettermint/api/ApiClient.java +++ b/src/main/java/co/lettermint/api/ApiClient.java @@ -145,6 +145,10 @@ public RescheduleMessageResponse cancel(String messageId) { return client.post("/messages/" + segment(messageId) + "/cancel", null, RescheduleMessageResponse.class); } + public ProcessInboundMessageResponse process(String messageId) { + return client.post("/messages/" + segment(messageId) + "/process", null, ProcessInboundMessageResponse.class); + } + public MessageEventsResponse events(String messageId) { return events(messageId, null); } diff --git a/src/main/java/co/lettermint/models/api/MessageEventType.java b/src/main/java/co/lettermint/models/api/MessageEventType.java index 7d71fb3..9d4ba2a 100644 --- a/src/main/java/co/lettermint/models/api/MessageEventType.java +++ b/src/main/java/co/lettermint/models/api/MessageEventType.java @@ -22,6 +22,7 @@ public final class MessageEventType { public static final String INBOUNDRECEIVED = "inbound_received"; public static final String INBOUNDQUEUED = "inbound_queued"; public static final String INBOUNDSPAMBLOCKED = "inbound_spam_blocked"; + public static final String INBOUNDRELEASED = "inbound_released"; public static final String INBOUNDPROCESSED = "inbound_processed"; public static final String INBOUNDRETRY = "inbound_retry"; diff --git a/src/main/java/co/lettermint/models/api/MessageStatus.java b/src/main/java/co/lettermint/models/api/MessageStatus.java index e6d743a..1232cdd 100644 --- a/src/main/java/co/lettermint/models/api/MessageStatus.java +++ b/src/main/java/co/lettermint/models/api/MessageStatus.java @@ -4,6 +4,7 @@ public final class MessageStatus { public static final String SCHEDULED = "scheduled"; public static final String PENDING = "pending"; public static final String QUEUED = "queued"; + public static final String QUARANTINED = "quarantined"; public static final String SUPPRESSED = "suppressed"; public static final String PROCESSED = "processed"; public static final String DELIVERED = "delivered"; diff --git a/src/main/java/co/lettermint/models/api/ProcessInboundMessageResponse.java b/src/main/java/co/lettermint/models/api/ProcessInboundMessageResponse.java new file mode 100644 index 0000000..f120247 --- /dev/null +++ b/src/main/java/co/lettermint/models/api/ProcessInboundMessageResponse.java @@ -0,0 +1,11 @@ +package co.lettermint.models.api; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Map; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class ProcessInboundMessageResponse { + @JsonProperty("data") + public Map data; +} diff --git a/src/test/java/co/lettermint/ApiClientTest.java b/src/test/java/co/lettermint/ApiClientTest.java index 406e980..06d2308 100644 --- a/src/test/java/co/lettermint/ApiClientTest.java +++ b/src/test/java/co/lettermint/ApiClientTest.java @@ -150,6 +150,7 @@ void schedulesMessageChangesWithTypedResponses() throws Exception { try (MockWebServer server = new MockWebServer()) { server.enqueue(new MockResponse().setHeader("Content-Type", "application/json").setBody("{\"message_id\":\"msg/id\",\"status\":\"scheduled\",\"scheduled_at\":\"2026-08-27T09:00:00Z\"}")); server.enqueue(new MockResponse().setHeader("Content-Type", "application/json").setBody("{\"message_id\":\"msg/id\",\"status\":\"canceled\",\"scheduled_at\":null}")); + server.enqueue(new MockResponse().setHeader("Content-Type", "application/json").setBody("{\"data\":{\"message_id\":\"msg/id\",\"status\":\"queued\",\"webhook_target_count\":1}}")); server.start(); ApiClient api = Lettermint.api("api-token", server.url("/v1").toString()); @@ -157,6 +158,7 @@ void schedulesMessageChangesWithTypedResponses() throws Exception { payload.scheduledAt = "2026-08-27T09:00:00Z"; assertEquals("scheduled", api.messages().reschedule("msg/id", payload).status); assertEquals("canceled", api.messages().cancel("msg/id").status); + assertEquals("queued", api.messages().process("msg/id").data.get("status")); RecordedRequest reschedule = server.takeRequest(); assertEquals("PATCH", reschedule.getMethod()); @@ -165,6 +167,9 @@ void schedulesMessageChangesWithTypedResponses() throws Exception { RecordedRequest cancel = server.takeRequest(); assertEquals("POST", cancel.getMethod()); assertEquals("/v1/messages/msg%2Fid/cancel", cancel.getPath()); + RecordedRequest process = server.takeRequest(); + assertEquals("POST", process.getMethod()); + assertEquals("/v1/messages/msg%2Fid/process", process.getPath()); } } @@ -270,6 +275,7 @@ void apiExposesDocumentedOperations() throws Exception { methods.put("message.show", api.messages().getClass().getMethod("retrieve", String.class)); methods.put("rescheduleMessage", api.messages().getClass().getMethod("reschedule", String.class, co.lettermint.models.api.RescheduleMessageRequest.class)); methods.put("cancelScheduledMessage", api.messages().getClass().getMethod("cancel", String.class)); + methods.put("processInboundMessage", api.messages().getClass().getMethod("process", String.class)); methods.put("message.events", api.messages().getClass().getMethod("events", String.class)); methods.put("message.source", api.messages().getClass().getMethod("source", String.class)); methods.put("message.html", api.messages().getClass().getMethod("html", String.class));