So I thought of a workaround using nested loops shortly after posting this. I'm going to leave this open because I think that being aware of retries in runtime should be possible, but I wanted to post the solution for anyone else stuck:
---
# file: tasks/main.yml
- name: Include API configuration items
include_tasks: configure_api_item.yml
loop: "{{ my_api_items }}"
loop_control:
loop_var: __api_item
---
# file: tasks/configure_api_item.yml
- name: Configure API item
uri:
url: <endpoint>
method: "{{ __method }}"
headers:
- <header1>
- <header2>
body: <body>
loop:
- POST
- PUT
register: __results
changed_when:
- __results.status is defined
- __results.status == 201
failed_when:
- __results.status is defined
- __results.status != 200
- __results.status != 201
- __results.status != 409