diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 225fdc9..7fa46ec 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -2,6 +2,6 @@ Fixes #
 
 Changes proposed in this pull request:
 
- * 
- * 
- * 
+* 
+* 
+* 
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 50a676f..3883da1 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,6 +1,6 @@
 repos:
   - repo: https://github.com/asottile/pyupgrade
-    rev: v2.0.1
+    rev: v2.1.0
     hooks:
       - id: pyupgrade
         args: ["--py3-plus"]
@@ -18,7 +18,7 @@ repos:
         additional_dependencies: [flake8-2020, flake8-implicit-str-concat]
 
   - repo: https://github.com/asottile/seed-isort-config
-    rev: v1.9.4
+    rev: v2.1.0
     hooks:
       - id: seed-isort-config
 
diff --git a/src/humanize/number.py b/src/humanize/number.py
index ffe257f..f57588e 100644
--- a/src/humanize/number.py
+++ b/src/humanize/number.py
@@ -106,16 +106,23 @@ def intword(value, format="%.1f"):
 
 
 def apnumber(value):
-    """For numbers 1-9, returns the number spelled out. Otherwise, returns the
-    number. This follows Associated Press style.  This always returns a string
-    unless the value was not int-able, unlike the Django filter."""
+    """Converts an integer to Associated Press style.
+
+    Args:
+        value (int, float, string): Integer to convert.
+
+    Returns:
+        str: For numbers 0-9, the number spelled out. Otherwise, the number. This always
+        returns a string unless the value was not int-able, unlike the Django filter.
+    """
     try:
         value = int(value)
     except (TypeError, ValueError):
         return value
-    if not 0 < value < 10:
+    if not 0 <= value < 10:
         return str(value)
     return (
+        _("zero"),
         _("one"),
         _("two"),
         _("three"),
@@ -125,7 +132,7 @@ def apnumber(value):
         _("seven"),
         _("eight"),
         _("nine"),
-    )[value - 1]
+    )[value]
 
 
 def fractional(value):

diff --git a/tests/test_number.py b/tests/test_number.py
index 4b827d3..cdb0d7c 100644
--- a/tests/test_number.py
+++ b/tests/test_number.py
@@ -86,6 +86,7 @@ def test_intword(test_args, expected):
 @pytest.mark.parametrize(
     "test_input, expected",
     [
+        (0, "zero"),
         (1, "one"),
         (2, "two"),
         (4, "four"),

humanize.apnumber(0) should return zero
`humanize.appnumber` returns 0 for 0, while (I think) it should return 'zero':

```pycon
>>> import humanize
>>> humanize.apnumber(0)
'0'
>>> humanize.apnumber(1)
'one'
>>> humanize.apnumber(2)
'two'
>>>
```
tests/test_number.py::test_apnumber[0-zero]
tests/test_number.py::test_ordinal[1-1st] tests/test_number.py::test_ordinal[2-2nd] tests/test_number.py::test_ordinal[3-3rd] tests/test_number.py::test_ordinal[4-4th] tests/test_number.py::test_ordinal[11-11th] tests/test_number.py::test_ordinal[12-12th] tests/test_number.py::test_ordinal[13-13th] tests/test_number.py::test_ordinal[101-101st] tests/test_number.py::test_ordinal[102-102nd] tests/test_number.py::test_ordinal[103-103rd] tests/test_number.py::test_ordinal[111-111th] tests/test_number.py::test_ordinal[something tests/test_number.py::test_ordinal[None-None] tests/test_number.py::test_intcomma[100-100_0] tests/test_number.py::test_intcomma[1000-1,000_0] tests/test_number.py::test_intcomma[10123-10,123_0] tests/test_number.py::test_intcomma[10311-10,311_0] tests/test_number.py::test_intcomma[1000000-1,000,000_0] tests/test_number.py::test_intcomma[1234567.25-1,234,567.25] tests/test_number.py::test_intcomma[100-100_1] tests/test_number.py::test_intcomma[1000-1,000_1] tests/test_number.py::test_intcomma[10123-10,123_1] tests/test_number.py::test_intcomma[10311-10,311_1] tests/test_number.py::test_intcomma[1000000-1,000,000_1] tests/test_number.py::test_intcomma[1234567.1234567-1,234,567.1234567] tests/test_number.py::test_intcomma[None-None] tests/test_number.py::test_intword_powers tests/test_number.py::test_intword[test_args0-100] tests/test_number.py::test_intword[test_args1-1.0 tests/test_number.py::test_intword[test_args2-1.2 tests/test_number.py::test_intword[test_args3-1.3 tests/test_number.py::test_intword[test_args4-1.0 tests/test_number.py::test_intword[test_args5-1.0 tests/test_number.py::test_intword[test_args6-2.0 tests/test_number.py::test_intword[test_args7-1.0 tests/test_number.py::test_intword[test_args8-1.0 tests/test_number.py::test_intword[test_args9-6.0 tests/test_number.py::test_intword[test_args10-1.0 tests/test_number.py::test_intword[test_args11-1.0 tests/test_number.py::test_intword[test_args12-1.3 tests/test_number.py::test_intword[test_args13-3.5 tests/test_number.py::test_intword[test_args14-8.1 tests/test_number.py::test_intword[test_args15-None] tests/test_number.py::test_intword[test_args16-1.23 tests/test_number.py::test_intword[test_args17-100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000] tests/test_number.py::test_apnumber[1-one] tests/test_number.py::test_apnumber[2-two] tests/test_number.py::test_apnumber[4-four] tests/test_number.py::test_apnumber[5-five] tests/test_number.py::test_apnumber[9-nine] tests/test_number.py::test_apnumber[10-10] tests/test_number.py::test_apnumber[7-seven] tests/test_number.py::test_apnumber[None-None] tests/test_number.py::test_fractional[1-1] tests/test_number.py::test_fractional[2.0-2] tests/test_number.py::test_fractional[1.3333333333333333-1 tests/test_number.py::test_fractional[0.8333333333333334-5/6] tests/test_number.py::test_fractional[7-7] tests/test_number.py::test_fractional[8.9-8 tests/test_number.py::test_fractional[ten-ten] tests/test_number.py::test_fractional[None-None] tests/test_number.py::test_scientific[test_args0-1.00 tests/test_number.py::test_scientific[test_args1-1.00 tests/test_number.py::test_scientific[test_args2-5.50 tests/test_number.py::test_scientific[test_args3-5.78 tests/test_number.py::test_scientific[test_args4-1.00 tests/test_number.py::test_scientific[test_args5-9.90 tests/test_number.py::test_scientific[test_args6-3.00 tests/test_number.py::test_scientific[test_args7-foo] tests/test_number.py::test_scientific[test_args8-None] tests/test_number.py::test_scientific[test_args9-1.0 tests/test_number.py::test_scientific[test_args10-3.0 tests/test_number.py::test_scientific[test_args11-1 tests/test_number.py::test_scientific[test_args12-3