Create file path and filename in JSON and send it to Discord
There's comments above report which should really be a docstring,
since they explain the function's workings.
The default parameters for report are a bit suspect:

The expression payload if payload else None is redundant, can just
be payload then.
str(reason) for the default value None for reason is odd,
maybe that also needs special casing and could be left out of the
JSON body?


Does the value from payload[&quot;store&quot;] need escaping / is it safe?
E.g. if it's coming from the server you'd have to validate it before
using it as part of a filename to prevent attacks.
I feel it's a bit over-commented.  Consider &quot;Create file path and
filename&quot; - that's basically what I can discern from the block below,
same as &quot;Check if the path already exists&quot;, that's basically the same
as the line if not os.path.exists(file_path).  Consider splitting
off smaller functions that have descriptive names instead of one huge
function, that way you wouldn't have to comment on blocks of code (and
would instead use the function names as descriptors).
with is used, good.
os.makedirs won't do anything if the path already exists, so the
check before it is redundant.
Consider making webhook and embed (global) constants, they
otherwise don't seem to add anything to the function.
After writing the JSON to the file, it's immediately being read back
for the webhook.add_file - avoid that unnecessary computation and
reuse the in-memory representation of the data.
Again, consider splitting the setup phase and the while True loop
into separate functions to help understanding and, potentially,
testability.
The only thing I'd have to complain about in the loop is the fetching
of the retry timeout value: Be conservative in what you expect.  The
server doesn't have to send that value and if it doesn't you'll get
exceptions.  Consider providing a default value and a maximum sleep
amount to not open yourself up to a malicious server (yes, that's a
stretch, but still).
Just noticed:  You're importing typing.List just to check
isinstance - AFAIK you can just use isinstance(response, list)
without the need to import the typing module.  Of course using
typing is great, you'd just have annotate your functions most likely
and use mypy or a similar type-checker ...