curl --request POST \
--url https://api.nextlevelmca.com/v1/deals/{dealId}/document-requests \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"items": [
{
"label": "<string>"
}
],
"person_id": "<string>",
"message": "<string>",
"expires_in_days": 45.5
}
'import requests
url = "https://api.nextlevelmca.com/v1/deals/{dealId}/document-requests"
payload = {
"items": [{ "label": "<string>" }],
"person_id": "<string>",
"message": "<string>",
"expires_in_days": 45.5
}
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({
items: [{label: '<string>'}],
person_id: '<string>',
message: '<string>',
expires_in_days: 45.5
})
};
fetch('https://api.nextlevelmca.com/v1/deals/{dealId}/document-requests', 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}/document-requests",
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([
'items' => [
[
'label' => '<string>'
]
],
'person_id' => '<string>',
'message' => '<string>',
'expires_in_days' => 45.5
]),
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}/document-requests"
payload := strings.NewReader("{\n \"items\": [\n {\n \"label\": \"<string>\"\n }\n ],\n \"person_id\": \"<string>\",\n \"message\": \"<string>\",\n \"expires_in_days\": 45.5\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}/document-requests")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"items\": [\n {\n \"label\": \"<string>\"\n }\n ],\n \"person_id\": \"<string>\",\n \"message\": \"<string>\",\n \"expires_in_days\": 45.5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nextlevelmca.com/v1/deals/{dealId}/document-requests")
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 \"items\": [\n {\n \"label\": \"<string>\"\n }\n ],\n \"person_id\": \"<string>\",\n \"message\": \"<string>\",\n \"expires_in_days\": 45.5\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"deal_id": "<string>",
"status": "pending",
"channel": "email",
"delivery": "email",
"sent": true,
"sent_to": "<string>",
"upload_url": "<string>",
"expires_at": "<string>",
"items": [
{
"id": "<string>",
"type": "<string>",
"label": "<string>",
"status": "pending",
"received_document_id": "<string>",
"received_at": "<string>"
}
],
"created_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>"
}
}Request documents from the merchant
Creates a document request (tracked in the app) and a merchant-portal upload link. channel: "email" emails it through the location’s connected mailbox (409 no_email_sender when none is connected); "sms" texts it through the CRM conversation when the contact is linked to the CRM — otherwise the link is returned with sent: false and meta.warning; "link_only" never sends. Uploads through the link are matched to the requested items automatically. Send an Idempotency-Key to avoid duplicate requests on retry.
curl --request POST \
--url https://api.nextlevelmca.com/v1/deals/{dealId}/document-requests \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"items": [
{
"label": "<string>"
}
],
"person_id": "<string>",
"message": "<string>",
"expires_in_days": 45.5
}
'import requests
url = "https://api.nextlevelmca.com/v1/deals/{dealId}/document-requests"
payload = {
"items": [{ "label": "<string>" }],
"person_id": "<string>",
"message": "<string>",
"expires_in_days": 45.5
}
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({
items: [{label: '<string>'}],
person_id: '<string>',
message: '<string>',
expires_in_days: 45.5
})
};
fetch('https://api.nextlevelmca.com/v1/deals/{dealId}/document-requests', 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}/document-requests",
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([
'items' => [
[
'label' => '<string>'
]
],
'person_id' => '<string>',
'message' => '<string>',
'expires_in_days' => 45.5
]),
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}/document-requests"
payload := strings.NewReader("{\n \"items\": [\n {\n \"label\": \"<string>\"\n }\n ],\n \"person_id\": \"<string>\",\n \"message\": \"<string>\",\n \"expires_in_days\": 45.5\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}/document-requests")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"items\": [\n {\n \"label\": \"<string>\"\n }\n ],\n \"person_id\": \"<string>\",\n \"message\": \"<string>\",\n \"expires_in_days\": 45.5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nextlevelmca.com/v1/deals/{dealId}/document-requests")
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 \"items\": [\n {\n \"label\": \"<string>\"\n }\n ],\n \"person_id\": \"<string>\",\n \"message\": \"<string>\",\n \"expires_in_days\": 45.5\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"deal_id": "<string>",
"status": "pending",
"channel": "email",
"delivery": "email",
"sent": true,
"sent_to": "<string>",
"upload_url": "<string>",
"expires_at": "<string>",
"items": [
{
"id": "<string>",
"type": "<string>",
"label": "<string>",
"status": "pending",
"received_document_id": "<string>",
"received_at": "<string>"
}
],
"created_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
Documents to request. At least one.
Show child attributes
Show child attributes
email sends through the location’s connected mailbox (409 no_email_sender if none is connected); sms texts the upload link through the CRM conversation when the contact is linked to the CRM, otherwise the link is returned unsent; link_only never sends — you deliver the link yourself.
email, sms, link_only Person to send to. Defaults to the deal’s primary owner, then the business’s primary contact.
Note included in the email or text.
2000Days until the request expires (1–90). Default 30.
1 <= x <= 90Was this page helpful?