diff --git a/captcha.api.php b/captcha.api.php
new file mode 100644
index 0000000..8358d45
--- /dev/null
+++ b/captcha.api.php
@@ -0,0 +1,133 @@
+<?php
+
+/**
+ * @file
+ * Hooks provided by the Captcha module.
+ */
+
+/**
+ * @addtogroup hooks
+ * @{
+ */
+
+/**
+ * The hook is the only required function if you want to integrate with the base CAPTCHA module
+ *
+ * Modules may make changes to the comment before it is saved to the database.
+ * Functionality depends on the first argument $op:
+ * 'list': you should return an array of possible challenge types that your module implements.
+ * 'generate': generate a challenge.
+ *  You should return an array that offers form elements and the solution
+ *    of your challenge, defined by the second argument $captcha_type.
+ *    The returned array $captcha should have the following items:
+ *    $captcha['solution']: this is the solution of your challenge
+ *    $captcha['form']: an array of the form elements you want to add to the form.
+ *      There should be a key 'captcha_response' in this array, which points to
+  *      the form element where the user enters his answer.
+ *    An optional additional argument $captcha_sid with the captcha session ID is
+ *    available for more advanced challenges (e.g. the image CAPTCHA uses this
+ *    argument, see image_captcha_captcha()).
+ **/
+
+/**
+ * Implementation of hook_captcha().
+ */
+function hook_captcha_captcha($op, $captcha_type='') {
+  switch ($op) {
+    case 'list':
+      return array('Foo CAPTCHA');
+    case 'generate':
+      if ($captcha_type == 'Foo CAPTCHA') {
+        $captcha = array();
+        $captcha['solution'] = 'foo';
+        $captcha['form']['captcha_response'] = array(
+          '#type' => 'textfield',
+          '#title' => t('Enter "foo"'),
+          '#required' => TRUE,
+        );
+        return $captcha;
+      }
+      break;
+  }
+}
+
+/**
+ * Optional: custom response validation
+ * The CAPTCHA module provides an option for case sensitive and case insensitve
+ * validation of the responses. If this is not sufficient, you can provide
+ * your own validation function with the 'captcha_validate' field, illustrated
+ * by the following example:
+ **/
+
+/**
+ * Implementation of hook_captcha().
+ */
+function foo_captcha_captcha($op, $captcha_type='') {
+  switch ($op) {
+    ...
+    case 'generate':
+      if ($captcha_type == 'Foo CAPTCHA') {
+        $captcha = array();
+        $captcha['solution'] = ...
+        $captcha['form'] = ...
+        $captcha['captcha_validate'] = 'foo_captcha_custom_validation';
+        return $captcha;
+      }
+      break;
+  }
+}
+
+/**
+ * Custom CAPTCHA validation function.
+ *
+ * @param solution the solution for the challenge as reported by hook_captcha('generate', ...).
+ * @param response the answer given by the user.
+ * @return TRUE on succes and FALSE on failure.
+ */
+function foo_captcha_custom_validation($solution, $response) {
+  return $response == "foo" || $response == "bar";
+}
+
+
+
+/**
+ * Hook into CAPTCHA placement
+ * The CAPTCHA module attempts to place the CAPTCHA element in an appropriate spot
+ * at the bottom of the targeted form, but this automatic detection may be insufficient
+ * for complex forms.
+ * The hook_captcha_placement_map hook allows to define the placement of the CAPTCHA element
+ * as desired. The hook should return an array, mapping form IDs to placement arrays, which are
+ * associative arrays with the following fields:
+ *   - 'path': path (array of path items) of the form's container element in which the
+ *     CAPTCHA element should be inserted.
+ *   - 'key': the key of the element before which the CAPTCHA element
+ *     should be inserted. If the field 'key' is undefined or NULL, the CAPTCHA will
+ *     just be appended in the container.
+ *   - 'weight': if 'key' is not NULL: should be the weight of the element defined by 'key'.
+ *     If 'key' is NULL and weight is not NULL/unset: set the weight property of the CAPTCHA element
+ *     to this value.
+ * 
+ * This will place the CAPTCHA element
+ * - in the 'my_fancy_form' form inside the container $form['items']['buttons'],
+ *   just before the element $form['items']['buttons']['sacebutton'].
+ * - in the 'another_form' form at the toplevel of the form, with a weight 34.
+ **/
+
+/**
+ * Implementation of hook_captcha_placement_map
+ */
+function hook_captcha_placement_map() {
+  return array(
+    'my_fancy_form' => array(
+      'path' => array('items', 'buttons'),
+      'key' => 'savebutton',
+    ),
+    'another_form' => array(
+      'path' => array(),
+      'weight' => 34,
+    ),
+  );
+}
+/**
+ * @} End of "addtogroup hooks".
+ */
