curl --request POST \
--url https://api.nextlevelmca.com/v1/deals/{dealId}/submissions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"lender_ids": [
"<string>"
],
"document_ids": [
"<string>"
],
"template_id": "<string>",
"message_override": "<string>",
"subject_override": "<string>",
"send": true
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
lender_ids: ['<string>'],
document_ids: ['<string>'],
template_id: '<string>',
message_override: '<string>',
subject_override: '<string>',
send: true
})
};
fetch('https://api.nextlevelmca.com/v1/deals/{dealId}/submissions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.nextlevelmca.com/v1/deals/{dealId}/submissions"
payload = {
"lender_ids": ["<string>"],
"document_ids": ["<string>"],
"template_id": "<string>",
"message_override": "<string>",
"subject_override": "<string>",
"send": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"data": [
{
"id": "<string>",
"deal_id": "<string>",
"lender_id": "<string>",
"lender_name": "<string>",
"status": "pending",
"submission_method": "email",
"api": {
"id": "<string>",
"submission_id": "<string>",
"deal_id": "<string>",
"lender_id": "<string>",
"funder_api_spec_id": "<string>",
"environment": "development",
"external_id": "<string>",
"funder_status": "<string>",
"internal_status": "queued",
"deep_link_url": "<string>",
"error_message": "<string>",
"error_code": "auth_failed",
"attempt_number": 123,
"submitted_at": "<string>",
"last_polled_at": "<string>",
"next_poll_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"can_retry": true,
"retry_after_seconds": 123,
"retry_blocked_reason": "<string>"
},
"response_type": "<string>",
"response_notes": "<string>",
"decline_reason": "<string>",
"decline_category": "<string>",
"requested_items": [
"<string>"
],
"match_score": 123,
"match_eligible": true,
"submitted_by_id": "<string>",
"submitted_at": "<string>",
"responded_at": "<string>",
"trace_code": "K7M3QX",
"created_at": "<string>",
"updated_at": "<string>"
}
],
"meta": {}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}Submit a deal to lenders
Records one submission per lender (a lender-match snapshot is stored with each) and, unless send is false, sends each one: lenders with submission_method: "api" go through their funder integration (the application is queued to the funder’s API; meta.api_queued lists them and api on the row tracks the attempt), every other lender gets one email through the location’s connected mailbox using the default submission template (or template_id / message_override) with the chosen documents attached. Queued items come back with status: "queued"; poll GET /submissions/{id} for sent. When no mailbox is connected the email submissions are still recorded (status: "recorded", meta.warning: "no_email_sender") for the team to send from the app. Lenders that already have a submission on the deal are left unchanged and listed in meta.already_submitted; lenders without a submissions email, and API lenders whose pre-flight failed (reason: "api_not_ready", see GET /deals/{dealId}/api-readiness), are listed in meta.not_sent. This sends real email / real applications — always pass an Idempotency-Key so a retry cannot submit twice.
curl --request POST \
--url https://api.nextlevelmca.com/v1/deals/{dealId}/submissions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"lender_ids": [
"<string>"
],
"document_ids": [
"<string>"
],
"template_id": "<string>",
"message_override": "<string>",
"subject_override": "<string>",
"send": true
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
lender_ids: ['<string>'],
document_ids: ['<string>'],
template_id: '<string>',
message_override: '<string>',
subject_override: '<string>',
send: true
})
};
fetch('https://api.nextlevelmca.com/v1/deals/{dealId}/submissions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.nextlevelmca.com/v1/deals/{dealId}/submissions"
payload = {
"lender_ids": ["<string>"],
"document_ids": ["<string>"],
"template_id": "<string>",
"message_override": "<string>",
"subject_override": "<string>",
"send": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"data": [
{
"id": "<string>",
"deal_id": "<string>",
"lender_id": "<string>",
"lender_name": "<string>",
"status": "pending",
"submission_method": "email",
"api": {
"id": "<string>",
"submission_id": "<string>",
"deal_id": "<string>",
"lender_id": "<string>",
"funder_api_spec_id": "<string>",
"environment": "development",
"external_id": "<string>",
"funder_status": "<string>",
"internal_status": "queued",
"deep_link_url": "<string>",
"error_message": "<string>",
"error_code": "auth_failed",
"attempt_number": 123,
"submitted_at": "<string>",
"last_polled_at": "<string>",
"next_poll_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"can_retry": true,
"retry_after_seconds": 123,
"retry_blocked_reason": "<string>"
},
"response_type": "<string>",
"response_notes": "<string>",
"decline_reason": "<string>",
"decline_category": "<string>",
"requested_items": [
"<string>"
],
"match_score": 123,
"match_eligible": true,
"submitted_by_id": "<string>",
"submitted_at": "<string>",
"responded_at": "<string>",
"trace_code": "K7M3QX",
"created_at": "<string>",
"updated_at": "<string>"
}
],
"meta": {}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}{
"error": {
"type": "validation_error",
"message": "<string>",
"request_id": "<string>",
"code": "<string>",
"param": "<string>"
}
}Authorizations
API key (nlmca_live_…) or OAuth access token
Path Parameters
Deal id
Body
Lenders to submit to (1–50). Lenders that already have a submission on this deal are returned unchanged and listed in meta.already_submitted.
Documents on this deal to attach to the email. Defaults to none.
Email template to use. Defaults to the location’s default submission template.
Replaces the template body (HTML or plain text). Template variables such as {{business_name}} and {{lender_name}} are still rendered.
50000Replaces the template subject.
500true (default) queues one email per lender through the location’s connected mailbox — or, for lenders with submission_method: "api", sends the application through the funder’s API integration. false only records the submissions as pending for the team to send from the app.
Was this page helpful?