Developer Documentation
Welcome to the Clickterm developer documentation! You can use our Client SDKs to display Clickwraps to your end-users and use Clickterm's frotend to manage templates, versions, adoption and much more.
Quick Start
The following flow is similar to that used by different Captcha providers:
- You include the Clickterm SDK on your web frontend or mobile app. For example, on your registration form.
- You make a request to retrieve a Clickwrap using our SDK
- If your end-user has not accepted the latest version of your Clickwrap template, a modal will be displayed to him to accept or decline.
- Our SDK will receive a Signature from our server and return it to your callback.
- When the user clicks Submit, you send the Signature to your backend in the Registration form request.
- You backend server sends the Signature to our API (POST /clickwrap/verify) for verification. The response will contain the action taken by the end-user and other useful metadata. A Clickwrap Event will be recorded in our system and a Certificate of Acceptance will be generated.
- You can notify your frontend or mobile app in the response from your registration request with the action taken by the end-user on the Clickwrap (accepted or declined)

Requesting a Clickwrap
Initialization examples:
// This is actually Typescript, need to add generic javascript example
declare const ClicktermWidget: any;
ngOnInit() {
this.clicktermWidget = new ClicktermWidget(environment.clicktermAppId);
}
this.clicktermWidget.clickwrap({
templateId: environment.clicktermTemplateId,
endUser: clicktermUUID,
templateParams: { ... }, //Optional
language: 'en',
}).then((clicktermResponse) => {
// Retrieve the signature and pass it on your next request
model.clicktermSignature = clicktermResponse.clicktermSignature;
}).catch((error: any) => {
console.error(error);
});
// Call from onCreate
ClicktermManager.initialize(BuildConfig.CLICKTERM_APP_ID);
TemplateRequest contentRequestBody = new TemplateRequest(BuildConfig.CLICKTERM_TEMPLATE_ID, pref.getUserId().toString(), null, "en");
ClicktermDialog.show(this, contentRequestBody, new ClicktermDialog.OnAgreementResultListener() {
@Override
public void onSuccess(String clicktermSignature) {
if (clicktermSignature == null) {
// No signature received, user has already acted on the clickwrap
// The user was shown no dialog. Continue with normal flow.
} else {
// Clickterm signature received.
// Send for verification on the backend
}
}
@Override
public void onError(String error) {
Log.e(error);
}
}, config);
To initialize our Client SDK, you only need to provide your Clickterm AppId. You can obtain it from our Integration menu on the Clickterm web app (app.clickterm.com/integration)
To request a new Clickwrap, you need to provide the following parameters:
| Parameter | Required | Description |
|---|---|---|
| templateId | Yes | The Id of your Clickwrap template. You can obtain this from the Clickterm web app after creating a template. |
| endUserId | Yes | String 256 max length. The identifier we will use in Clickterm to identify your endUser's events. If your userId is not known yet you can generate a UUID and map it to your userId in your backend |
| templatePlaceholders | No | A list of values to be replaced in the placeholders you set in your Clickwrap Template |
| language | No | Default: "en". The language to request from your template supported languages. |
Verify a Signature
This endpoint lets you verify a Clickterm Signature that was generated when a user accepted a clickwrap (e.g. terms and conditions).
- Your backend receives the signature from the client (website/app).
- You then send it to Clickterm’s /clickwrap/verify API with your appId and appKey.
- Our systems confirms that the signature is authentic and issued by Clickterm, and provides a Certificate of Acceptance
Why it matters: Verification ensures the signature hasn’t been forged or tampered with, providing proof of consent, security, and legal validity for clickwrap agreements.
Request:
Endpoint:
POST https://api.clickterm.com/clickwrap/verify
Verify Signature CURL Examples:
curl -XPOST -H 'X-APP-ID: {YOUR_APP_ID}' -H 'X-APP-KEY: {YOUR_APP_KEY}' -H "Content-type: application/json" -d '{
"clicktermSignature": "{SIGNATURE}"
}' 'https://api.clickterm.com/clickwrap/verify'
JSON Body:
{
"clicktermSignature": "{SIGNATURE}"
}
curl -XPOST -H 'X-APP-ID: {YOUR_APP_ID}' -H 'X-APP-KEY: {YOUR_APP_KEY}' -H "Content-type: application/json" -d '{
"clicktermSignature": "{SIGNATURE}"
}' 'https://api.clickterm.com/clickwrap/verify'
JSON Body:
{
"clicktermSignature": "{SIGNATURE}"
}
To verify a Clickterm Signature you need to send a POST request to our Public API from your backend server. You will need to include your Clickterm appId and Clickterm appKey. You can obtain them from our Integration menu on the Clickterm web app (app.clickterm.com/integration)
To request a new Clickwrap, you need to provide the following parameters:
| Parameter | Required | Description |
|---|---|---|
| signature | Yes | The Clickterm Signature sent to your backend from your Client (Website or App). It's returned when a new Clickwrap was requested and shown to the end-user |
Response:
The reponse body from the previous request:
// Json Response Prototype
{
"status": "string (enum: e.g. ACCEPTED, DECLINED)",
"clickwrapEventId": "string (UUID)",
"templateId": "string (UUID)",
"version": "integer",
"endUser": "string(256)",
"templateParams": "string (nullable, JSON-encoded or null)",
"digitalSignature": "string (256)",
"actionAt": "string (ISO-8601 timestamp)"
"certificateUrl": "String"
}
// Example:
{
"status": "ACCEPTED",
"clickwrapEventId": "123e4567-e89b-12d3-a456-426614174000",
"templateId": "987e6543-e21b-45d3-b321-426614174999",
"version": 1,
"endUser": "423e4567-e89b-12d3-a456-426614174000",
"templateParams": "{ \"email\": \"[email protected]\", \"phone\": \"+12345678900\" }",
"digitalSignature": "{\"userAgent\":\"okhttp/4.8.1\",\"ip\":\"a100:a100:a100:a100:a100:a100:a100:a100\"}",
"actionAt": "2025-08-20T14:30:00Z",
"certificateUrl": "certs.clickwrap.com/?id=987e6543-e21b-45d3-b321-426614174999"
}
// Example:
{
"status": "ACCEPTED",
"clickwrapEventId": "123e4567-e89b-12d3-a456-426614174000",
"templateId": "987e6543-e21b-45d3-b321-426614174999",
"version": 1,
"endUser": "432e4567-e89b-12d3-a456-426614174000",
"templateParams": "{ \"email\": \"[email protected]\", \"phone\": \"12345678900\" }",
"digitalSignature": "{\"userAgent\":\"okhttp/4.8.1\",\"ip\":\"a100:a100:a100:a100:a100:a100:a100:a100\"}",
"actionAt": "2025-08-20T14:30:00Z",
"certificateUrl": "certs.clickwrap.com/?id=987e6543-e21b-45d3-b321-426614174999"
}
This request returns the following information:
| Parameter | Type | Description |
|---|---|---|
| status | String | The result from the user's interaction with the Clickwrap modal dialog. (ACCEPTED or DECLINED). |
| clickwrapEventId | UUID | The Id of this partucular Clickwrap Event. Can also be consulted on the Clickterm web app. |
| templateId | UUID | The Id of the Clickwrap Template shown to the end-user. |
| version | Integer | The version of the Clickwrap Template used for this event. |
| endUser | String | The endUser identifier linked to this Event |
| templateParams | String | The list of values that was used to replace the placeholders in your Clickwrap Template. |
| digitalSignature | String | The metadata gathered from the end-user client at the time of the Event (IP Address, user-agent, etc) |
| actionAt | Timestamp | The timestamp the user's action took place at for this Clickwrap Event. |
| certificateUrl | String | The URL to the certificate of acceptance PDF for this Clickwrap Event if it was accepted |