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
}
'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)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));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.nextlevelmca.com/v1/deals/{dealId}/submissions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'lender_ids' => [
'<string>'
],
'document_ids' => [
'<string>'
],
'template_id' => '<string>',
'message_override' => '<string>',
'subject_override' => '<string>',
'send' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nextlevelmca.com/v1/deals/{dealId}/submissions"
payload := strings.NewReader("{\n \"lender_ids\": [\n \"<string>\"\n ],\n \"document_ids\": [\n \"<string>\"\n ],\n \"template_id\": \"<string>\",\n \"message_override\": \"<string>\",\n \"subject_override\": \"<string>\",\n \"send\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.nextlevelmca.com/v1/deals/{dealId}/submissions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"lender_ids\": [\n \"<string>\"\n ],\n \"document_ids\": [\n \"<string>\"\n ],\n \"template_id\": \"<string>\",\n \"message_override\": \"<string>\",\n \"subject_override\": \"<string>\",\n \"send\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nextlevelmca.com/v1/deals/{dealId}/submissions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"lender_ids\": [\n \"<string>\"\n ],\n \"document_ids\": [\n \"<string>\"\n ],\n \"template_id\": \"<string>\",\n \"message_override\": \"<string>\",\n \"subject_override\": \"<string>\",\n \"send\": true\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"deal_id": "<string>",
"lender_id": "<string>",
"lender_name": "<string>",
"status": "pending",
"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>",
"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, queues one email per lender 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 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 are listed in meta.not_sent. This sends real email — 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
}
'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)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));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.nextlevelmca.com/v1/deals/{dealId}/submissions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'lender_ids' => [
'<string>'
],
'document_ids' => [
'<string>'
],
'template_id' => '<string>',
'message_override' => '<string>',
'subject_override' => '<string>',
'send' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nextlevelmca.com/v1/deals/{dealId}/submissions"
payload := strings.NewReader("{\n \"lender_ids\": [\n \"<string>\"\n ],\n \"document_ids\": [\n \"<string>\"\n ],\n \"template_id\": \"<string>\",\n \"message_override\": \"<string>\",\n \"subject_override\": \"<string>\",\n \"send\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.nextlevelmca.com/v1/deals/{dealId}/submissions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"lender_ids\": [\n \"<string>\"\n ],\n \"document_ids\": [\n \"<string>\"\n ],\n \"template_id\": \"<string>\",\n \"message_override\": \"<string>\",\n \"subject_override\": \"<string>\",\n \"send\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nextlevelmca.com/v1/deals/{dealId}/submissions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"lender_ids\": [\n \"<string>\"\n ],\n \"document_ids\": [\n \"<string>\"\n ],\n \"template_id\": \"<string>\",\n \"message_override\": \"<string>\",\n \"subject_override\": \"<string>\",\n \"send\": true\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"deal_id": "<string>",
"lender_id": "<string>",
"lender_name": "<string>",
"status": "pending",
"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>",
"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 {{offer_submission_link}} are still rendered.
50000Replaces the template subject.
500true (default) queues one email per lender through the location’s connected mailbox. false only records the submissions as pending for the team to send from the app.
Was this page helpful?