diff --git a/tests/Makefile b/tests/Makefile
index cffa5412136ebbb86788225456a0c859ef349e7f..f4f34a66b395f8a0c29a7ee4724100acad4544af 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -16,7 +16,8 @@ ffservertest: ffserver$(EXESUF) tests/vsynth1/00.pgm tests/data/asynth1.sw
 	@echo
 	$(SRC_PATH)/tests/ffserver-regression.sh $(FFSERVER_REFFILE) $(SRC_PATH)/tests/ffserver.conf
 
-OBJDIRS += tests/data tests/vsynth1 tests/data/filtergraphs
+APITESTSDIR := tests/api
+OBJDIRS += tests/data tests/vsynth1 tests/data/filtergraphs $(APITESTSDIR)
 
 $(VREF): tests/videogen$(HOSTEXESUF) | tests/vsynth1
 	$(M)./$< 'tests/vsynth1/'
@@ -89,6 +90,8 @@ FILTERDEMDECENCMUX = $(call ALLYES, $(1:%=%_FILTER) $(2)_DEMUXER $(3)_DECODER $(
 
 PARSERDEMDEC       = $(call ALLYES, $(1)_PARSER $(2)_DEMUXER $(3)_DECODER)
 
+include $(SRC_PATH)/$(APITESTSDIR)/Makefile
+
 include $(SRC_PATH)/tests/fate/acodec.mak
 include $(SRC_PATH)/tests/fate/vcodec.mak
 include $(SRC_PATH)/tests/fate/avformat.mak
@@ -218,7 +221,7 @@ lcov-reset:
 
 clean:: testclean
 
-testclean:
+testclean::
 	$(RM) -r tests/vsynth1 tests/data tools/lavfi-showfiltfmts$(EXESUF)
 	$(RM) $(CLEANSUFFIXES:%=tests/%)
 	$(RM) $(TESTTOOLS:%=tests/%$(HOSTEXESUF))
diff --git a/tests/api/Makefile b/tests/api/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..7010b00178b9079ea798a7ba5ad7dac91739f664
--- /dev/null
+++ b/tests/api/Makefile
@@ -0,0 +1,15 @@
+APITESTPROGS += $(APITESTPROGS-yes)
+
+APITESTOBJS  := $(APITESTOBJS:%=$(APITESTSDIR)%) $(APITESTPROGS:%=$(APITESTSDIR)/%-test.o)
+APITESTPROGS := $(APITESTPROGS:%=$(APITESTSDIR)/%-test$(EXESUF))
+-include $(wildcard $(APITESTOBJS:.o=.d))
+
+$(APITESTOBJS): | $(sort $(dir $(APITESTOBJS)))
+$(APITESTOBJS) $(APITESTOBJS:.o=.i): CPPFLAGS += -DTEST
+$(APITESTOBJS) $(APITESTOBJS:.o=.i): CFLAGS += -Umain
+
+$(APITESTPROGS): %$(EXESUF): %.o $(EXEOBJS)
+	$(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $(filter %.o,$^) $(FF_DEP_LIBS) $(FFEXTRALIBS) $(ELIBS)
+
+testclean::
+	$(RM) $(addprefix $(APITESTSDIR)/,$(CLEANSUFFIXES) *-test$(EXESUF))