ODK Central - How to delete a submission

@jniles There is no rate-limiting on the API, so it should go by quickly. I'm not a Python expert, but here's a quick script that rejects submissions before today.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from datetime import datetime, date
from time import strftime
import json
import pytz
import random
import requests
import sys

server_url = "https://example.getodk.cloud"
admin = "admin@example.com"
password = "horsestaplebatterygenerator"
form_url = "/v1/projects/1/forms/my_form"

review_states = ["approved", "hasIssues", "rejected"]


def get_admin_token():

    admin_token_response = requests.post(
        server_url + "/v1/sessions",
        data=json.dumps({"email": admin, "password": password}),
        headers={"Content-Type": "application/json"},
    )

    if admin_token_response.status_code == 200:
        return admin_token_response.json()["token"]


def get_submissions(admin_token):

    submissions_response = requests.get(
        server_url + form_url + "/submissions/",
        headers={
            "Content-Type": "application/json",
            "Authorization": "Bearer " + admin_token,
        },
    )

    return submissions_response


def review_submission(admin_token, instance_id):

    review_submission_response = requests.patch(
        server_url + form_url + "/submissions/" + str(instance_id),
        data=json.dumps({"reviewState": review_states[2]}),
        headers={
            "Content-Type": "application/json",
            "Authorization": "Bearer " + admin_token,
        },
    )

    return review_submission_response


def error(error):
    print(strftime("%Y-%m-%d-%H-%M-%S"), error)
    sys.exit()


# don't do this. cache the token!
admin_token = get_admin_token()
if not admin_token:
    error("get_admin_token")

submissions = get_submissions(admin_token)
for submission in submissions.json():
    submission_date = datetime.strptime(
        submission["createdAt"], "%Y-%m-%dT%H:%M:%S.%f%z"
    )
    if submission_date < datetime.now(pytz.utc):
        review = review_submission(admin_token, submission["instanceId"])
        if review.status_code != 200:
            print(review.text)
2 Likes