Documents and signing
signing.events.listList the audit events of one envelope: created, prepared, sent, email accepted/delivered, viewed, code sent, incorrect code, link locked or unlocked, verified, consented, signed, declined, reminded, resent, voided, expired, finalizing stopped or restarted, completed, downloaded. order oldest (default) pages forward with afterId; order newest pages back from the latest event with beforeId. Returns hasMore.
GET POST /api/v1/accounting/signing.events.listCopy Permissions
accounting:read
Who can call it
admin, finance
Retries
Safe to retry: it only reads
MCP
accounting_signing_events_list
Fields envelopeIdstring (ID) Required
The ID of a document sent for signature, from signing.envelopes.list.
orderenum
oldest newest
Default "oldest"
afterIdinteger
0 to 9007199254740991 · Default 0
beforeIdinteger
1 to 9007199254740991
limitinteger
How many results to return at most.
1 to 500 · Default 200
Example cURL Node.js Python
Copy curl -G https://app.getoatmilk.com/api/v1/accounting/signing.events.list \
-H "Authorization: Bearer $OATMILK_API_KEY" \
--data-urlencode 'envelopeId=9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d' const response = await fetch ( "https://app.getoatmilk.com/api/v1/accounting/signing.events.list?envelopeId=9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d" , {
headers : {
Authorization : `Bearer ${process.env.OATMILK_API_KEY}` ,
},
});
const { data, error } = await response. json ();
if (! response. ok) throw new Error ( `${error.code}: ${error.message}` );
console. log ( data); import os
import requests
response = requests. get (
"https://app.getoatmilk.com/api/v1/accounting/signing.events.list" ,
headers={
"Authorization" : f"Bearer {os.environ['OATMILK_API_KEY']}" ,
},
params={
"envelopeId" : "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d" ,
},
timeout= 30 ,
)
payload = response. json ()
if not response. ok:
raise RuntimeError ( f"{payload['error']['code']}: {payload['error']['message']}" )
print ( payload[ "data" ]) Response Copy {
"data" : { … }
} Try it Checks your input with this action’s real schema and answers like the API, with synthetic data. No key needed, and nothing changes.
Simulate request GET /api/v1/accounting/signing.events.list
cURL Node.js Python
Copy curl -G https://app.getoatmilk.com/api/v1/accounting/signing.events.list \
-H "Authorization: Bearer $OATMILK_API_KEY" \
--data-urlencode 'envelopeId=9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d' const response = await fetch ( "https://app.getoatmilk.com/api/v1/accounting/signing.events.list?envelopeId=9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d" , {
headers : {
Authorization : `Bearer ${process.env.OATMILK_API_KEY}` ,
},
});
const { data, error } = await response. json ();
if (! response. ok) throw new Error ( `${error.code}: ${error.message}` );
console. log ( data); import os
import requests
response = requests. get (
"https://app.getoatmilk.com/api/v1/accounting/signing.events.list" ,
headers={
"Authorization" : f"Bearer {os.environ['OATMILK_API_KEY']}" ,
},
params={
"envelopeId" : "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d" ,
},
timeout= 30 ,
)
payload = response. json ()
if not response. ok:
raise RuntimeError ( f"{payload['error']['code']}: {payload['error']['message']}" )
print ( payload[ "data" ]) More in Documents and signing .