## Bug description

While exploring the onboarding/setup funnel, I found what seems to be a bug capturing events (perhaps it's an API request issue). When I send this request, the events don't get saved (checked directly on the database).

```
POST <host>/capture
```

```json
{
    "api_key": "API_KEY_HERE",
    "event": "Purchase item",
    "properties": {
        "distinct_id": "845555992929291"
    }
}
```


## Expected behavior
- Events should be correctly saved to the database. If on the onboarding flow, continue the user and complete the onboarding.
- If the request is malformed or an invalid API key is sent, I should not receive a 200 status code. _There seems to be an issue with the request and therefore the event is not saved_, however **if I add a random non-existent key as the API key (e.g. `invalid`), I still get a 200 and a 1 in the response.**  


## Reproduction environment
- Tested using the one-line Docker deploy.
```bash
doker run -t -i --rm --publish 8000:8000 -v postgres:/var/lib/postgresql posthog/posthog:preview
```
- Tested on the cloud version with the same result (please reach out privately if you want to know the account's email address).

posthog/api/capture.py
if len(timestamp) > 11:  
        timestamp_number = float(timestamp) / 1000
    else:
        timestamp_number = int(timestamp)
    return datetime.fromtimestamp(timestamp_number, timezone.utc)
def _get_sent_at(data, request) -> Optional[datetime]:
    if request.GET.get("_"):  
        sent_at = request.GET["_"]
    elif isinstance(data, dict) and data.get("sent_at"):  
        sent_at = data["sent_at"]
    elif request.POST.get("sent_at"):  
        sent_at = request.POST["sent_at"]
    else:
        return None
    if re.match(r"^[0-9]+$", sent_at):
        return _datetime_from_seconds_or_millis(sent_at)
    return parser.isoparse(sent_at)
def _get_token(data, request) -> Optional[str]:
    if request.POST.get("api_key"):
        return request.POST["api_key"]
    if isinstance(data, list) and len(data) > 0:
        return data[0]["properties"]["token"]  
    if data.get("$token"):
        return data["$token"]  
    if data.get("api_key"):
        return data["api_key"]  
    if data.get("properties") and data["properties"].get("token"):
        return data["properties"]["token"]  
    return None
def _get_distinct_id(data: Dict[str, Any]) -> str: