Abstract : Despite recent advances in program certification, testing remains a widely-used component of the software development cycle. Various flavours of testing exist: popular ones include unit testing, which consists in manually crafting test cases for specific parts of the code base, as well as QuickCheck-style testing, where instances ofa type are automatically generated to serve as test inputs. These methods of testing can be thought of as internal testing: the test routines need to access the internal representation of the data-structures that are used by the functions under test. They can also be thought of as per-function testing:a test suite is built(by hand, or automatically) for each function that must be tested.We propose a new method of external testing that applies at the level of the module interface. The core of our work is a small embedded domain-specific language to describe APIs, i.e., functions and data-types. Then, these API descriptions are used to drive generation of test-cases.