The generic intake endpoint accepts documents from any system that is capable of delivering to a REST API endpoint.

The endpoint accepts metadata values as a set of simple key value pairs followed by a single file containing the incoming document.

Request Details

To submit a document to the platform via the generic endpoint, construct an HTTP POST request with the multipart form data content type, and the headers and content sections described below:

Headers & Form Content Sections

Name

Location

Sample Value & Description

X-Auth-User

Header

12345

The NEXTSTEP user account number used for authentication

This will be provided by Concord Customer Success team

X-Auth-ApiKey

Header

12345-6789-1212-12345-0001

The API key for the provided NEXTSTEP user account

This will be provided by Concord Customer Success team

metadata

Content Section

See Example

The document metadata as a JSON object.

file

Content Section

<binary file data>

The bytes representing the raw file content for the fax file

Metadata Definition

Name

Sample Value & Description

sourceId

bbe58db7-b3f3-461a-9c47-5b803586cc53

A source message identifier that is generated by the originating system. The Source message identifier will be created if one is not passed in. (Optional)

folderId

See Example

The folder the document should be stored in.

properties

See Example

A set of name-value pairs that define additional metadata that should be stored with the document.

Example

An example HTTP POST request for the intake API (in raw text format) is provided below:

Example Copy imageCopy
POST /api/intake HTTP/1.1
Host: https://nsapi.concord.net
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
X-Auth-User: 12345
X-Auth-ApiKey: 12345-6789-1212-12345-0001

Content-Disposition: form-data; name="metadata"

{
  "queueId": "1234567892",
  "sourceId": "bbe58db7-b3f3-461a-9c47-5b803586cc53",
  "folderId":"00000000-0000-0000-0000-000000000000",
  "properties": {
    "name1": "value1",
    "name2": "value2",
    "name3": "value3"
  }
}

Content-Disposition: form-data; name="file"; filename="undefined"
Content-Type: file

<binary file data>

------WebKitFormBoundary7MA4YWxkTrZu0gW--

Postman

A Postman sample script is provided below:

Postman sample Copy imageCopy
{
        "info": {
                "_postman_id": "b86d8ef9-2a8e-4b43-a8bd-7c9f2272c56f",
                "name": "NEXTSTEP API Samples",
                "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
        },
        "item": [
                {
                        "name": "Document Intake - Generic",
                        "request": {
                                "method": "POST",
                                "header": [
                                        {
                                                "key": "X-Auth-User",
                                                "value": "12345",
                                                "type": "default"
                                        },
                                        {
                                                "key": "X-Auth-ApiKey",
                                                "value": "12345-6789-1212-12345-0001",
                                                "type": "default"
                                        }
                                ],
                                "body": {
                                        "mode": "formdata",
                                        "formdata": [
                                                {
                                                        "key": "metadata",
                                                        "value": "{\n\"queueId\": \"1234567892\",\n\"sourceId\": \"bbe58db7-b3f3-461a-9c47-5b803586cc53\",\n\"folderId\":\"00000000-0000-0000-0000-000000000000\",\n\"properties\": {\"SourceDocument\": \"00000000-0000-0000-0000-000000000000\"}\n}",
                                                        "type": "default"
                                                },
                                                {
                                                        "key": "file",
                                                        "type": "file",
                                                        "src": "/C:/_Sample Documents/Test Fax.pdf"
                                                }
                                        ]
                                },
                                "url": {
                                        "raw": "https://nsapi.concord.net/api/intake",
                                        "protocol": "https",
                                        "host": [
                                                "nsapi",
                                                "concord",
                                                "net"
                                        ],
                                        "path": [
                                                "api",
                                                "intake"
                                        ]
                                }
                        },
                        "response": []
                }
        ]
}

.NET/C# Sample

A .NET/C# sample is provided below:

C# sample Copy imageCopy
private static void DocumentIntakeFaxprivate static void DocumentIntakeGeneric()
{
        // The URL to the NEXTSTEP API
        const string NextstepApiEndpoint = @"https://nsapi.concord.net/";

        // The NEXTSTEP API User/Key values. You may need to contact Concord support to have them generate these for you.
        const string NextstepApiUser = @"12345";
        const string NextstepApiKey = @"12345-6789-1212-12345-0001";

        // Trim any trailing slash from the NEXTSTEP API endpoint
        string faxNotifyUrl = NextstepApiEndpoint.TrimEnd("/".ToCharArray());

        // Add the fax notify path to the NEXTSTEP API URL
        faxNotifyUrl = $"{faxNotifyUrl}/api/intake";

        // Create our multi-part form data object
        MultipartFormDataContent content = new MultipartFormDataContent();

        // Create our document intake request object
        DocumentIntakeRequest request = new DocumentIntakeRequest
        {
                QueueId = @"1234567892",
                SourceId = @"bbe58db7-b3f3-461a-9c47-5b803586cc53",
                FolderId = @"00000000-0000-0000-0000-000000000000",
                Properties = new Dictionary<string, string>
                {
                        { @"SourceDocument", @"00000000-0000-0000-0000-000000000000" }
                }
        };

        // Assign the document intake request object to the multi-part form data object
        content.Add(new StringContent(JsonConvert.SerializeObject(request)), @"metadata");

        // Add a PDF file to the request
        byte[] fileBytes = File.ReadAllBytes(@".\Test Fax.pdf");
        ByteArrayContent fileByteArray = new ByteArrayContent(fileBytes);
        fileByteArray.Headers.ContentType = MediaTypeHeaderValue.Parse(@"application/pdf");
        content.Add(fileByteArray, "\"file\"", $"\"Test Fax.pdf\"");

        try
        {
                using (HttpClient client = new HttpClient())
                {
                        client.DefaultRequestHeaders.Clear();
                        client.DefaultRequestHeaders.Add(@"X-Auth-User", NextstepApiUser);
                        client.DefaultRequestHeaders.Add(@"X-Auth-ApiKey", NextstepApiKey);

                        client.BaseAddress = new Uri(faxNotifyUrl);

                        HttpResponseMessage response = client.PostAsync(faxNotifyUrl, content).Result;

                        string result = response.Content.ReadAsStringAsync().Result;
                }
        }
        catch (Exception ex)
        {
                // Just outputting the exception details, this exception would normally be handled differently
                Console.WriteLine($"EXCEPTION: {ex.Message}");
        }
}