API Reference › Servicing Plane › Portal contracts › Exchange an upload link for a session Exchange an upload link for a session POST https://sandbox.api.lendeasy.ai /v1/servicing/borrower-document-uploads/exchange Implemented Connector callback Connector authority ·Single-use emailed link secret carried in the request body
Exchanges the single-purpose emailed link secret for a short-lived session bound to one case, one customer, and one evidence purpose, returning borrower-safe upload instructions. Refusals are a flat 200 with a closed reason so a probing caller learns nothing about which guess was closer.
cURL Node Python
Request
curl -X POST https://sandbox.api.lendeasy.ai /v1/servicing/borrower-document-uploads/exchange \
-H "X-LendEasy-Voice-Task-Token: $DISPATCH_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"linkToken": "<link secret from the emailed URL fragment>"
}' await fetch(`https://sandbox.api.lendeasy.ai /v1/servicing/borrower-document-uploads/exchange` , {
method: "POST" ,
headers: { "X-LendEasy-Voice-Task-Token" : dispatchToken, "Content-Type" : "application/json" },
body: JSON.stringify({
"linkToken": "<link secret from the emailed URL fragment>"
}),
});requests.post(
f"https://sandbox.api.lendeasy.ai /v1/servicing/borrower-document-uploads/exchange" ,
headers={"X-LendEasy-Voice-Task-Token" : dispatch_token},
json={
"linkToken": "<link secret from the emailed URL fragment>"
},
)200 400
{
"accepted": true ,
"sessionToken": "<opaque short-lived session token>",
"expiresAt": "2026-07-25T19: 10 :00Z",
"instructions": {
"evidenceType": "DOCTORS_MEDICAL_LEAVE_CERTIFICATE",
"state": "OPENED",
"expiresAt": "2026-08-01T18: 00 :00Z",
"uploadsRemaining": 1 ,
"title": "Please send us your doctor's letter",
"mustShow": [
"Your name",
"That you are currently unable to work",
"The date your leave started",
"The date you are expected to return to work",
"Your doctor's name, practice and signature",
"The date they issued it"
],
"doNotSend": [
"A diagnosis, symptoms, treatment or medication",
"Your medical history or records",
"An employer leave letter",
"Disability benefit paperwork"
],
"privacyNote": "We only need the facts listed above. Please do not send anything else — we do not need it and we would rather not hold it.",
"acceptedFormats": [
"PDF",
"JPEG",
"PNG"
]
}
}{
"error": "The callback body is invalid."
}Body parameters Field Type Description linkToken required string
cURL Node Python
Request
curl -X POST https://sandbox.api.lendeasy.ai /v1/servicing/borrower-document-uploads/exchange \
-H "X-LendEasy-Voice-Task-Token: $DISPATCH_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"linkToken": "<link secret from the emailed URL fragment>"
}' await fetch(`https://sandbox.api.lendeasy.ai /v1/servicing/borrower-document-uploads/exchange` , {
method: "POST" ,
headers: { "X-LendEasy-Voice-Task-Token" : dispatchToken, "Content-Type" : "application/json" },
body: JSON.stringify({
"linkToken": "<link secret from the emailed URL fragment>"
}),
});requests.post(
f"https://sandbox.api.lendeasy.ai /v1/servicing/borrower-document-uploads/exchange" ,
headers={"X-LendEasy-Voice-Task-Token" : dispatch_token},
json={
"linkToken": "<link secret from the emailed URL fragment>"
},
)200 400
{
"accepted": true ,
"sessionToken": "<opaque short-lived session token>",
"expiresAt": "2026-07-25T19: 10 :00Z",
"instructions": {
"evidenceType": "DOCTORS_MEDICAL_LEAVE_CERTIFICATE",
"state": "OPENED",
"expiresAt": "2026-08-01T18: 00 :00Z",
"uploadsRemaining": 1 ,
"title": "Please send us your doctor's letter",
"mustShow": [
"Your name",
"That you are currently unable to work",
"The date your leave started",
"The date you are expected to return to work",
"Your doctor's name, practice and signature",
"The date they issued it"
],
"doNotSend": [
"A diagnosis, symptoms, treatment or medication",
"Your medical history or records",
"An employer leave letter",
"Disability benefit paperwork"
],
"privacyNote": "We only need the facts listed above. Please do not send anything else — we do not need it and we would rather not hold it.",
"acceptedFormats": [
"PDF",
"JPEG",
"PNG"
]
}
}{
"error": "The callback body is invalid."
}