diff --git a/pom.xml b/pom.xml
index c35d7bc3b..703b5e825 100644
--- a/pom.xml
+++ b/pom.xml
@@ -390,7 +390,7 @@
UTF-8
- 2.21.4
+ 2.21.5
4.12.0
4.7.7
3.6.1
diff --git a/src/main/java/com/mindee/v2/parsing/inference/FailedInferenceResponse.java b/src/main/java/com/mindee/v2/parsing/inference/FailedInferenceResponse.java
new file mode 100644
index 000000000..5994a84bf
--- /dev/null
+++ b/src/main/java/com/mindee/v2/parsing/inference/FailedInferenceResponse.java
@@ -0,0 +1,56 @@
+package com.mindee.v2.parsing.inference;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.mindee.v1.parsing.common.LocalDateTimeDeserializer;
+import com.mindee.v2.parsing.CommonResponse;
+import com.mindee.v2.parsing.error.ErrorResponse;
+import java.time.LocalDateTime;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Represents an asynchronous polling response.
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class FailedInferenceResponse extends CommonResponse {
+ /**
+ * UUID of the failed inference.
+ */
+ @JsonProperty("inference_id")
+ String inferenceId;
+
+ /**
+ * UUID of the model used.
+ */
+ @JsonProperty("model_id")
+ String modelId;
+
+ /**
+ * Name of the input file.
+ */
+ @JsonProperty("file_name")
+ String fileName;
+
+ /**
+ * Alias sent for the file, if any
+ */
+ @JsonProperty("file_alias")
+ String fileAlias;
+
+ /**
+ * Problem details for the failure, if available.
+ */
+ @JsonProperty("error")
+ ErrorResponse error;
+
+ /**
+ * Date and time when the inference was started.
+ */
+ @JsonProperty("created_at")
+ @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+ LocalDateTime createdAt;
+}
diff --git a/src/test/java/com/mindee/v2/parsing/FailedInferenceResponseTest.java b/src/test/java/com/mindee/v2/parsing/FailedInferenceResponseTest.java
new file mode 100644
index 000000000..47f85abe0
--- /dev/null
+++ b/src/test/java/com/mindee/v2/parsing/FailedInferenceResponseTest.java
@@ -0,0 +1,34 @@
+package com.mindee.v2.parsing;
+
+import static com.mindee.TestingUtilities.getV2ResourcePath;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import com.mindee.v2.parsing.inference.FailedInferenceResponse;
+import java.io.IOException;
+import java.time.LocalDateTime;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+@DisplayName("MindeeV2 - Failed Inference Tests")
+public class FailedInferenceResponseTest {
+ @Test
+ @DisplayName("properties must be valid")
+ void whenFailed_mustLoad() throws IOException {
+ var localResponse = new LocalResponse(
+ getV2ResourcePath("errors/webhook_error_500_failed.json")
+ );
+ var response = localResponse.deserializeResponse(FailedInferenceResponse.class);
+ assertNotNull(response);
+ assertEquals("12345678-1234-1234-1234-123456789ABC", response.getInferenceId());
+ assertEquals("default_sample.jpg", response.getFileName());
+ assertEquals("dummy-alias.jpg", response.getFileAlias());
+ assertEquals("dummy-alias.jpg", response.getFileAlias());
+ assertInstanceOf(LocalDateTime.class, response.getCreatedAt());
+ assertNotNull(response.getError());
+ assertNotNull(response.getError());
+ assertEquals(500, response.getError().getStatus());
+ assertEquals("500-012", response.getError().getCode());
+ }
+}
diff --git a/src/test/resources b/src/test/resources
index 2d7fcf8f5..e41ab97c2 160000
--- a/src/test/resources
+++ b/src/test/resources
@@ -1 +1 @@
-Subproject commit 2d7fcf8f591f6d7f40e39862965325e6a8a21874
+Subproject commit e41ab97c2833f15ea5c4edf221c2d197d212f632