diff --git a/doc/CHANGES-staging/res_stasis_playback.txt b/doc/CHANGES-staging/res_stasis_playback.txt
new file mode 100644
index 0000000000000000000000000000000000000000..cd5fa1102a9fe0ce812172ac57492c1bf5dbc2e4
--- /dev/null
+++ b/doc/CHANGES-staging/res_stasis_playback.txt
@@ -0,0 +1,9 @@
+Subject: PlaybackFinished has a new error state
+
+The PlaybackFinished event now has a new state "failed"
+that is used when the sound file was not played due to an error.
+Before the state on PlaybackFinished was always "done".
+
+In case of multiple sound files to be played,
+the PlaybackFinished is sent only once in the end of the list,
+even in case of error.
diff --git a/include/asterisk/stasis_app_playback.h b/include/asterisk/stasis_app_playback.h
index 0038fd6d0810bbead8249570d16e6ae523ae49fd..ab49b09ab7d80af896369df89fb2cb6deb571137 100644
--- a/include/asterisk/stasis_app_playback.h
+++ b/include/asterisk/stasis_app_playback.h
@@ -45,6 +45,8 @@ enum stasis_app_playback_state {
 	STASIS_PLAYBACK_STATE_CONTINUING,
 	/*! The media has stopped playing */
 	STASIS_PLAYBACK_STATE_COMPLETE,
+	/*! The media has stopped because of an error playing the file */
+	STASIS_PLAYBACK_STATE_FAILED,
 	/*! The playback was canceled. */
 	STASIS_PLAYBACK_STATE_CANCELED,
 	/*! The playback was stopped. */
diff --git a/res/res_stasis_playback.c b/res/res_stasis_playback.c
index d60a49a519c2e7718a15e2ed482811db2ba21df2..2013bb717a0a6841c6a5c6278ef39983cc479fb8 100644
--- a/res/res_stasis_playback.c
+++ b/res/res_stasis_playback.c
@@ -107,6 +107,8 @@ static struct ast_json *playback_to_json(struct stasis_message *message,
 		type = "PlaybackContinuing";
 	} else if (!strcmp(state, "done")) {
 		type = "PlaybackFinished";
+	} else if (!strcmp(state, "failed")) {
+		type = "PlaybackFinished";
 	} else {
 		return NULL;
 	}
@@ -202,6 +204,8 @@ static const char *state_to_string(enum stasis_app_playback_state state)
 		return "paused";
 	case STASIS_PLAYBACK_STATE_CONTINUING:
 		return "continuing";
+	case STASIS_PLAYBACK_STATE_FAILED:
+		return "failed";
 	case STASIS_PLAYBACK_STATE_STOPPED:
 	case STASIS_PLAYBACK_STATE_COMPLETE:
 	case STASIS_PLAYBACK_STATE_CANCELED:
@@ -275,7 +279,11 @@ static void playback_final_update(struct stasis_app_playback *playback,
 		} else {
 			ast_log(LOG_WARNING, "%s: Playback failed for %s\n",
 				uniqueid, playback->media);
-			playback->state = STASIS_PLAYBACK_STATE_STOPPED;
+			if (playback->media_index == AST_VECTOR_SIZE(&playback->medias) - 1) {
+				playback->state = STASIS_PLAYBACK_STATE_FAILED;
+			} else {
+				playback->state = STASIS_PLAYBACK_STATE_CONTINUING;
+			}
 		}
 	}
 
@@ -701,6 +709,7 @@ playback_opreation_cb operations[STASIS_PLAYBACK_STATE_MAX][STASIS_PLAYBACK_MEDI
 	[STASIS_PLAYBACK_STATE_PAUSED][STASIS_PLAYBACK_UNPAUSE] = playback_unpause,
 
 	[STASIS_PLAYBACK_STATE_COMPLETE][STASIS_PLAYBACK_STOP] = playback_noop,
+	[STASIS_PLAYBACK_STATE_FAILED][STASIS_PLAYBACK_STOP] = playback_noop,
 	[STASIS_PLAYBACK_STATE_CANCELED][STASIS_PLAYBACK_STOP] = playback_noop,
 	[STASIS_PLAYBACK_STATE_STOPPED][STASIS_PLAYBACK_STOP] = playback_noop,
 };
diff --git a/rest-api/api-docs/playbacks.json b/rest-api/api-docs/playbacks.json
index a78dcae7103ae90f958a2fa0d7e91796f300a901..793986fcca79555c225584c82280e13a962b01be 100644
--- a/rest-api/api-docs/playbacks.json
+++ b/rest-api/api-docs/playbacks.json
@@ -154,7 +154,8 @@
 							"queued",
 							"playing",
 							"continuing",
-							"done"
+							"done",
+							"failed"
 						]
 					}
 				}