Skip to main content
Prerequisites: A verified clickwrap event with status ACCEPTED, and your App ID + App Key for server-side calls.
After a clickwrap event is verified with status ACCEPTED, ClickTerm generates downloadable PDF documents and stores the accepted content. Use these endpoints to retrieve them for legal records, compliance audits, or customer portals.

Certificate of Acceptance

A digitally signed PDF that proves a specific user accepted a specific clickwrap version at a specific time. Includes user ID, timestamp, IP address, browser/device information. Stored in immutable storage at the time of event verification and serves as admissible proof in legal and compliance contexts.

Endpoint

GET https://api.clickterm.com/public-client/v1/clickwrap-events/{clickwrapEventId}/certificate
ParameterRequiredDescription
clickwrapEventIdYesThe identifier for the Clickwrap Event from which you want to retrieve the Certificate of Acceptance
HttpResponse<InputStream> response = Unirest.get(
    "https://api.clickterm.com/public-client/v1/clickwrap-events/" + clickwrapEventId + "/certificate")
  .header("X-APP-ID", "YOUR_APP_ID")
  .header("X-APP-KEY", "YOUR_APP_KEY")
  .asBinary();
Files.copy(response.getBody(), Path.of("certificate.pdf"));
Returns application/pdf.

Clickwrap Agreement

The complete agreement PDF — includes the fully rendered clickwrap content (with all placeholders resolved) plus the Certificate of Acceptance appended at the end.
This is the recommended document for record-keeping. It contains both the agreement content and the certificate in a single PDF.

Endpoint

GET https://api.clickterm.com/public-client/v1/clickwrap-events/{clickwrapEventId}/agreement
ParameterRequiredDescription
clickwrapEventIdYesThe identifier for the Clickwrap Event from which you want to retrieve the Clickwrap Agreement
HttpResponse<InputStream> response = Unirest.get(
    "https://api.clickterm.com/public-client/v1/clickwrap-events/" + clickwrapEventId + "/agreement")
  .header("X-APP-ID", "YOUR_APP_ID")
  .header("X-APP-KEY", "YOUR_APP_KEY")
  .asBinary();
Files.copy(response.getBody(), Path.of("agreement.pdf"));
Returns application/pdf.
Both endpoints require a verified event with status ACCEPTED. Events with status DECLINED, PENDING, or UNVERIFIED will return an error.

Get clickwrap event details

Retrieve full metadata for a clickwrap event after it has been verified. Use it to audit the clickwrap lifecycle, cross-check template versions, or drive downstream workflows.

Endpoint

GET https://api.clickterm.com/public-client/v1/clickwrap-events/{clickwrapEventId}/details
ParameterRequiredDescription
clickwrapEventIdYesThe identifier for the Clickwrap Event you want to inspect
HttpResponse<String> response = Unirest.get(
    "https://api.clickterm.com/public-client/v1/clickwrap-events/" + clickwrapEventId + "/details")
  .header("X-APP-ID", "YOUR_APP_ID")
  .header("X-APP-KEY", "YOUR_APP_KEY")
  .asString();

Response

{
  "clickwrapEventStatus": "ACCEPTED",
  "clickwrapEventId": "123e4567-e89b-12d3-a456-426614174000",
  "clickwrapTemplateId": "987e6543-e21b-45d3-b321-426614174999",
  "clickwrapTemplateVersion": 1,
  "clickwrapTemplateVersionMinor": 0,
  "endUserId": "423e4567-e89b-12d3-a456-426614174000",
  "templatePlaceholders": "{ \"email\": \"[email protected]\", \"phone\": \"+12345678900\" }",
  "technicalMetadata": "{\"userAgent\":\"okhttp/4.8.1\",\"ip\":\"a100:a100:a100:a100:a100:a100:a100:a100\"}",
  "presentedAt": "2025-08-20T14:25:00Z",
  "actionAt": "2025-08-20T14:30:00Z",
  "effectiveAt": "2025-08-20T14:00:00Z"
}

Response fields

FieldTypeDescription
clickwrapEventStatusStringACCEPTED or DECLINED
clickwrapEventIdUUIDUnique identifier for this Clickwrap Event
clickwrapTemplateIdUUIDThe Clickwrap Template shown to the end user
clickwrapTemplateVersionIntegerMajor version of the template used for this event
clickwrapTemplateVersionMinorIntegerMinor version of the template used for this event
endUserIdStringThe end user identifier linked to this event
templatePlaceholdersStringJSON-encoded placeholder values used in the template (or null)
technicalMetadataStringMetadata gathered from the end user’s client (IP address, user agent, etc.)
presentedAtTimestamp (UTC, ISO-8601)When the clickwrap was presented to the end user
actionAtTimestamp (UTC, ISO-8601)When the user’s action took place
effectiveAtTimestamp (UTC, ISO-8601)When the template version became effective

Show agreed content

Call showAcceptedContent to display the agreed content to an end user who has already accepted a clickwrap template. Make sure the SDK is initialized as shown in the quickstart.
ClickwrapAcceptedAgreementRequest request = new ClickwrapAcceptedAgreementRequest(
    templateId, endUserId, "en"
);

ClicktermDialog.showAcceptedContent(this, request,
    new ClicktermDialog.OnAcceptedContentListener() {
        @Override
        public void onSuccess(ClickwrapTemplateContent content) {
            Log.i("Clickterm result: ", content.getContent());
            // The response will contain the agreed content
        }

        @Override
        public void onError(String message) {
            Log.e("Clickterm error: ", message);
        }
    }
);
ParameterRequiredDescription
clickwrapTemplateIdYesThe ID of your clickwrap template (from the dashboard)
endUserIdYesYour identifier for the end user (max 256 chars)
The end user will only be shown the agreed content dialog if they have accepted and the event has been verified.

Verifying a Signature

How to verify consent and create the event.

Checking consent status

Query whether a user has accepted the latest version.

API reference — Certificate

Full request/response details for the certificate endpoint.

API reference — Agreement

Full request/response details for the agreement endpoint.