Conga Product Documentation

Welcome to the new doc site. Some of your old bookmarks will no longer work. Please use the search bar to find your desired topic.

Show Page Sections

Generate and Download Document

This topic describes the details and steps for generating the document with JSON data and downloading the generated document to your browser. You might use this functionality differently to generate documents depending on your business case.

Prerequisites

  • Contact your Account Executive with your 18-digit OrgID to enable the Composer API feature.
  • Refer to the Authentication section to generate the Client ID and Client Secret that will be used in the code to connect to the Conga Authorization server.

Use Case

In this use case, we use the template saved in your Box account, merge the document with JSON data, convert it to PDF format, and then download it. All of these composer parameters are added to the legacyOptions tag of the merge request body, as well as a JSON payload in the jsonData tag.

Note:

You can also use the following cloud storage providers as per your business use case:

  • AWS
  • SharePoint
  • Google Drive
  • Dropbox
  • OneDrive
  • Salesforce
  • SFTP

Generate and Download Document Use case

This use case describes how a REST API developer merges a template stored in a cloud storage provider with JSON data, converts the result to PDF, and downloads the generated document using the Composer API.

This use case provides an example of how to generate a document from a template and JSON data, and download the resulting file using the Composer API. Your implementation may vary based on your specific business requirements.

Business Context

Organizations that generate high volumes of business documents, such as proposals, contracts, or order confirmations, often store reusable templates in a cloud storage provider and need to merge those templates with dynamic data at the time of generation. Rather than manually assembling documents, an integration developer can use the Composer API to programmatically merge a stored template with JSON data, produce a PDF, and deliver it directly to an end user or downstream system. This approach reduces manual effort, ensures consistent formatting, and allows document generation to be embedded into existing applications or workflows.

Overview

In this use case, a template saved in a Box account is merged with JSON data, converted to PDF format, and downloaded. The Composer parameters that control this behavior are included in the LegacyOptions tag of the merge request body, along with a JSON payload in the JsonData tag and template source details in the TemplateSources tag.

Note:

Although this use case uses Box, you can use other cloud storage providers based on your business requirements, including AWS, SharePoint, Google Drive, Dropbox, OneDrive, Salesforce, and SFTP.

Actors/Roles

  • Integration developer: Configures the API client, authenticates to the Conga Authorization server, and submits the merge and download requests.
  • Composer API: Processes the merge request, generates the document, and makes it available for download.
  • Cloud storage provider (Box): Stores the source template referenced by the merge request.

Prerequisites

  • The Composer API feature is enabled for the Salesforce org. Contact your Account Executive with your 18-digit Org ID to enable this feature.
  • A Client ID and Client Secret have been generated for connecting to the Conga Authorization server. See Authentication.
  • A template containing the required merge fields has been created and uploaded to a Box account folder, and its File ID has been noted.

Trigger

An integration developer initiates the process by submitting a merge request to the Composer API that references a template stored in Box and includes a JSON data payload. The request explicitly sets generateDocumentDownload to true under output, which signals that the resulting document should be made available for download rather than routed through another delivery method.

Tasks

  1. Prepare the template and store it in the Box account folder. Create a template that contains the required merge fields and upload it to the Box folder. Note the template's File ID for use in the merge request.

  2. Retrieve the Conga authentication token. Call the Composer REST API token endpoint using the Client ID and Client Secret to obtain a bearer token required for subsequent requests.

    FieldValue
    Endpointhttps://login-rls.congacloud.com/api/v1/auth/connect/token
    MethodPOST
    Request headerContent-Type: application/x-www-form-urlencoded
    Request bodygrant_type=client_credentials&scope=doc-gen.composer&client_id=<congaAuthClientId>&client_secret=<congaAuthClientSecret>

    The response includes an access_token, its expires_in value (in seconds), and the token_type (Bearer).

  3. Create and submit the merge request. Submit a merge request that includes the PDF output option and output file name in LegacyOptions, the merge data in JsonData, the Box template reference in TemplateSources, and generateDocumentDownload set to true.

    Note: Escape double quotes inside the JsonData tag with a backslash (\).
    FieldValue
    Endpointhttps://coreapps-rlsprod.congacloud.com/api/ingress/v1/Merge
    MethodPOST
    Request headerAuthorization: Bearer <congaAuthToken>; Content-Type: application/json
    {
      "LegacyOptions": {
        "DefaultPdf": "1",
        "OFN": "Box + Document Download Testing"
      },
      "JsonData": "{\"firstName\":\"John\",\"lastName\":\"Doe\",
        \"executiveSummary\":\"Below, you will find a proposal, etc. etc.\",
        \"products\":[{\"name\":\"test product\",\"quantity\":5,
        \"price\":10,\"total\":50},{\"name\":\"Creative Name\",
        \"quantity\":10,\"price\":20,\"total\":200}]}",
      "TemplateSources": [
        {"IntegrationName":"box", "FileId": "{{FileId}}"}
      ],
      "output": {"generateDocumentDownload": true}
    }

    A successful response returns a correlationId and a status of Accepted.

  4. Check the merge request status. Poll the status endpoint using the correlationId from the previous step until the status changes from Pending to Completed or Error.

    FieldValue
    Endpointhttps://coreapps-rlsprod.congacloud.com/api/status/v1/status/{correlationId}
    MethodGET
    Request headerAuthorization: Bearer <congaAuthToken>
  5. Get the downloadable URL. Once the status is Completed, call the pre-signed service endpoint using the correlationId (as lookupId) to retrieve the URL for the generated document.

    FieldValue
    Endpointhttps://coreapps-rlsprod.congacloud.com/api/presigned/v1/PreSignedService/{lookupId}
    MethodGET
    Request headerAuthorization: Bearer <congaAuthToken>

    The response contains isSuccessful and a URL similar to https://ENVIRONMENT_DOMAIN/PreSignedService/{lookupId1}/{lookupId2}/{{filename}}.

  6. Download the document. Parse lookupId1 and lookupId2 from the URL returned in the previous step, and call the download endpoint to retrieve the generated document.

    FieldValue
    Endpointhttps://coreapps-rlsprod.congacloud.com/api/presigned/v1/PreSignedService/{lookup1}/{lookup2}
    MethodGET
    Request headerAuthorization: Bearer <congaAuthToken>

Result

  • The template is merged with the JSON data and generated as a PDF document.

  • A downloadable URL for the generated document is returned to the requesting application.

  • The document is downloaded to the requesting application or browser.

Variations

This use case can be adapted to reference a template stored in a different cloud storage provider, such as AWS, SharePoint, Google Drive, Dropbox, OneDrive, Salesforce, or SFTP, by changing the IntegrationName value in TemplateSources. It can also be adapted to generate the document in a different output format, or to deliver the generated document by email instead of a direct download.

Tips and Best Practices

Tip: Cache the authentication token until it expires (expires_in is typically 3600 seconds) instead of requesting a new token for every merge request.
Tip: Poll the status endpoint with a reasonable delay between calls rather than continuously, to avoid unnecessary load.
Warning: Double quotes inside the JsonData tag must be escaped with a backslash, or the merge request will fail to parse.

Step 2: Retrieve Conga Authentication Token

A Conga authentication token is required when you submit a request to merge a document or check the merge request status. To get this token, pass the client ID and client secret you obtained when enabling the Salesforce org for Conga Composer API.

Call the following Composer REST API method to get the Conga authentication token.

End Point

https://login-rls.congacloud.com/api/v1/auth/connect/token

Request Method

POST

Request Header

  • Content-Type: application/x-www-form-urlencoded
  • Content-Length: <calculated when request is sent>

Request Body

  • grant_type: client_credentials
  • scope: doc-gen.composer
  • client_id: <congaAuthClientId>
  • client_secret: <congaAuthClientSecret>

Response Body

{
   "access_token ":".....token value.....",
   "expires_in": 3600,
   "token_type": "Bearer",
   "scope": "doc-gen.composer"
}

Step 3: Create Merge Request and Submit

After completing the previous three steps, you can create a merge request to generate the document. The merge request contains several parameters that determine which features are included in the generated document.

In the merge API request body, you can control the behavior of document generation by including values in the legacyOptions tag, a JSON payload in the jsonData tag, and getting the template from your cloud storage provider in the TemplateSources tag.

In this use case:

  • DefaultPDF: Generate a document in PDF format.
  • OFN: Output File Name, overriding the default name of the file.
  • jsonData: Create a JSON Data body as described above in the example.
    Note:

    You must include the escape character (\) for double quotes inside the jsonData tag.

  • TemplateSources
    • IntegrationName: box (name of the cloud storage provider)
    • FileID: The location of a template file.
  • generateDocumentDownload under output must be set to true.
    Tip:

    For example

    "output": {

    "generateDocumentDownload": true

    }

Call the below Composer REST API method to create a document using the Merge API service.

End Point

https://coreapps-rlsprod.congacloud.com/api/ingress/v1/Merge

Request Method

POST

Request Header

  • Authorization: Bearer <congaAuthToken>
  • Content-Type: application/json
  • Content-Length: <calculated when the request is sent>

Request Body

{
  "LegacyOptions": {
    "DefaultPdf": "1",
    "OFN": "Box + Document Download Testing"
  },
  "JsonData": "{\"firstName\":\"John\",\"lastName\":\"Doe\",
                \"executiveSummary\":\"Below, you will find a proposal, etc. etc.\",
                \"products\":[{\"name\":\"test product\",\"quantity\":5,
                 \"price\":10,\"total\":50},{\"name\":\"Creatice Name\",
                \"quantity\":10,\"price\":20,\"total\":200}]}",
  "TemplateSources": [
        {"IntegrationName":"box", "FileId": "{{FileId}}"}
  ],
  "output": {"generateDocumentDownload": true} 
}

Response Body

{
   "correlationId": "<correlationId>",
   "status": "Accepted",
   "result": {
     "statusCode": "Success",
     "statusMessage": [
         {
             "code": "SUCC200",
             "description": "Success"
         }
     ]  
   }
}

Step 4: Check Merge Request Status

Once you send a request to generate a document, you will receive a correlationId in response. You can check the current merge status request using this correlationId.

Call the following Composer REST API service to check the merge request status.

Note:

Call this method repeatedly with a delay until the status changes from "Pending" to "Completed" or "Error."

  • correlationId: You can find the value for this parameter from the previous step to submit the merge request’s response body.

End Point

https://coreapps-rlspreview.congacloud.com/api/status/v1/status/{correlationId}

Request Method

GET

Request Header

Authorization: Bearer {{congaAuthToken}}

Response Body

{
    "statusPersistanceRecord": {
        "correlationId": "<correlationId>",
        "envelope": [
            {
                "version": "1.0.0",
                "correlationId": "<correlationId>",
                "transactionId": "<transactionId>",
                "topic": {
			--------------------------------------------------
			--------------------------------------------------              
        ],
        "message": "Completed",
        "lastUpdateTimeStamp": 638036833402666423,
        "createdDate": 638036830011162087
    }
}

Step 5: Get the Downloadable URL(s)

After receiving a Completed status response in step 4, the document is ready to be downloaded.

Call the following Composer REST API service to get the downloadable URL(s) for download.

  • lookupId: The CorrelationId obtained from the response in step 3.
    Note: The merged file download link is valid for 7 days. After 7 days, using the correlationId to fetch the download URL will return a 404 Not Found error, and the link will no longer be valid.

End Point

https://coreapps-rlsprod.congacloud.com/api/presigned/v1/PreSignedService/{lookupId}

Response Endpoint

https://coreapps-rlsprod.congacloud.com/api/presigned/v1/PreSignedService/{CorrelationId}

Request Method

GET

Request Header

Authorization: Bearer <congaAuthToken>

Response Body

The response should contain:

  • “isSuccessful” parameter: “true”
  • The URL to use to start downloading the merged document.
{
    "isSuccessful": true,
    "statusCode": 200,
    "preSignedCreateResponseModel": {
        "correlationId": "<correlation id>",
        "fileInfoDetailsList": [
            {
                "transactionId": "<transactionId>",
                "url": "https://ENVIRONMENT_DOMAIN/PreSignedService/523954f3264c463fa6cbf36deaed3df2_DatasetJson/aae1bdcb-e520-4581-8e96-23aae5bc0b88/{{filename}}",
                "fileName": "<file name of document>",
                "tags": null
            }
        ]
    }
}

Step 6: Download the Document

Use the lookupIds available in the URL received in the response of step 5 to download the document.

Call the following Composer REST API service to download the document:

Note:

Refer to the example below to understand how to obtain the lookupId1 and lookupId2 from the URL received in step 5.

For example: If the URL received is: https://ENVIRONMENT_DOMAIN/PreSignedService/523954f3264c463fa6cbf36deaed3df2_DatasetJson/aae1bdcb-e520-4581-8e96-23aae5bc0b88/<filename>, then lookupId1= 523954f3264c463fa6cbf36deaed3df2_DatasetJson and lookupId2= aae1bdcb-e520-4581-8e96-23aae5bc0b88

End Point

https://coreapps-rlspreview.congacloud.com/api/presigned/v1/PreSignedService/{lookup1}/{lookup2}

Request Method

GET

Request Header

Authorization: Bearer <congaAuthToken>